在java中声明一个没有大小的数组

时间:2015-07-15 19:36:28

标签: java arrays

你好我试图在java中声明一个数组,但我不希望数组有特定的大小,因为每次大小必须不同。

我使用了这个声明:     int [] myarray5;

但是当我尝试下面的代码时,myarray5上有一个错误

for(int i=0; i<=myarray1.length - 1; i++){
        for (int j=0; j<=myarray2.length - 1; j++){
            if (myarray1[i] == myarray2[j]){
                myarray5[k] = myarray2[j];
                k++;
            }

        }

    }

以及何时打印阵列:

for (int i=0; i<=myarray3.length-1; i++){
        System.out.print(myarray3[i]+",");
        }

6 个答案:

答案 0 :(得分:12)

有一个NullPointerException,因为你声明但从未初始化过数组。

您可以动态声明一个数组,如下所示。

  int size = 5; // or anyother value you want
  int[] array = new int[size];

或者您使用列表。这允许动态改变大小。 E.g:

  List<Integer> list = new ArrayList<>();
  list.add(5); //adds number 5 to the list
  int number = list.get(0); // Returns Element which is located at position 0 (so in this example in number will be "5");

答案 1 :(得分:3)

  

我不希望数组具有特定的大小,因为每次大小必须不同。

Java中的数组具有固定的大小。声明后,您无法更改它。如果你试图逼迫你。您每次都在创建一个新数组。出于任何原因,请不要将array1创建为arrayN

如果你想要动态尺寸,可以拉伸和收缩。您正在寻找ArrayList。 Java中的ArrayList易于使用。

ArrayList<Type> arrayList = new ArrayList<>();

List<Type> arrayList = new ArrayList<>();
  

但是当我尝试下面的代码时,myarray5上有一个错误

我想这将是一个ArrayIndexOutOfBoundsException,因为你的循环基于array1的长度,但你的其他数组如array5的长度不同。

答案 2 :(得分:1)

为什么在1D-Arrays上使用嵌套循环?有N-arrays时就会出现问题。它使您的代码难以理解且难以维护。

正如其他帖子所提到的,请使用arrayList。

或者,如果由于任何原因,您不能使用ArrayList。至少使您的初始数组大小足以处理所有方案。这样,您无需担心拉伸数组的大小。

我还注意到你打印数组的for循环看起来很笨重。

要打印数组,您可以:

for (int i=0; i<myarray.length; i++)    //throw away the = and the -1
    System.out.print(myarray[i] + ",");

OR

for (int i : myarray)    //use a for-each loop
    System.out.print(i + ",");

OR

System.out.println(Arrays.toString(myarray));

答案 3 :(得分:1)

一些事情,正如人们所说的Java中的常规数组必须用&#34; new&#34;声明以及大小。如果需要,可以有一个空数组,但它的大小为0.

现在,如果你想要一个动态数组,你可以使用ArrayList。其语法如下:

ArrayList<Primitive_Type_Here> = new ArrayList<Primitive_Data_Type_Here>();

现在,再一次,如果你不告诉数组有什么,那么即使对任何数组类型做任何事都没有意义。对于ArrayLists,您必须告诉它添加适合其类型的任何对象。例如,我可以添加&#34; Hello World&#34;在ArrayList中我们可以执行以下代码。

ArrayList<String> sList = new ArrayList<String>();
sList.add("Hello World");
System.out.println("At index 0 our text is: " + sList.get(0));

//or if you want to use a loop to grab an item
for(int i = 0, size = sList.size(); i < size; i ++)
{
   System.out.println("At index " + i + " our text is: " + sList.get(i));
}

**如果你想知道为什么我使用.size()而不是.length是因为arrayLists没有.length方法,而.size对它做同样的事情。

**如果你想知道为什么我有int = 0,size = sList.size();这是因为这种方式可以增强代码性能,因为你的循环具有O(n)复杂度,但是如果我们要做的话,那么&lt; sList.size()它将是O(n)* sList.size(),因为你将不断地在循环的每次迭代中调用sList.size()。

答案 4 :(得分:0)

你需要的是列表。数组必须具有大小,因为数组的工作方式。

这是非常简单的解释:

声明大小为5的数组时

JVM为该数组保留5个点,并仅存储指向第一个元素的指针。

该数组的第3个元素JVM用于指向第1个元素+3的指针。

另一方面,

List保持指向第一个元素的指针,并在每个元素中指向下一个元素。因此,如果您想要第5个元素JVM转到第1个元素并且在其中找到第2个元素的内存位置,则在第2个元素中找到第3个元素的位置。

结论: 纵向槽阵列要快得多,但必须是固定大小,纵向列表较慢,但您可以根据需要添加和删除元素。

问题是您可能没有声明数组的大小,或者根本没有初始化数组。

答案 5 :(得分:0)

应在方法外部声明数组,并将数组作为参数传递给方法,即

methodName(int[] anySizeArray){
    //TODO your code here!;
}

您的程序现在应该能够处理任何大小的数组。