2013-04-02 58 views
0

它现在要做的是要求用户输入一个字段编号,但是如果用户输入一个非整数,它只会陷入循环中,并且不会响应用户输入的任何内容。我希望它能够实际工作,我认为它在我的尝试/捕获中是有用的。由于有人可以帮助修复我的功能的逻辑吗?

代码:

public static int getFieldNumberFromUser(int maxValue)throws IOException 
{ 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    String data; 
    int fieldNumber; 
    boolean isInteger; 

    fieldNumber = 0; 
    isInteger = false; 
    while(isInteger == false) 
    { 
     System.out.print("Enter a field between 1 and " + maxValue + "(< zero to quit): "); 
     data = br.readLine(); 
     try 
     { 
      fieldNumber = Integer.parseInt(data); 
      isInteger = true; 

     } 
     catch(NumberFormatException nfe) 
     { 
      System.out.println("You did not enter a valid integer"); 
     } 
    } 
     return fieldNumber - 1; 
} 
+1

如果输入一个非数字值什么shuld做 –

+0

@ArunPJohny如果其非数字应该说你没有输入有效的整数,并再次询问用户。它是这样做的,但如果我在非数字值后输入一个数值,它只会持续重复 – mbridges

+1

@mbridges:我没有看到代码中发生任何错误。我跑它,它似乎工作正常。 –

回答

1

检查下面的代码。它似乎工作正常。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    String data; 
    int fieldNumber; 
    boolean isInteger; 

    fieldNumber = 0; 
    isInteger = false; 
    while(isInteger == false) 
    { 
     System.out.print("Enter a field between 1 and " + maxValue + "(< zero to quit): "); 
     data = br.readLine(); 
     NumberFormatException nfe = new NumberFormatException(); 
     try 
     { 
      fieldNumber = Integer.parseInt(data); 
      if(fieldNumber > maxValue) 
       throw nfe; 
      isInteger = true; 

     } 
     catch(NumberFormatException nfe2) 
     { 
      System.out.println("You did not enter a valid integer"); 
     } 
    } 
     return fieldNumber - 1; 
+0

试过这个并且完美地工作,谢谢 – mbridges

+0

欢迎您。 :) –

1

你需要退出你在catch循环了...你抓添加return -1;

我不确定你为什么要循环