繁体   English   中英

Java中的多行输入

[英]Multiline input in Java

我正在尝试读取这样的输入:

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]); 
        }

这只是打印 arrays 'a' 和 'b' 相同;

[5, 4, 3, 2, 1]
[5, 4, 3, 2, 1]
12

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

您的代码的问题不在于您如何读取输入,而在于此处的这一行:

a = b = new int[n];

在这一行中,您将ab设置为相同的新int数组。 您确实在这里创建了一个新数组,但您只创建了一个。 ab都指同一个。 因此,当您执行b[i] =...时,实际上是在覆盖您刚刚在第一个循环中写入的值。

您应该创建两个 arrays:

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();
}

这导致了问题。

a = b = new int[n];

a、b 都引用同一个数组 object。 因此,后面的输入会覆盖前面的输入。 将其更改为:

a = new int[n];
b = new int[n];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM