我有这个方法,将我的初始数组加倍,然后将其作为新数组返回。当我重新打印新阵列时,它并没有显示它增加了一倍。我会粘贴一个方法,但如果还不够,请告诉我。当我使用第二个for循环时,它将在方法中正确打印,但是当我调用方法打印数组时,它会打印初始数组。
public static int [] doubleArray(int [] p)
{
int [] newArr = new int [p.length * 2];
for (int i = 0; i < p.length; i++)
{
newArr[i] = p[i];
}
p = newArr; //Here I set the new doubled array to equal the array in parameters
for (int i = 0; i < p.length; i++)
{
System.out.print(p[i] + " ");
}
return p;
}
答案 0 :(得分:2)
您只需newArr
p
答案 1 :(得分:1)
当您设置p
= newArr
时,数组p
仍会保持其大小,因此其长度不会加倍。您可以尝试返回newArr
而不是p
,这应该会为您提供您正在寻找的双重数组。
答案 2 :(得分:0)
您只是迭代到p.length
。您需要修改逻辑以使第一个for
循环中的长度加倍,同时保留要使用的正确索引。
答案 3 :(得分:0)
它的长度增加了一倍。您是否也希望复制这些值?
public static int [] doubleArray(int [] p)
{
int [] newArr = new int [p.length * 2];
for (int i = 0; i < p.length; i++)
{
newArr[i] = p[i];
newArr[2*i] = p[i]; //copy the value
}
p = newArr; //Here I set the new doubled array to equal the array in parameters
for (int i = 0; i < p.length; i++)
{
System.out.print(p[i] + " ");
}
return p;
}
答案 4 :(得分:0)
长度延长。 试试这个...
public static void main(String[] args) {
int[] a = {1,2,4};
int[] s = doubleArray(a);
System.out.println(Arrays.toString(s));
}
它给出输出[1,2,4,0,0,0]
答案 5 :(得分:0)
数组是对象并通过引用传递。因此,如果您希望传递给此方法的变量将更改它的引用,那么您就错了。
我运行此代码并生成双倍长度的数组,并且在开头有原始数组的值。当您使用基本类型数组时,将使用默认值填充空位置(对于int为0)
答案 6 :(得分:0)
对我来说很好。您确定您对返回的值有正确的参考吗?
无论如何看看System.arraycopy
public static void main (final String args[])
{
int [] p = {1,2,3,4,5,6,7,8,9};
final int [] newArr = new int [p.length * 2];
for (int i = 0; i < p.length; i++)
{
newArr[i] = p[i];
}
p = newArr; //Here I set the new doubled array to equal the array in parameters
for (int i = 0; i < p.length; i++)
{
System.out.print(p[i] + " ");
}
}
答案 7 :(得分:0)
好的,@ ZouZou解决了这个问题。当我调用方法时,我需要将初始数组设置为等于方法。因此,当我返回p数组时,它将其写入初始数组。 即;
initialArray = doubleArray(initialArray);
答案 8 :(得分:0)
这对我来说完全没问题。我想你已经在main中调用了这个方法,如下所示:
public static void main (final String args[])
{
int [] p = {1,2,3,4,5,6,7,8,9};
doubleArray(p);
for (int i = 0; i < p.length; i++)
{
System.out.print(p[i] + " ");
}
}
在doubleArray方法中,您没有扩展原始数组。但相反,你会返回一个扩展大小的新的。因此,更改不会反映到方法之外的原始数组。
要获取新的数组,您应该捕获返回的数组并使用新数组进行打印。
这是您的实际问题吗?请澄清!
如果是:通常可以更改原始数组,并通过将返回类型更改为void来使更改反映在方法之外。这些变化可能正在改变因素。值。但是一旦声明了数组的大小,你就无法改变它。