Java,scan double只接受int
这里有一部分代码工作不正常,不想全部粘贴,如果我尝试输入3.2,它会给我“坏数据”,但如果我尝试输入示例3,它会正常工作。所有getter/setter都要求double,而不是int,调试器讲述了同样的故事,我在中输入3.2的那一刻,将导致打印错误数据Java,scan double只接受int,java,int,double,Java,Int,Double,这里有一部分代码工作不正常,不想全部粘贴,如果我尝试输入3.2,它会给我“坏数据”,但如果我尝试输入示例3,它会正常工作。所有getter/setter都要求double,而不是int,调试器讲述了同样的故事,我在中输入3.2的那一刻,将导致打印错误数据 double fastest = 1000; double choice1timechoice; boolean goodTime = false; while(!(goodTime)) { System.out.println("Enter
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();
}
}
double-faster=1000;
双选1次选择;
布尔goodTime=false;
而(!(晚安)){
System.out.println(“输入冲刺时间:”);
试一试{
choice1timechoice=scan.nextDouble();
如果(选择1时间选择<最快){
最快=选择1时间选择;
fastIndex=numSprints;
}
sprint[numsprits].setTime(最快);
好时光=真;
System.out.println(“您希望继续添加sprint吗?1表示是,2表示否”);
cont=scan.nextInt();
如果(cont==1)numSprints++;
}
捕获(输入不匹配异常)
{
System.out.println(“坏数据”);
System.out.println(“请重试\n”);
scan.nextLine();
}
}
正如气垫船在评论中所说,问题可能出在.nextDouble和.nextInt()
上,因为它位于同一行。
如果将来使用,您应该在.nextLine()
和事件之后通过.nextDouble()
和.nextInt()
转到下一行读取另一个数字
这里是我为您创建的一个可测试的示例
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;
}
这似乎是区域设置问题。根据注释,OP系统上默认的本地小数分隔符是,“
”,而不是。
。因此,Scanner
默认情况下拒绝识别3.2
,而只识别3,2
要使扫描仪
接受3.2
,可以手动设置其区域设置:
scan.useLocale(Locale.US);
您可能没有处理需要处理的下线(EOL)令牌,使它们悬空等待下次调用scan.nextLine()
时被吞没。如果在每次调用scan.nextLine()
或scan.nextDouble()
后放置scan.nextLine()
,会发生什么情况?@HovercraftFullOfEelsScanner
默认情况下跳过空白,因此我怀疑这是问题所在。我认为这可能是一个区域设置问题,因为nextDouble()
使用了本地小数分隔符,它可能不是
@T.C。不,扫描仪不会跳过空白。它们的默认行为是使用空格作为分隔符,但是EOL标记是特殊的,并且将作为Scanner\nextLine()
的分隔符。我在这个网站上一次又一次地看到这种行为的错误。然而,我们将不得不等待原始海报对我的评论的回应,然后才能发现它是否属实。你这是什么意思?@user2627736:如果你运行System.out.println(java.text.DecimalFormatSymbols.getInstance().getDecimalSeparator()),我该如何解决这个问题代码>,打印的是什么?我试着运行它,输入了3.2,它给了我输入不匹配的例外。所以,输入第二个数字的3.2也不起作用,但是输入3和2起作用了,它们被打印成了3.0和2的两倍。0@user2627736您尝试了我的代码,并给了您输入不匹配异常
,em奇怪,真的,这是第一次看到这个。看看电视台的答案。祝你1+生日快乐!