提问人:lsr 提问时间:7/6/2022 最后编辑:Topacolsr 更新时间:7/6/2022 访问量:279
如何在未定义数组长度的 java 中获取输入?
How to take input in java where array length is not defined?
问:
我的输入是这样的格式:
1 2 3 4 5 6
Alice
数组长度未知。 我是这样编码的:
import java.util.*;
public class Main
{
public static void main(String[] args) {
List<Integer> arr = new ArrayList<>();
Scanner sc = new Scanner(System.in);
int i=0;
while(sc.hasNext()){
arr.add(sc.nextInt());
}
String player = sc.nextLine();
}
}
但是我收到这个错误。
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at Main.main(Main.java:17)
提前致谢。
答:
2赞
Kaan
7/6/2022
#1
您看到的原因是因为您在语句中提供了输入“Alice”,并且扫描程序告诉您它不知道如何将输入转换为 int(这是 nextInt()
的返回类型)。java.util.InputMismatchException
sc.nextInt()
java.lang.String
下面是一个非常简单的示例,它重现了相同的行为:
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
如果运行这两行并输入非整数,例如“d”,则会引发异常:
d
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at a91.main(a91.java:6)
要修复它,您需要替换为可以容忍非数字输入的东西,可能是 nextLine()。
这是一个(非常)简单的例子,展示了它是如何工作的。请注意,这只是突出显示您正在询问的行为,即:如何解决。与原始程序一样,没有循环终止 - 它将永远运行(直到您退出程序)。nextInt()
InputMismatchException
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
while (sc.hasNext()) {
String s = sc.nextLine();
System.out.println("got this: " + s);
}
1 2 3 4 5 6
got this: 2 3 4 5 6
Alice
got this: Alice
评论
0赞
lsr
7/6/2022
感谢您的回复。我想知道有没有办法终止循环。我尝试使用,但也没有帮助。接受这些输入的最佳方式是什么?sc.close()
0赞
Kaan
7/6/2022
回复:“接受这些输入的最佳方式是什么?”——你读过我的答案吗?回复:“我想知道有没有办法终止循环”——你发布的问题中在哪里提到过?如果你的问题是“我如何退出循环”,那么整个事情应该重写,使问题清晰,并删除任何关于数据类型、输入不匹配等的内容
0赞
lsr
7/6/2022
感谢您的详细回答@Kaan您的方法解决了我的问题。我只是想进一步知道是否有办法停止无限循环?否则我的疑问已经解决了。
0赞
Kaan
7/6/2022
“你的方法解决了我的问题”——好的,太好了。当有人发布解决您的问题的答案时,您应该投票并接受答案 _ 这让每个人都知道问题已得到解决。
0赞
Kaan
7/6/2022
若要退出循环,可以添加代码来检查特定值(可能是字符串“exit”),然后在看到该值时中断循环(使用 )。break
1赞
WJS
7/6/2022
#2
您应该使用 to 检查整数输入。一旦没有更多的整数,那么就用它来读取播放器。hasNextInt
next()
List<Integer> arr = new ArrayList<>();
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){
arr.add(sc.nextInt());
}
String player = sc.next();
arr.forEach(System.out::println);
System.out.println(player);
支持的示例输入
10 20 30 40 50 60 70
Alice
10 20 30 40
50 60 70 Alice
10 20 30
40
50
60 70 Alice
10 20 30
40 50
60 70
Alice
输出
10
20
30
40
50
60
70
Alice
评论
hasNextLine()
while
Scanner