• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Gra w losowanie liczb. Liczba się nie zmienia.

Object Storage Arubacloud
+1 głos
307 wizyt
pytanie zadane 9 maja 2022 w Java przez pondziu88 Nowicjusz (160 p.)

Hej. Jestem raczkujący w temacie, więc proszę o wyrozumiałość jeżeli będzie mało czytelnie:).

Chcę napisać typowy program z podręcznika, czyli zgadywanie liczby o 1 do 100.

Ogólnie sama gra działa jak trzeba, z jednym małym ale... Na końcu, kiedy pada pytanie "Czy chcesz spróbować jeszcze raz?" wybieramy opcję tak lub nie (a raczej tylko nie ;p). Kiedy po "tak" ma nastąpić nowa gra, niestety, wylosowana liczba jest taka sama jak w poprzedniej rozgrywce. Żeby wylosowało nową, trzeba zakończyć aplikację. Może mi ktoś przełożyć dlaczego tak się dzieje?

public class Main {

    public static void main(String[] args) {
        boolean condition = false;
        Scanner scanner = new Scanner(System.in);
        Scanner yesNo = new Scanner(System.in);
        Random random = new Random();
        int winNumber = random.nextInt(100) + 1;

        System.out.println("Hej!");
        System.out.println();
        System.out.println();
        System.out.println("Gra polega na tym, że musisz odgadnąć jaką liczbę wylosowałem od 1 do 100 :)");
        System.out.println("Bez obaw, będę dawał Ci podpowiedzi");
        System.out.println("Jeżeli jesteś gotowy naciśnij ENTER");
        String enter = scanner.nextLine();

        System.out.println("ZACZYNAMY");



        while (!condition) {


                System.out.println("Podaj liczbę od 1 do 100");
                System.out.println(winNumber);                                          //szybki wgląd w wylosowaną liczbę
                int userNumber = scanner.nextInt();

                if (userNumber < winNumber && winNumber - userNumber > 25) {           //liczby za małe
                    System.out.println("ZIMNO liczba jest dużo za mała");
                    System.out.println();
                } else if (userNumber < winNumber && winNumber - userNumber <= 25 && winNumber - userNumber > 10) {
                    System.out.println("CIEPL0 liczba jest za mała");
                    System.out.println();
                } else if (userNumber < winNumber && winNumber - userNumber <= 10) {
                    System.out.println("GORĄCO liczba jest nieco za mała");
                    System.out.println();
                } else if (userNumber > winNumber && userNumber - winNumber > 25) {     //liczby za duże
                    System.out.println("ZIMNO liczba jest dużo za duża");
                    System.out.println();
                } else if (userNumber > winNumber && userNumber - winNumber <= 25 && userNumber - winNumber > 10) {
                    System.out.println("CIEPL0 liczba jest za duża");
                    System.out.println();
                } else if (userNumber > winNumber && userNumber - winNumber <= 10) {
                    System.out.println("GORĄCO liczba jest nieco za duża");
                    System.out.println();
                } else {                                    //liczby za w sam raz
                    System.out.println("BRAWO! Trafione!");
                    System.out.println();
                    System.out.println("Czy chcesz spróbować raz jeszcze? tak/nie");
                    System.out.println();

                    String questionEnd = yesNo.nextLine();
                    {                                                                //powtórka lub koniec pętli
                        if (questionEnd.equals("nie")) {
                            condition = true;
                        } else {
                            System.out.println();
                            System.out.println("No to powtóreczka :)");
                            System.out.println();
                        }
                    }
                }
            }
         }
     }

 

1 odpowiedź

+3 głosów
odpowiedź 9 maja 2022 przez VBService Ekspert (253,420 p.)
wybrane 9 maja 2022 przez pondziu88
 
Najlepsza

Ponieważ liczba jest losowana przed pętlą,

int winNumber = random.nextInt(100) + 1;

a wpisanie tak (lub samo wciśnięcie Enter-a) nie powoduje opuszczenia pętli, przez co liczba (wartość) znajdująca się w zmiennej winNumber nie ulega "zmianie". Wstaw ponowne losowanie liczby do bloku kodu - "gdy tak".

 

[ on-line ]

if (questionEnd.equals("nie")) {
     condition = true;
} else {
     System.out.println();
     System.out.println("No to powtóreczka :)");
     System.out.println();
     winNumber = random.nextInt(100) + 1;
}

 

komentarz 9 maja 2022 przez pondziu88 Nowicjusz (160 p.)

Dzięki wielkie. Działa jak trzeba. Coś podobnego chciałem zrobić ale zamiast

winNumber = random.nextInt(100) + 1;

wpisywałem

int winNumber = random.nextInt(100) + 1;

Niby oczywiste, ale jednak na to nie wpadłem:).

Dzięki raz jeszcze.

komentarz 9 maja 2022 przez VBService Ekspert (253,420 p.)

To jest tzw. "deklaracja zmiennej" wykonuje się ją raz w kodzie. Najczęściej na początku kodu np.

    public static void main(String[] args) {
        boolean condition = false;
        Scanner scanner = new Scanner(System.in);
        Scanner yesNo = new Scanner(System.in);
        Random random = new Random();
        int winNumber = random.nextInt(100) + 1; // Deklaracja i przypisanie wartości

        // ... dalszy kod

        winNumber = 100; // ponowne przypisanie wartości

         // ... dalszy kod

        winNumber = random.nextInt(200) + 1; // ponowne przypisanie wartości

         // ... dalszy kod

         winNumber += 2; // ponowne przypisanie wartości, inkrementacja o 2
    
          // ... dalszy kod
}
             

 

Zasięg deklaracji i czas istnienia zmiennych ]

Podobne pytania

–1 głos
2 odpowiedzi 202 wizyt
pytanie zadane 7 października 2018 w C i C++ przez Irsapel Początkujący (410 p.)
0 głosów
6 odpowiedzi 253 wizyt
+1 głos
2 odpowiedzi 664 wizyt
pytanie zadane 3 grudnia 2021 w JavaScript przez yellowstone Nowicjusz (130 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...