2

我正在尝试学习 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);

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

4

5 回答 5

0

您不会在 else 分支中使用不正确的输入,因此如果scanner.hasNextInt()返回false您将进入无限循环,因为在下一次迭代中会看到相同的扫描仪状态。

于 2013-09-01T19:34:58.770 回答
0

如果scanner.hasNextInt()返回true,那么它应该可以工作,但是当它返回false时,它将进入无限循环。

这个怎么样:-

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;
   scanner.nextLine();
   }

  }
  while(i!=0);

或尝试像这样更改您的while循环:-

 while(i==0);
于 2013-09-01T19:35:12.920 回答
0

您会陷入无限循环,因为下一行扫描仪没有任何方法调用。见加粗线。

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

        if(scanner.hasNextInt()) {  
            double d1=(double)scanner.nextInt();
            i=0;
        }

        else {
            System.out.print("Side shoud be a number!\t");
            i=1;
        }

        **scanner.nextLine();**
           }
    while(i!=0);
于 2013-09-01T19:53:32.917 回答
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);                                                                
  }                                                                                 
}        

如果您没有得到双倍,这只会继续提示。一旦你得到一个双倍,它就会停止。

于 2013-09-01T19:58:55.817 回答
0

大家好,我终于明白了,我需要做的就是在循环内初始化扫描仪对象,这样每次循环执行时它都会等待代码:

do
  {
   System.out.print("Please enter Side 1:\t");
  scanner=new Scanner(System.in);

  if(scanner.hasNextInt())
  {
   d1=(double)scanner.nextInt();
   i=0;

  }
   else
   {
   System.out.print("Side shoud be a number!\t");
   i=1;
   }

  }
  while(i==1);

感谢您的回复。

于 2013-09-01T20:01:51.100 回答