我正在尝试学习Java,并且在使用Scanner类时遇到了困难。我想做的是使用Scanner.nextInt()方法接受一个整数。与此同时,我想检查输入是否为数字。如果没有,我想请用户再次输入输入。

这是我为实现此目的而编写的代码:

  do
  {
   System.out.print("Please enter Side 1:\t");

   if(scanner.hasNextInt())
   {
     d1=(double)scanner.nextInt();
     i=0;
   }
   else
   {
     System.out.print("Side shoud be a number!\t");
     i=1;
   }

  }
  while(i!=0);


不幸的是,这进入了无限循环,据我了解,它不等待第二个循环中的“返回”。

最佳答案

某些人似乎认为这是交换1或0的简单错误,或者应该翻转条件-但这不是事实。如果您进行了更改,那么即使您已经有一个号码,也只会不断提示输入数字。

您只想在输入不是整数时继续提示,并在得到该整数时停止提示,对吗?

我建议您使用try-catch和一种Parse方法的形式,这样很清楚您想做什么。

(另外,您的整数i不必是整数-可以只是一个布尔值(是或否)。这也可以使变量的含义更清楚。为好代码命名很重要。)

看到这个:

import java.io.*;
import java.util.*;

class Test {
  public static void main(String args[]) {
    Scanner scanner = new Scanner(System.in);
    boolean done = false;
    double d1 = 0;
    do {
      System.out.print("Please enter Side 1:\t");
      String next = scanner.next();
      try {
        d1 = Double.parseDouble(next);
        done = true;
      } catch (Exception e) {
        System.out.print("Side should be a number!\t");
      }
    }
    while(!done);
    System.out.println("Number obtained: " + d1);
  }
}


如果您没有加倍,这只会继续提示。一旦获得双打,它就会停止。

10-07 16:23
查看更多