gra z losowaniem liczby

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ę

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: ");
    }
    }
}
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

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.

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

1

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

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

0

dzięki wielkie bardzo mi pomogłeś

1 użytkowników online, w tym zalogowanych: 0, gości: 1