我是Java的初学者,我正在murach的书中学习如何验证输入数据。我自己做了一个简单的餐厅菜单,但是当我导入一种方法来验证我自己制作的实用程序类中的数据时,某种程度上它是行不通的! (该线程末尾的stacktrace)。
但是,如果我将它设置为menù类,它就可以工作(仅适用于menùid,但它也必须用于“ spesa”),因此导入时一定有问题。.或者我做错了什么方式。
以下实用程序类:
class utilità {
protected static int getint (Scanner sc){
int t = 0;
boolean check = false;
while (check == false) {
if (sc.hasNextInt())
{
t = sc.nextInt();
check = true;
}
else {
System.out.println("Errore! Si prega di inserire un numero
intero.");
} sc.nextLine();
} return t;
}
}
// My menù class :
protected static void Menù(){
int menùid;
System.out.println("Benvenuto nel menù del ristorante!");
System.out.println("Inserire 0 per uscire :");
System.out.println("Inserire 1 per ricevere un suggerimento per
l'ordinazione :");
menùid = utilità.getint(data);
switch (menùid){
case 1 :
Decidi();
System.out.println("Ottima scelta!");
break;
case 0 :
System.out.println("Arrivederci e grazie!");
break;
}
} } <code>
My import : import menùautomatizzato.utilità; import java.util.*;
My main class : mainclass.java (there's only the main method where i use the Menù function)
//Method decidi()
protected static void Decidi () {
System.out.println("Inserire quanto si pensa di spendere");
double spesa = data.nextDouble();
if (spesa >= 50)
System.out.println("Il ristorante suggerisce : Primo , secondo e contorno per 2 persone");
else if (spesa <= 50)
System.out.println("Il ristorante suggerisce : Primo e contorno per 2 persone");
else if (spesa < 25)
System.out.println("Il ristorante suggerisce : Primo e contorno per 1 persona");
}
代码文本以意大利语显示,因为那是我的语言。
从菜单中选择选项1并且用户输入字母而不是数字,并且getint应该处理此异常时发生的错误:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextDouble(Scanner.java:2413)
at menùautomatizzato.MenùAutomatizzato.Decidi(MenùAutomatizzato.java:12)
at menùautomatizzato.MenùAutomatizzato.Menù(MenùAutomatizzato.java:28)
at menùautomatizzato.mainclass.main(mainclass.java:10)
Java Result: 1
我有点愚蠢,感谢JBnizet,这使我意识到注释中的解决方法,修复方法:
protected static double getdouble(Scanner sc){
double d = 0;
boolean check = false;
while (check == false) {
if (sc.hasNextDouble())
{
d = sc.nextDouble();
check = true;
}
else {
System.out.println("Errore! Si prega di inserire un numero.");
} sc.nextLine();
} return d;
}