对于Java中的控制台菜单,我有时想读取整数和一些字符串。我有这两个功能:
获取字符串:
public String enterString(String question) {
System.out.println(question);
return scanner.nextLine();
}
获取int(稍后为switch语句):
public int choose(int b, String question) {
Boolean chosen = false;
while(!chosen) {
chosen = true;
System.out.println(question);
int choice = scanner.nextInt();
if(choice >= 0 && choice <= b) {
return choice;
}
else {
chosen = false;
System.out.println("Not a valid choice.");
}
}
return 0; //the compiler complains otherwise
}
但是,如果我先使用enterString()
,然后使用choose()
然后使用enterString()
,则可能会使用来自select的换行符。在各个地方输入scanner.nextLine()
(每个功能的开始和结束)总是会引起问题。
如何将这两种作品组合在一起?
答案 0 :(得分:3)
nextInt()
不会消耗EOL。因此,扫描Int
为
int choice = Integer.parseInt(scanner.nextLine());
或者,消耗额外的新行
int choice = scanner.nextInt();
scanner.nextLine(); // Skip
答案 1 :(得分:1)
scanner.nextInt()不消耗行尾。 您可以将whileLine包装在while循环中,如果该行为空,则再次请求输入。