wyjście z pętli

0

Witam!
Mam mały problem na który nigdzie nie mogę znaleźć odpowiedzi. Mam pętle nieskończoną for(;;) i chciałbym zrobić tak aby po naciśnięciu klawisza np 0 wyrzuciło mnie z tej pętli. Zaznaczam ,że zależy mi na tym aby program nie oczekiwał po każdym przejściu pętli reakcji użytkownika i wymuszał naciśnięcie przycisku. Pobieranie zmiennej potrzebnej do wyrzucenia z pętli powinno odbywać się tak jakby w ukryciu. Nie tworzę tego w GUI . Będę wdzięczny za każdą poradę.

0

Stwórz nowy wątek (Thread - pogooglaj) i tam oczekuj na wpisanie "0". Gdy to się stanie, to ustaw jakąś zmienną (flagę) w klasie, która ma tego for'a nieskonczonego i w kazdym obrocie pętli sprawdzaj wartość tej flagi. Użyj AtomicBoolean jako typu flagi.

0

System.in udostępnia metodę available() i jeśli sobie to opakujesz np w BufferedReader to będzie metoda ready(). Być może to wystarczy.

0

Ale wejście jest wciąż buforowane, więc minimum "0[enter]".

0

Jakoś sobie poradziłem ale mam następny problem. Pomija mi break w if ;/ if na pewno się wykonuje bo wstawiłem System.out.println z wiadomością która zostaje wyrzucana na ekran ale break jest pomijany... Miał ktoś taki przypadek ?

0

jeśli masz podwójną pętle to zawsze z tej najbardziej wewnętrznej jedynie wychodzi

0

Zrobiłem przykład. Bardzo możliwe ,że coś schrzaniłem tam bo mało wiem jeszcze o javie. Jeśli naciśnie się 0 break działa natomiast jeśli najpierw wciśnie się 2 a dopiero później 0 break jest pomijany. Mógłby mi ktoś to wytłumaczyć dlaczego tak jest ?

 import java.util.Scanner;

class watek extends Thread{

int a=1;
public void run(){

Scanner in=new Scanner(System.in);
a=in.nextInt();

}

}

public class Main {

    public void cos()
    {
    watek w=new watek();
    w.start();

    for(;;)
    {

    if(w.a==2)
    {System.out.println("jeszcze raz");
        cos();}

    if(w.a==0)
    {
        System.out.println("koniec");
        break;}

    }

    }
    public static void main(String[] args) {
       Main a=new Main();
       a.cos();
    }

}
0

na oko w wątku, w run, również powinieneś zrobić pętlę, bo wątek, zakańcza się po wczytaniu liczby

0

Już zrobiłem. Wystarczyło w pętli wywoływanej przez 2 po run() dodać break :) działa teraz przydało by się rozkminić dlaczego tak jest. Dzięki wszystkim za poświęcony czas

0
slawek napisał(a)

Już zrobiłem. Wystarczyło w pętli wywoływanej przez 2 po run() dodać break :) działa teraz przydało by się rozkminić dlaczego tak jest. Dzięki wszystkim za poświęcony czas

poprawka... po cos() nie po run()

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