Java中的多行输入

问题描述 投票:0回答:1

我正试图读取这样的输入。

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

我怎样才能读取这个输入?

java input java.util.scanner
1个回答
2
投票

你的代码的问题不在于你如何读取输入,而是这一行。

a = b = new int[n];

在这一行,你设置了 ab一样 新的 int 数组。你确实在这里创建了一个新的数组,但你只创建了一个。两个 ab 指的就是这一个。所以当你在做 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();
}

1
投票

这就是导致问题的原因。

a = b = new int[n];

两个a,b都在引用同一个数组对象。因此,后面的输入覆盖了前面的输入。把这个改成。

a = new int[n];
b = new int[n];
© www.soinside.com 2019 - 2024. All rights reserved.