PDA

View Full Version : [JAVA] non capisco come si comporta while


theUser
20-02-2012, 13:02
Ho iniziato da poco con java e sto scrivendo la classica calcolatrice per esercitarmi.
import java.util.Scanner;

public class Main {
public static void main(String args[]){
System.out.println("Premi 'h' per le istruzioni.");
Scanner input = new Scanner(System.in);
while(1 == 1){
System.out.print("Seleziona operazione: ");
switch (input.nextLine()){
case "h":
System.out.println("");
System.out.println("Seleziona prima l'operazione e scrivi poi " +
" i numeri separando la parte intera da quella decimale " +
" con ','.");
System.out.println("'+': addizione");
System.out.println("'-': sottrazione");
System.out.println("'*': moltiplicazione");
System.out.println("'/': divisione");
break;
case "*":
System.out.println("");
System.out.print("Primo numero: ");
double a, b;
a = input.nextDouble();
System.out.println("");
System.out.print("Secondo numero: ");
b = input.nextDouble();
System.out.println("");
System.out.println(a * b);
}
}
}
}

Non capisco una cosa: la prima volta "Seleziona operazione: " viene stampato una volta sola ma ai cicli successivi 2 volte. Perchè?

banryu79
20-02-2012, 13:39
Non capisco una cosa: la prima volta "Seleziona operazione: " viene stampato una volta sola ma ai cicli successivi 2 volte. Perchè?

Io ho provato il codice, e noto che si comporta correttamente, non stampa due volte "Seleziona operazione".
Comunque while continua ad eseguire il codice nel suo corpo finchè la sua condizione risulta vera. Comunque "1==1" come condizione non si può vedere, puoi anche scrivere "true" a questo punto :D

rootshooter
21-02-2012, 17:52
Ti sta processando anche il carattere Invio "\n".


Quando nel caso "*" esegui

b = input.nextDouble();

e lo immetti premendo invio, nello stream c'è "b\n". Il metodo nextDouble() prende b e lo rimuove dal buffer. Ma rimane "\n". Così al ritorno

switch (input.nextLine()){
}


legge "\n" ed entra nello switch case.

In poche parole devi svuotare il buffer di lettura. Con l'approccio che vuoi.