我只是java编码的初学者我只是编写一个简单的程序:如果用户输入正确的数字,用户将获得一个菜单,他必须输入1-4之间的数字,如果输入了错误的数字,则需要完成任务,用户再次被要求输入。以下是我的程序
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;
}
}
}
输出: +++++++
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-while循环迭代。通过打印输入值识别原因,我发现输入值被代码错误。请帮忙解决此
答案 0 :(得分:2)
要阅读数字或String
,我建议您使用Scanner
个对象。在main()
:
Scanner in = new Scanner(System.in);
并调用nextInt()
中的do-while
方法:
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
来阅读nextLine()
。修改强>
只是看到你可以使用System.in.read()
(你必须阅读文档来了解它的作用)来读取一个整数,试试这个(在一个单独的文件中,所以你不要t意外修改你的代码):
int i = System.in.read();
System.out.println(Integer.parseInt(Character.toString(((char) i))));
答案 1 :(得分:1)
问题是你正在使用InputStream.read(),它从流中读取一个字节,而不是一个字符,例如如果输入'1',read()将返回0x31。
read()的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.
*
答案 2 :(得分:0)
System.in.read()
并不像你认为的那样有效。它读取一个字符(不是int)并返回一个字节值,而不是整数。
当用户输入“1”时,read()
返回49,这是字符“1”的整数字节值。 (50为'2',51为'3'等)。
@Christian's scanner suggestion非常好。我认为你应该这样做。
或者,您可以将switch
语句更改为使用49/50/51 /等,但这有点难看。