首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的多行输入

Java中的多行输入
EN

Stack Overflow用户
提问于 2020-06-18 01:26:17
回答 2查看 90关注 0票数 0

我正试着读这样一个输入:

代码语言:javascript
复制
5 3 3
1 2 3 4 5
5 4 3 2 1

当我使用扫描仪并尝试这样的东西时:

代码语言:javascript
复制
        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’是相同的;

代码语言:javascript
复制
[5, 4, 3, 2, 1]
[5, 4, 3, 2, 1]
12

我怎么读这个输入?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-18 01:33:01

代码的问题不是如何读取输入,而是下面这一行:

代码语言:javascript
复制
a = b = new int[n];

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

您应该创建两个数组:

代码语言:javascript
复制
a = new int[n];
b = new int[n];

请注意,读取输入的另一种方法是使用nextInt,但您的方式也是可以的。

代码语言:javascript
复制
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();
}
票数 3
EN

Stack Overflow用户

发布于 2020-06-18 01:54:04

这是造成问题的原因。

代码语言:javascript
复制
a = b = new int[n];

a,b都引用相同的数组对象。因此,后面的输入正在覆盖前一个输入。将此更改为:

代码语言:javascript
复制
a = new int[n];
b = new int[n];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62440885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档