2013-07-06 44 views
-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(); 
     } 
    } 

} 
+0

数组在运行时分配,但分配后它们的大小是固定的。你是否尝试过使用ArrayList?它为你管理这个东西 – bendu

+0

运行代码,看看它是否工作。值得10,000个答案在这里。 – duffymo

+0

@mehsook嗯,我知道ArrayList的作品,但我想知道这个想法是否适用于数组。 –

回答

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 

正如在其他的答案/答案表示,有很多更实用的方法可以做到你想做到什么,但非上面的代码应该让你的代码能够有效地工作。

1

这不是一个好主意。如果第二个数组溢出,则会出现例外和丢失数据等问题。我想推荐使用ArrayList

您可以创建一个:

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

,并添加到它:

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

自动装箱,你可以跳过一个整数参考对象和使用创造:

list.add(in.nextInt()); 
0

无论如何它不工作...

是的。很明显。

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

号很明显。

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


最好的解决办法是使用ArrayList<Integer>(...或任何形式的List<Integer>)。这将处理透明和自动“列出”列表的问题。

如果与数组这样坚持,那么解决的办法是:

  1. 动态分配一个“新”的数组,它是比“当前”阵列更大,
  2. 复制的元素的“当前”阵列添加到“新”阵列,并且将“新”阵列的引用赋予“当前”数组变量。

事实上,你可以使用Arrays.copyOf(int[], int)做到这一切。

相关问题