你好我试图在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]+",");
}
答案 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!;
}
您的程序现在应该能够处理任何大小的数组。