不明白为什么代码进入无限循环

时间:2013-09-01 19:30:27

标签: java

我正在努力学习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);

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

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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);

答案 2 :(得分: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);

答案 3 :(得分:0)

有些人似乎认为交换1或0是一个简单的错误,或者应该翻转条件 - 但事实并非如此。如果你做了这个改变,那么你就会不断提示数字,即使你已经有了数字。

您只想继续提示输入是否不是整数,并且在获得该整数时停止提示,对吧?

我建议使用try-catch和Parse方法的形式,以便明确你想做什么。

(另外,你的整数我不需要是一个整数 - 它可能只是一个布尔值(true或false)。这也会使变量的意图更清晰。为好的代码命名你的变量很重要。)

见:

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);                                                                
  }                                                                                 
}        

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

答案 4 :(得分:0)

Hello Guys我终于得到了我需要做的就是在循环内部初始化扫描器对象,这样每次循环执行时都会等待代码:

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);

感谢您的回复。