2014-02-19 116 views
0

我想改变一个字符串数组的大小,但我不知道还有什么要尝试和这种方法不工作。这里是我的代码:更改Java中的数组大小

import java.util.Scanner; 

public class test{ 
    public static void main(String[] args){ 
     String[] names; 
     names = new String[5]; 
     for(int i=0; i<10; ++i){ 
      addToArray(names, i, "blah"); 
     } 
     System.out.println(names.length); 
     System.out.println("bye"); 
    } 

    public static void addToArray(String[] names, int i, String name){ 
     if (i < names.length){ 
      names[i] = name; 
     } 
     else { 
      String[] temp; 
      temp = new String[names.length + 10]; 
      System.arraycopy(names, 0, temp, 0, names.length); 
      addToArray(temp, i, name); 
      names = temp; 
     } 
    } 
} 

我的问题是,当我运行它,它打印出我的阵列的最终长度为5的时候,应该说15

+0

可能重复(http://stackoverflow.com/questions/13197702/resize -an-array-while-keeping-current-elements-in-java) –

+0

@ user2310289 nope。我看着那个,我的努力使用了建议的System.arraycopy。我对我的问题并不是非常具体,但是当我打印数组的长度为5时,我期望它是10. – Broseph

回答

6

的问题是,你可以” T改变您的任何(Object)方法参数的引用,所以......

names = temp; 

只改变addToArray方法的范畴内的names变量的引用。您应该使用return声明,而不是...

public static String[] addToArray(String[] names, int i, String name){ 
    if (i < names.length){ 
     names[i] = name; 
    } 
    else { 
     String[] temp; 
     temp = new String[names.length + 10]; 
     System.arraycopy(names, 0, temp, 0, names.length); 
     names = addToArray(temp, i, name); 
    } 
    return names; 
} 

不要忘了保持,一旦方法返回的参考...

for(int i=0; i<10; ++i){ 
    names = addToArray(names, i, "blah"); 
} 
2

一旦阵列已创建的该尺寸数组无法更改。数组一旦创建就可以容纳一定数量的对象。

然而,ArrayList能够动态地改变它保存的对象的数量。初始化一个简单ArrayList一种方法将是:

ArrayList<String> stringArrayList = new ArrayList<>(); 
+0

他没有改变现有数组的大小,他创建了一个更大的新数组大小,将元素复制到其中,然后使该临时数组成为新数组。这只是他的参考是有点关闭......他需要使用回报。 –

+0

虽然我会一直认同,但我们需要更多的背景知道为什么OP选择手动动态调整阵列大小。此外,这几乎就是'ArrayList'所做的任何事情,它只是由需要调整大小的数组支持;) – MadProgrammer

+0

我这样做是手动的,因为我根本没有使用Java的经验,哈哈。我的主要语言是Python:p。我主要是通过我的C经验来学习这一点。 – Broseph

0

变化的返回类型为字符串[]返回名称addToArray()方法和分配名称= addToArray(字符串[]名称,INT我,字符串名称);在mainMethod从而可以维持保持在Java中,参照跟踪时,尺寸的增加

1

三点

  1. 数组是特殊的对象,他们有一个简单的属性 命名length这是final
  2. 此外,您正在创建一个新的数组,而不是重新调整原始数组的大小。
  3. 你不能改变您的任何方法的参数参考
的[在保持Java的潮流元素,调整数组大小?]
+0

那么,他不是完全想要改变现有数组的大小。他已经展示了对你所说的内容的基本理解,所以他正在尝试创建一个新的数组并指向它。 –

+0

@Noobacode我希望我的编辑更好地解释了我的想法 –

+0

是的,它好多了。 –