这是代码部分无法正常工作,不想粘贴所有代码,如果我尝试输入3.2,它会给我“坏数据”但是如果我尝试示例3则工作正常。所有getters / setters要求double,而不是int,调试器告诉同样的故事,我输入3.2的时刻将皮肤打印坏数据
double fastest = 1000;
double choice1timechoice;
boolean goodTime = false;
while(!(goodTime)) {
System.out.println("Enter time of the sprint:");
try {
choice1timechoice = scan.nextDouble();
if (choice1timechoice < fastest) {
fastest = choice1timechoice;
fastIndex = numSprints;
}
sprint[numSprints].setTime(fastest);
goodTime = true;
System.out.println("Do you wish to continue adding sprints? 1 for yes, 2 for no");
cont = scan.nextInt();
if (cont == 1) numSprints++;
}
catch (InputMismatchException ex)
{
System.out.println("Bad data");
System.out.println("Please try again \n");
scan.nextLine();
}
}
答案 0 :(得分:4)
这似乎是一个区域设置问题。根据评论,OP系统上的默认本地小数点分隔符为','
而不是'.'
。因此,Scanner
默认拒绝识别3.2
并且仅识别3,2
。
要制作Scanner
接受3.2
,您可以手动设置其区域设置:
scan.useLocale(Locale.US);
答案 1 :(得分:0)
正如Hovercraft在评论中所说,问题可能在于.nextDouble&.nextInt()
,因为它保持在同一行。
如果您将来使用.nextLine()
之后的.nextDouble()
和.nextInt()
事件后,您应该转到下一行,通过.next()
阅读另一个号码。
这是我为你创建的一个可测试的例子。
Scanner sc = new Scanner(System.in);
System.out.println("Enter double");
while(true){
System.out.println();
double s = sc.nextDouble();
sc.nextLine();
System.out.println("Enter int");
double i = sc.nextInt();
sc.nextLine();
System.out.println("Double="+s+", int="+i);
System.out.println("Wish to cont? 1-Yes, 2-No");
int j = sc.nextInt();
sc.nextLine();
if(j==1) continue;
else break;
}