2017-10-12 117 views
-3

我正在研究计算税款的代码。我希望这段代码能够确保用户输入一个有效的正整数。它工作除非输入字符串,然后进入无限循环。如何让它重复循环并让用户输入另一个输入,而不是无限循环?While Loop is Infinite

int dependentsRerun = 0;//makes user enter valid input for dependents 
    while(dependentsRerun == 0) { 
     System.out.println("Please enter number of dependents: "); 
     if(stdin.hasNextInt()) { 
      int dependents = stdin.nextInt(); 
      if(dependents>=0) { 
       dependentsRerun = 1; 
      }//end if dependents>=0 
      else {System.out.println("Invalid input");}//dependents negative 
     }//end if hasNextInt 
     else {System.out.println("Invalid input");}//dependents not an integer 
    }//end while dependentsRerun 
+1

请标记语言,例如C#或Java。 –

+0

'if(dependents> = 0)'永远不会是真的。 – PHPglue

+0

当下一个输入不是'int'时,你输入一个无限循环。添加一个'stdin.next()'来使用该标记。 –

回答

0

您需要将代码包围在try块中,然后捕获InputMismatchException,然后捕获输入行以清除缓冲区。

int dependentsRerun = 0;//makes user enter valid input for dependents 
    while(dependentsRerun == 0) { 
     System.out.println("Please enter number of dependents: "); 
     try{ 
       int dependents = stdin.nextInt(); 
       if(dependents>=0) { 
        dependentsRerun = 1; 
       } 
       else { 
        System.out.println("Invalid input"); 
       } 
      }catch(InputMismatchException e){ 
       System.out.println("Invalid input"); 
       //catches input and clears 
       stdin.nextLine(); 
      } 
     } 

} 

编辑:

这可能是一个更好的方式来构建循环

 while(true) { 
     System.out.println("Please enter number of dependents: "); 
     try{ 
       int dependents = stdin.nextInt(); 
       if(dependents >= 0) { 
        //stops loop and moves on 
        break; 
       } 
       else { 
        System.out.println("Can't enter a negative number."); 
       } 
      }catch(InputMismatchException e){ 
       System.out.println("Invalid input"); 
       //catches input and clears 
       stdin.nextLine(); 
      } 
     } 
}