PDA

View Full Version : [JAVA] Creare elenco di opzioni


-Leo-
09-01-2014, 15:24
Ciao a tutti, sono un principiante di java e sto provando a creare un piccolo programmino a riga di comando.
Vorrei ottenere una specie di menù che faccia le seguenti cose:

scegli tra le seguenti opzioni
1 - opzione 1
2 - opzione 2
3 - opzione 3
: QUA DIGITO UNA DELLE OPZIONI TIPO 2
opzione 2 selezionata
ecc...

per farlo ho realizzato il seguente codice

import java.util.Scanner;
public class prova{
public static void main(String[] args) {
System.out.println ("Scegli tra le seguenti opzioni:");
System.out.println ("1 - opzione 1");
System.out.println ("2 - opzione 2");
System.out.println ("3 - opzione 3");
System.out.print(": ");
Scanner inputopzione = new Scanner(System.in);
if (inputopzione.nextInt() == 1 ) {
System.out.println ("opzione 1");
} else if (inputopzione.nextInt() == 2 ) {
System.out.println ("opzione 2");
} else if (inputopzione.nextInt() == 3){
System.out.println ("opzione 3");
} else {
System.out.println ("errore");
}
}
}

e tutto funziona come vorrei... solo che accade una cosa strana: se digito 1 per la prima opzione mi dà subito il contenuto del suo if ma per ottenere il contenuto di una qualsiasi opzione successiva devo digitarla più volte (ad esempio per entrare nella opzione 2 devo digitare "2 [premo invio] 2 [premo invio]" e non "2 [premo invio]" come accade SOLO per la prima opzione) come mai?
grazie dell'attenzione :)

wingman87
09-01-2014, 15:57
Perché ogni qualvolta richiami inputopzione.nextInt() l'oggetto Scanner aspetta un nuovo intero nello streaming di input.
Per risolvere devi leggere solo una volta l'input, salvarlo in una variabile ed usare quella nelle condizioni dell'if, al posto della chiamata a nextInt.

Tuvok-LuR-
09-01-2014, 16:11
oppure usa uno switch (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html):

switch (inputopzione.nextInt()) {
case 1: System.out.println("opzione 1");
break;
case 2: System.out.println("opzione 2");
break;
case 3: System.out.println("opzione 3");
break;
default: System.out.println("Error");
break;
}

-Leo-
09-01-2014, 18:11
Grazie mille ad entrambi! Ho testato ambedue le soluzioni e funzionano perfettamente :).
Secondo voi quale metodo è preferibile utilizzare in questo caso? (Ad occhio la soluzione con lo switch mi pare meno "pasticciata" di quella con gli if)

Tuvok-LuR-
09-01-2014, 19:08
Il piccolo vantaggio dello switch (oltre alla maggiore pulizia) in questo caso è proprio che puoi fare il tutto senza inizializzare una variabile (assegnazione che ha un infinitesimo, ma comunque presente, costo prestazionale).
Ricordati come regola che se stai facendo tanti else if in sequenza confrontando sempre uno stesso valore probabilmente puoi sostituirlo con uno switch.

-Leo-
09-01-2014, 19:20
Perfetto! Grazie delle dritte ;)