2014-01-22 132 views
2

我只是一个初学者在java编码我只是写一个简单的程序:用户被给予一个菜单,他必须输入1-4之间的数字,如果用户输入正确的数字,所需的任务完成if输入错误的号码,用户再次被要求输入。下面是我的程序问题与执行循环

class menu { 
    public static void main(String [] args) throws java.io.IOException { 
     int choice; 
     do 
     { 
      System.out.println("HELP MENU: "); 
      System.out.println("IF STATEMENT: 1 "); 
      System.out.println("WHILE: 2 "); 
      System.out.println("DO WHILE: 3 "); 
      System.out.println("SWITCH: 4 "); 
      choice = System.in.read(); 
      System.out.println(choice); 
     } 

     while(choice < 1 || choice > 4); 
     System.out.println("\n"); 
     System.out.println(choice); 

     switch (choice) 
     { 
     case 1: 
      System.out.println("if statement is selected"); 
      break; 
     case 2: 
      System.out.println("while statement is selected"); 
      break; 

     case 3: 
      System.out.println("do while statement is selected"); 
      break; 

     case 4: 
      System.out.println("switch statement is selected"); 
      break; 
     } 
    } 
} 

OUTPUT: +++++++

E:\study\javacode>java menu 
HELP MENU: 
IF STATEMENT: 1 
WHILE: 2 
DO WHILE: 3 
SWITCH: 4 
4 
52 
HELP MENU: 
IF STATEMENT: 1 
WHILE: 2 
DO WHILE: 3 
SWITCH: 4 
13 
HELP MENU: 
IF STATEMENT: 1 
WHILE: 2 
DO WHILE: 3 
SWITCH: 4 
10 
HELP MENU: 
IF STATEMENT: 1 
WHILE: 2 
DO WHILE: 3 
SWITCH: 4 

什么都用户通过键盘输入,代码不断通过DO-而loop.i迭代通过打印输入值识别原因,我发现输入值被代码错误。请帮助解决此问题

回答

2

要读取数字或String s,我建议您使用Scanner对象。创建并在main()的开头实例吧:

Scanner in = new Scanner(System.in); 

,并呼吁在do-whilenextInt()方法:

do { 
    System.out.println("HELP MENU: "); 
    System.out.println("IF STATEMENT: 1 "); 
    System.out.println("WHILE: 2 "); 
    System.out.println("DO WHILE: 3 "); 
    System.out.println("SWITCH: 4 "); 
    choice = in.nextInt(); 
    System.out.println(choice); 
} while (choice < 1 || choice > 4); 

注:

  • System.in.read()真的返回了int您输入的字符的值。例如,如果你输入1,该方法将返回49等于(int)'1'
  • 正如我前面提到的,你可以使用Scanner阅读String S,该方法nextLine()

编辑:

只是地看到,你可以使用System.in.read()(你必须阅读的文档来了解它做什么)来读取一个整数,试试这个(在一个单独的文件,这样就不小心修改代码):

int i = System.in.read(); 
System.out.println(Integer.parseInt(Character.toString(((char) i)))); 
+0

好的谢谢是的,这工作。但我想知道为什么 选择= System.in.read(); 没有工作。为什么它采取错误的输入。 – thinkingmonster

+0

你想知道为什么'扫描仪'工作?或者为什么'System.in.read()'不起作用? – Christian

+0

这两个请让我知道... – thinkingmonster

1

的问题是,你正在使用InputStream.read(),它从流,而不是一个字符,例如读取一个字节如果你输入'1',read()将返回0x31。

的Javadoc读():

/** 
* Reads the next byte of data from the input stream. The value byte is 
* returned as an <code>int</code> in the range <code>0</code> to 
* <code>255</code>. If no byte is available because the end of the stream 
* has been reached, the value <code>-1</code> is returned. This method 
* blocks until input data is available, the end of the stream is detected, 
* or an exception is thrown. 
* 
+0

+1这是正确的答案。 OP应该像@Christian所说的那样使用扫描器,并将输入读取为int。 – HpTerm

0

System.in.read()完全不是那么回事像你想象的那样。它读取一个字符(不是int)并返回一个字节值,而不是整数。

当用户输入“1”时,read()返回49,这是字符“1”的整数字节值。 (50是'2',51是'3'等)。

@Christian's scanner suggestion非常好。我认为你应该这样做。

或者,您可以将您的switch声明更改为使用49/50/51/etc,但这有点难看。