Questo programmino ha diversi problemi... E sì, sono riconducibili a un principiante che sta imparando, ma molti altri sono particolari. In precedenza hai usato C/C++? Perché non segui lo stile di guida del Java con String args [] o pen :.
Già l'utilizzo di etichette è sconsigliato in C/C++ (quando non si deve uscire da cicli complicati o in modo da aumentare la leggibilità del codice). Nel tuo caso il codice risulta più difficile da leggere e il flusso meno chiaro, pensa a come poter implementare il controllo nel while().
Il problema è che usi la classe InputStream direttamente con System.in.read(). Il metodo read() legge un solo byte e ritorna un intero (e in questo caso la conversione che fai per poi confrontare sempre tra interi mi sembra inopportuna). Di fatto, però, quando nella console inserisci il numero e premi Invio, vengono letti:
Già l'utilizzo di etichette è sconsigliato in C/C++ (quando non si deve uscire da cicli complicati o in modo da aumentare la leggibilità del codice). Nel tuo caso il codice risulta più difficile da leggere e il flusso meno chiaro, pensa a come poter implementare il controllo nel while().
Il problema è che usi la classe InputStream direttamente con System.in.read(). Il metodo read() legge un solo byte e ritorna un intero (e in questo caso la conversione che fai per poi confrontare sempre tra interi mi sembra inopportuna). Di fatto, però, quando nella console inserisci il numero e premi Invio, vengono letti:
- Il byte effettivo del numero
- Il byte del tasto Invio (carattere ASCII 13)
- Il byte del "ritorno a capo" o "nuova linea" (carattere ASCII 10)
Codice:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
choice = Integer.parseInt(in.readLine())
Codice:
import java.util.Scanner;
/* ... */
Scanner sc = new Scanner(System.in);
choice = sc.nextInt();