2013-05-06 121 views
2

我想写一个if/else来测试整数的用户输入。如果他们输入一个int,程序就会继续。如果他们输入了其他内容,程序会产生一个错误消息,要求输入正确的信息。这是在球场的任何地方吗?有没有办法根据字符串测试一个int? (Java)

import java.util.Scanner; 

public class test { 
    public static void main(String[] args) { 
     Scanner keyboard = new Scanner(System.in); 
     int [] foo; 
     foo = new int[3]; 

     foo[0]=1; 
     foo[1]=2; 
     foo[2]=3; 

     System.out.print("Make a choice between 0 and 2: "); 
     int itemChoice = keyboard.nextInt(); 

     if (itemChoice != foo) { 
      System.out.print("Not a valid choice"); 
     } 
     else { 
      System.out.print("Valid choice. You picked " + itemChoice); 
     } 
    } 
} 

我得到这个错误:

required: int 
found: boolean 
test.java:17: error: incomparable types: int and int[] 
     if (itemChoice != foo) { 
+0

你试过了吗?那么['Integer.parseInt()'](http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String))呢? – thegrinner 2013-05-06 15:23:13

+0

@thegrinner到目前为止我没有办法。我的编者说我的使用不对等是有问题的。 – 2013-05-06 15:26:27

+2

@TyGivens:将来,将(编译器)的错误消息复制/粘贴到您的问题中。 – 2013-05-06 15:27:29

回答

1

您的问题是,你有int比较一个int[](int数组):

itemChoice != foo 

应该是:

boolean tmp = false; 
for (int i=0; i < foo.length; i++) { 
    if (foo[i] == itemChoice) { 
     tmp = true; 
    } 
} 
if (tmp) { 
    System.out.print("Valid choice. You picked " + itemChoice); 
} 
else { 
    System.out.print("Not a valid choice"); 
} 
+0

这工作,大约一半。是否有添加测试的方法,以便如果用户输入的内容不是int,而是显示其他消息 – 2013-05-06 15:35:16

+0

如果要阅读用户输入的内容,应该使用'keyboard.nextLine();','会得到一个字符串。要测试它是否为int,只需在'Integer.parseInt(itemChoice)''上执行try/catch。如果itemChoice不是int,那么它会抛出一个'NumberFormatException',因此在catch部分中,调用'System.out.print(“不是一个有效的选择”);' – DeadlyJesus 2013-05-06 15:39:51

+0

我还没有学过try/catches。我仍然处于初学者的水平。我会看看那个,看看我能不能找出 – 2013-05-06 15:45:22

6

试试下面的方法来验证您的输入:

Scanner.hasNextInt()

int itemChoice =0; 
while(true){ 
    if(keyboard.hasNextInt()){  
     itemChoice = keyboard.nextInt();  
     // Do something. 
     break; 
    } 
    else{  
     System.out.print("Not a valid choice Try again"); 
     continue; 

    } 

} 
+0

你的意思是这样的:itemChoice = Scanner.hasNextInt(); – 2013-05-06 15:27:33

+0

@TyGivens我编辑了我的答案。 – 2013-05-06 15:32:08

+0

@Achintaya Jha它可以工作,但是当它到达其他地方时,它会进入一个无限循环 – 2013-05-06 15:43:49

0

你为什么不把你的代码在一个循环内,像while

那么接下来:

while (my input is not a number) { 
//Here I do the block of code. 
//I can implement an if to handle the error messages 
} 

我还没有使用扫描仪类过多或有任何类似的要求,但也许它可以帮助。最好的祝福。

+0

虽然while循环似乎是一个好主意,但我并不真正知道要使用哪种测试。 – 2013-05-06 15:33:53

+1

mmm ...你是什么意思,你真的不知道什么测试使用?您需要帮助才能将此while循环应用于您的代码,或者您不确定使用哪个答案进行测试?我们在这里为您提供帮助。 – 2013-05-06 15:46:13

+0

我刚刚用try/catch解决了这个问题。尽管感谢您的输入。下次我会努力做得更清楚。我还是一个初学者,所以即使简单的事情对我来说也有点困难。 – 2013-05-06 15:53:45

相关问题