我正在做家庭作业,并且正在通过控制台使用输入值。该程序尚未接近完成,我只是想使输入系统正常工作。我遇到了一个问题,我看到其他人也遇到了其他代码,但是我不知道如何在这种情况下实现它们。
它以以下格式输入:
4-数据行数
5 6-Datapeices
5 6-Datapeices
5 6-Datapeices
5 6-Datapeices
我正在尝试制作一个带行1 * 2长度的数组,然后继续将其存储在数组中。每隔一个数据行,我就要下线了。
导入java.io. *;
导入java.util.StringTokenizer;
int arr[];
int x = 0;
BufferedReader br = new BufferedReader(newInputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
arr = new int [Integer.parseInt(st.nextToken())*2];
for (int i = 0; i < arr.length; i++) {
if ((i%2)==1) {
x = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
} else {
x = Integer.parseInt(st.nextToken());
}
arr[i] = x;
}
System.out.println(arr.toString());
}
最佳答案
我在代码中看到3个问题:
您尝试初始化一个奇怪的大小的数组。new int [Integer.parseInt(st.nextToken())*2]
-> new int [st.countTokens()]
在这种情况下,您尝试从控制台读取嵌套行,并且该行可以为空。但是,当没有令牌时,您尝试读取下一个令牌。还有st = new StringTokenizer(br.readLine());
中的问题-因此您必须添加检查:st.hasMoreTokens()
。您可以将其放在for
语句中。
正如我想的那样,您想使用toString()打印数组内容-它无法按预期工作。使用System.out.println(Arrays.toString(arr));