-2

我正在练习 Java 并研究数组。由于数组大小在运行时无法更改,是否可以制作 2 个数组并在运行时继续存储第一个数组中的输入,然后当它已满时,然后通过 if 语句移动到第二个数组。我是 Java 基础,所以希望我的代码朝着正确的方向发展。无论如何它不起作用,但我只想分享我的想法,看看它是否可以工作。

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner in = new Scanner(System.in);

    int[] arr1 = new int[5];
    int[] arr2 = new int[10];

    while(in.hasNextInt())
    {
        for(int i = 0; i <= arr2.length; i++)
        {
            if (i <= arr1.length) { arr1[i] = in.nextInt(); }
            else arr2[i] = in.nextInt();
        }
    }

}
4

3 回答 3

1

您应该将代码更改为以下内容:

if (i < arr1.length) { arr1[i] = in.nextInt(); } //"<" instead of "<="
else { arr2[i - arr1.length] = in.nextInt(); } //decrement i by the size of the first Array

如其他答案/答案中所述,有很多更实用的方法可以实现您想要实现的目标,但以上内容应该让您的代码按预期工作。

于 2013-07-06T22:52:44.557 回答
1

这不是一个好主意。如果第二个数组溢出,就会出现异常和数据丢失等问题。

我建议使用ArrayList.

您可以创建一个:

ArrayList<Integer> list=new ArrayList<>();

并添加:

list.add(new Integer(in.nextInt()));

使用自动装箱,您可以跳过创建整数引用对象并使用:

list.add(in.nextInt());
于 2013-07-06T22:52:57.760 回答
0

无论如何它不起作用......

是的。很明显。

...但我只是想分享我的想法,看看它是否可行。

不,很明显。

当然你可以在第一个数组时将元素放在第二个数组中。但是当第二个数组填满时,你又遇到了同样的问题。


最好的解决方案是使用ArrayList<Integer>(... 或任何类型的List<Integer>)。这将解决透明和自动“增长”列表的问题。

如果您坚持对数组执行此操作,那么解决方案是:

  1. 动态分配比“当前”数组更大的“新”数组,
  2. 将“当前”数组的元素复制到“新”数组,并且
  3. 将“新”数组的引用分配给“当前”数组变量。

事实上,您可以使用Arrays.copyOf(int[], int).

于 2013-07-07T13:02:56.990 回答