Java,scan double只接受int

时间:2014-06-14 19:11:50

标签: java int double

这是代码部分无法正常工作,不想粘贴所有代码,如果我尝试输入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();
 }
}

2 个答案:

答案 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;          

 }