gra z losowaniem liczby

gra z losowaniem liczby
MI
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:9
0

witam wszystkich
chciałem prosić o drobną pomoc przy mojej małej grze, otóż nie wiem trochę jak ogarnąć blok try catch tak aby w wypadku gdy użytkownik poda zamiast liczby całkowitej przykładowo litere to oprócz komunikatu będzie mógł wprowadzić liczbę ponownie i ogólnie cała gra się nie posypie. Bo jak na razie to jestem na etapie w którym po podaniu niewłaściwej wartości program komunikuje jedynie o błędzie i kończy pracę

Kopiuj
import java.util.*;

public class RandomNumberGame {
    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
try {
    System.out.print("Podaj zakres z jakiego mają być losowane liczby: ");
    int rangeFromUser=sc.nextInt();//zakres podany przez użytkownia
    int luckyNumber= (int) ((Math.random()*rangeFromUser)+1);//liczba wylosowana na podstawie zakresu podanego przez użytkownika
    System.out.println(luckyNumber);
    System.out.println("Podaj liczbę: ");
    int userInput=sc.nextInt();//liczba zgadywana przez użytkownika

    while (userInput!=luckyNumber){
        System.out.println("zgaduj jeszcze raz: ");
        userInput=sc.nextInt();
        if (userInput>rangeFromUser){
            System.out.println("za wysoka wartość");
        }else if (userInput<0){
            System.out.println("za mała wartość");
        }
    }
    System.out.println("Gratulacje Zgadłeś!");
}catch (InputMismatchException ex){
    System.out.println("podałeś niepoprawną wartość\nspróbuj ponownie: ");
    }
    }
}
MI
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:9
0

a i jeszcze odnośnie linijki
System.out.println(luckyNumber);
napisałem ją tylko po to żeby sprawdzić czy mi liczbę dobrze losuje, po prostu nie zwracajcie na nią uwagi

Spine
  • Rejestracja:około 22 lata
  • Ostatnio:3 minuty
  • Postów:6693
2

Zrób try tylko tam gdzie występuje błąd.

Liczbę pobieraj w pętli do...while. Warunkiem jest poprawne wczytanie liczby. Możesz w catchu ustawiać jakiegoś boola, którego będziesz używać we while'u.

Możesz też to zrobić w ogóle bez try. Przecież wstępnie pobierasz od użytkownika ciąg znaków. Możesz go valid'ować bez try i konwertować na liczbę, jeśli się do tego nadaje.


🕹️⌨️🖥️🖱️🎮
MI
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:9
0

dzięki za odpowiedz i czy mógłbyś pokazać mi jak to zrobić bez try catch tylko przez te walidacje bo trochę nie wiem jak a wydaje mi się to być najbardziej optymalna opcja

Spine
  • Rejestracja:około 22 lata
  • Ostatnio:3 minuty
  • Postów:6693
1

Masz taki okrojony przykład: https://ideone.com/Tl88US

Nie jestem pewien co do poprawności wyrażenia regularnego...


🕹️⌨️🖥️🖱️🎮
MI
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:9
0

dzięki wielkie bardzo mi pomogłeś

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.