我正试着读这样一个输入:
5 3 3
1 2 3 4 5
5 4 3 2 1当我使用扫描仪并尝试这样的东西时:
Scanner sc = new Scanner(System.in);
int n, x, y;
String[] temp = sc.nextLine().split(" ");
n = Integer.parseInt(temp[0]);
x = Integer.parseInt(temp[1]);
y = Integer.parseInt(temp[2]);
int[] a, b;
a = b = new int[n];
String[] t = sc.nextLine().split(" ");
for(int i = 0; i < n; i++){
a[i] = Integer.parseInt(t[i]);
}
String[] f = sc.nextLine().split(" ");
for(int i = 0; i < n; i++){
b[i] = Integer.parseInt(f[i]);
}这只是打印数组'a‘和'b’是相同的;
[5, 4, 3, 2, 1]
[5, 4, 3, 2, 1]
12我怎么读这个输入?
发布于 2020-06-18 01:33:01
代码的问题不是如何读取输入,而是下面这一行:
a = b = new int[n];在这一行中,您将a和b设置为相同的新int数组。您确实在这里创建了一个新数组,但您只创建了一个数组。a和b都引用了相同的。因此,在执行b[i] = ...时,实际上是在覆盖刚刚在第一个循环中写入的值。
您应该创建两个数组:
a = new int[n];
b = new int[n];请注意,读取输入的另一种方法是使用nextInt,但您的方式也是可以的。
Scanner sc = new Scanner(System.in);
int n, x, y;
n = sc.nextInt();
x = sc.nextInt();
y = sc.nextInt();
int[] a, b;
a = new int[n];
b = new int[n];
for(int i = 0; i < n; i++){
a[i] = sc.nextInt();
}
for(int i = 0; i < n; i++){
b[i] = sc.nextInt();
}发布于 2020-06-18 01:54:04
这是造成问题的原因。
a = b = new int[n];a,b都引用相同的数组对象。因此,后面的输入正在覆盖前一个输入。将此更改为:
a = new int[n];
b = new int[n];https://stackoverflow.com/questions/62440885
复制相似问题