Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,scan double只接受int_Java_Int_Double - Fatal编程技术网

Java,scan double只接受int

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

这里有一部分代码工作不正常,不想全部粘贴,如果我尝试输入3.2,它会给我“坏数据”,但如果我尝试输入示例3,它会正常工作。所有getter/setter都要求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();
 }
}
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()
,会发生什么情况?@HovercraftFullOfEels
Scanner
默认情况下跳过空白,因此我怀疑这是问题所在。我认为这可能是一个区域设置问题,因为
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+生日快乐!