Многострочный ввод в Java - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь прочитать ввод, подобный этому:

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

Как я могу прочитать этот ввод?

Ответы [ 2 ]

3 голосов
/ 18 июня 2020

Проблема с вашим кодом не в том, как вы читаете ввод, а в этой строке здесь:

a = b = new int[n];

В этой строке вы устанавливаете a и b на то же самое новый int массив. Вы действительно создали здесь новый массив, но создали только один. И a, и b относятся к одному и тому же. Таким образом, когда вы выполняете b[i] = ..., вы фактически перезаписываете значения, которые вы только что записали в него, в первом l oop.

Вы должны создать два массива:

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 голос
/ 18 июня 2020

Это вызывает проблему.

a = b = new int[n];

Оба a, b ссылаются на один и тот же объект массива. Следовательно, более поздний ввод отменяет предыдущий ввод. Измените это на:

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