有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

    您只希望在输入不是整数时继续提示,并在获得该整数时停止提示,对吗

    我建议使用try-catch和一种形式的Parse方法,这样就可以清楚地了解您想要做什么

    (另外,您的整数i不需要是整数-它可以是布尔值(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);                                                                
      }                                                                                 
    }        
    

    只有在您没有获得双倍奖励时,才会继续提示。一旦你拿到双人票,它就停止了

  3. # 3 楼答案

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

        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);
    
  4. # 4 楼答案

    如果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);
    
  5. # 5 楼答案

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

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

    谢谢你的回复