Witam
Mam pytanie co do odczytu zmiennej char, a mianowicie w poniższej metodzie
public static void lista() w miejscu znak = (char)System.in.read(); program nie zatrzymuje się i nie czeka na wprowadzenie z klawiatury.
Natomiast w konstruktorze public Ewidencja() w miejscu znak = (char)System.in.read(); program zatrzymuje się i po wprowadzeniu z klawiatury zachowuje się poprawnie.
Nie wiem dlaczego tak się dzieje, jeśli mógłby ktoś wytłumaczyć będę wdzięczny za pomoc.
P.S. Może zna ktoś jakiś lepszy sposób odczytu dla typu char ?
public static void lista() {
Ewidencja tmp = null;
char znak = 0;
for(Ewidencja el: Lista)
{
if (znak == 'Q')
{
el = tmp;
}
tmp = el;
System.out.println("[Enter] - zapisz");
System.out.println("[Q] - cofnij");
try {
znak = (char)System.in.read();
System.out.println(znak);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(znak == '\r')
{
continue;
}
else if(znak != 'Q')
{
System.exit(-1);
}
}
}
public Ewidencja()
{
System.out.println("Dodaj pracownika\n");
System.out.print("[D]yrektor/[H]handlowiec:\t\t");
String string_tmp = odczyt.next();
char znak = string_tmp.charAt(0);
if(znak == 'D' || znak == 'H')
{
if(znak == 'D')
{
this.Stanowisko = "Dyrektor";
}
else
{
this.Stanowisko = "Handlowiec";
}
}
else
{
System.exit(-1);
}
System.out.println("[Enter] - zapisz");
System.out.println("[Q] - porzuć");
try {
znak = (char)System.in.read();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(znak == '\r')
{
Lista.add(this);
}
else if(znak != 'Q')
{
System.exit(-1);
}
}