我有问题从控制台读取输入,如下所述:
输入:
第一行输入包括测试用例的数量。 T测试用例的描述如下:
每个测试用例的第一行包含数组的大小,第二行包含数组的元素,第三行包含差异k。
Example:
Input:
2
5
1 5 4 1 2
0
3
1 5 3
2
这是我的代码及其输出错误:
Scanner input = new Scanner(System.in);
int T;
T = input.nextInt();
int[] k_holder = new int[T];
int[] n_holder = new int[T];
int[][] array = new int[T][10000];
for (int i=0; i<T; i++) { // length of test
n_holder[i] = input.nextInt();
String tmp[] = input.next().split(" ");
for (int j=0;j<tmp.length; j++) {
array[i][j] = Integer.parseInt(tmp[j]);
}
int K = input.nextInt(); // difference
k_holder[i] = K;
}
System.out.println("===============");
for (int i=0; i<T; i++) {
System.out.println(n_holder[i]);
for (int j=0; j<n_holder[i]; j++) {
System.out.print(array[i][j] + " ");
}
System.out.print("\n" + k_holder[i]);
}
Output:
2
5
1 5 4 1 2
===============
5
1 0 0 0 0
54
1 0 0 0
2
一旦我在array_line之后输入enter(在上面的例子中array_line是1 5 4 1 2),我得到了奇怪的输出
答案 0 :(得分:2)
因为您没有提供预期的结果。很难说你到底要做什么,以下是我的建议。
在所有input.nextLine();
语句后添加nextInt()
,nextInt()
无法使用换行符(\ n),因此需要input.nextLine()
捕获它,或者结果会搞砸。
使用String tmp[] = input.nextLine().split(" ");
来解析空格分隔线,next()
仅处理第一个令牌。
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.time.LocalDateTime; import java.util.Scanner;
public class Main{
public static void main(String args[]) throws IOException{
new Main().go();
}
public void go() throws IOException{
Scanner input = new Scanner(System.in);
int T;
T = input.nextInt();
input.nextLine();
System.out.println("T is " + T);
int[] k_holder = new int[T];
int[] n_holder = new int[T];
int[][] array = new int[T][10000];
for (int i=0; i<T; i++) { // length of array
n_holder[i] = input.nextInt();
input.nextLine();
System.out.println("n_holder[" +i + "] is " + n_holder[i]);
String tmp[] = input.nextLine().split(" ");
for(String e : tmp){
System.out.print(" " + e);
}
for (int j=0;j<tmp.length; j++) {
array[i][j] = Integer.parseInt(tmp[j]);
}
int K = input.nextInt(); // difference
input.nextLine();
k_holder[i] = K;
}
System.out.println("===============");
for (int i=0; i<T; i++) {
System.out.println(n_holder[i]);
for (int j=0; j<n_holder[i]; j++) {
System.out.print(array[i][j] + " ");
}
System.out.print("\n" + k_holder[i]);
}
}
}
我的测试:
2
T is 2
5
n_holder[0] is 5
1 5 4 1 3
1 5 4 1 3
0
3
n_holder[1] is 3
1 5 3
1 5 3
2
===============
5
1 5 4 1 3
03
1 5 3
2
答案 1 :(得分:1)
你实际上并没有在这里问一个问题,但是如果你想知道为什么你的阵列输出是1 0 0 0 0而不是1 5 4 1 2,原因是因为你打电话
String tmp[] = input.next().split(" ");
而不是
String tmp[] = input.nextLine().split(" ");
请注意,默认情况下,扫描程序是以空格分隔的。这意味着input.next()
只抓取第一个标记,直到它到达空格。因此,如果你输入&#34; 1 5 4 1 2&#34;,它只抓住1,然后用其余的输入做一些时髦的扫描仪啜饮。我相信它甚至会抓住剩下的那条线作为扫描仪的下一个输入!所以你的input.nextInt()
以某种方式在54中循环,然后循环回来,input.next()
抓住1,最后input.nextInt()
抓住2(因此有趣的输出,并观察我们可以看到1 5 4 1 2从侧面跑下来。)
为什么它决定nextInt()是54而不是5,但我不清楚。