• 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.

VPS Starter Arubacloud
+1 głos
301 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 (251,210 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 (251,210 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 195 wizyt
pytanie zadane 7 października 2018 w C i C++ przez Irsapel Początkujący (410 p.)
0 głosów
6 odpowiedzi 245 wizyt
+1 głos
2 odpowiedzi 623 wizyt
pytanie zadane 3 grudnia 2021 w JavaScript przez yellowstone Nowicjusz (130 p.)

92,452 zapytań

141,262 odpowiedzi

319,077 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...