Wątek przeniesiony 2014-01-29 17:09 z Java przez bogdans.

Błąd podczas wpisania słowa zamiast liczby

0

Witam
Mam następujący kod:

public void frequency() {
        Scanner czestotliwosc = new Scanner(System.in);
        freq = czestotliwosc.nextInt();
        System.out.println("Częstotliwość = " + freq);
    }

Problem w tym że podczas wpisania tekstu program się wysypuje. Jak to najprościej ominąć, biorąc pod uwagę że chyba muszę korzystać z nextInt do pobierania wpisu z klawiatury?
"pokolorowałem" kod - bogdans

0

Skoro pobierasz inta to freq musi być typu int. Nie bardzo w ogóle wiem o co Ci chodzi.

0

freq jest typu int, a chodzi mi o to, że kiedy użytkownik wpisze tekst to program się wysypuje
ja natomiast chcę żeby po wpisanie tekstu zamiast błędu wyskakiwał tekst "wpisz liczbę" i tak aż do skutku

kombinuję z pętlą while ale nie do końca wiem jak sprawdzić czy wpisana wartość to liczba

0

Coś takiego np:

public void frequency() {
    try {
        System.out.print("Podaj częstotliwość: ");
        Scanner czestotliwosc = new Scanner(System.in);
        int freq = czestotliwosc.nextInt();
        System.out.println("Częstotliwość = " + freq);
    } catch (InputMismatchException e) {
        System.out.println("Wpisałeś błędne dane! Spróbuj ponownie");
        frequency();
    }
}
0

Dziękuję bardzo za pomoc. Właśnie o coś takiego mi chodziło :)

3

Nie tak jak w kodzie @bakeraw2. Ewentualnie tak:

public int frequency() {
    int freq = 0;
    boolean ok = false;
    while(!ok)
    {
        try {
            System.out.print("Podaj częstotliwość: ");
            Scanner czestotliwosc = new Scanner(System.in);
            freq = czestotliwosc.nextInt();
            ok = true;
        } catch (InputMismatchException e) {
            System.out.println("Wpisałeś błędne dane! Spróbuj ponownie");
        }  
    }
    return freq;
}
0

A co jeśli chcielibyśmy ustawić że po wpisaniu również liczby ujemnej (która łapie się na inta) też wyskakiwała informacja o tym że "podana wartość jest niepoprawna" ?

1

Może tak?

public static int frequency() {
    int freq = 0;
    boolean ok = false;
    while(!ok)
    {
        try {
            System.out.print("Podaj częstotliwość: ");
            Scanner czestotliwosc = new Scanner(System.in);
            freq = czestotliwosc.nextInt();
            if(freq < 0)
                throw new InputMismatchException();
            ok = true;
        } catch (InputMismatchException e) {
            System.out.println("Wpisałeś błędne dane! Spróbuj ponownie");
        }  
    }
    return freq;
}

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