为什么不返回正确的数组(java)?
我有一个方法,它将我的初始数组加倍,然后将其作为新数组返回。当我重新打印新数组时,它并没有显示它翻了一倍。我将只粘贴单个方法,但如果还不够,请告诉我。当我使用第二个for循环时,它会在方法中正确地打印它,但是当我调用该方法打印数组时,它会打印初始数组为什么不返回正确的数组(java)?,java,arrays,return,Java,Arrays,Return,我有一个方法,它将我的初始数组加倍,然后将其作为新数组返回。当我重新打印新数组时,它并没有显示它翻了一倍。我将只粘贴单个方法,但如果还不够,请告诉我。当我使用第二个for循环时,它会在方法中正确地打印它,但是当我调用该方法打印数组时,它会打印初始数组 public static int [] doubleArray(int [] p) { int [] newArr = new int [p.length * 2]; for (int i = 0; i < p.lengt
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;
}
公共静态int[]doubleArray(int[]p)
{
int[]newArr=newint[p.length*2];
for(int i=0;i
您仅迭代到p.length
。您需要修改逻辑,使第一个for
循环中的长度加倍,同时保留要使用的正确索引。您正在填充newArr
仅通过p
的长度,它确实会使长度加倍。是否也要复制这些值
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;
}
公共静态int[]doubleArray(int[]p)
{
int[]newArr=newint[p.length*2];
for(int i=0;i
长度延长。
试试这个
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]数组是对象并通过引用传递。所以,如果您期望传递给此方法的变量将更改其引用,那么您就错了
我运行了这段代码,它生成了一个双倍长度的数组,开始时有原始数组的值。当您使用基元类型的数组时,空的位置将填充默认值(0表示int)对我来说很好。您确定返回值的引用正确吗 在任何情况下,请查看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] + " ");
}
}
publicstaticvoidmain(最终字符串参数[])
{
int[]p={1,2,3,4,5,6,7,8,9};
最终整数[]新整数=新整数[p.length*2];
for(int i=0;i
当您设置p
=newArr
时,数组p
仍将保持其大小,因此其长度不会加倍。您可以尝试返回newArr
而不是p
,这将为您提供所需的双倍数组。好的,@ZouZou解决了这个问题。调用该方法时,我需要将初始数组设置为等于该方法。因此,当我返回p数组时,它将其写入初始数组。
ie
initialArray=doubleArray(initialArray) 这对我来说非常好。我猜您主要调用了以下方法:
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] + " ");
}
}
publicstaticvoidmain(最终字符串参数[])
{
int[]p={1,2,3,4,5,6,7,8,9};
双阵列(p);
for(int i=0;i
在doubleArray方法中,您没有扩展原始数组。但是,您将返回一个具有扩展大小的新文件。因此,这些更改不会反映到方法之外的原始数组
要获得新的数组,您应该捕获返回的数组并使用新数组进行打印
这是你真正的问题吗?请澄清强>
如果是:通常可以更改原始数组,并通过将返回类型更改为void,使更改反映在方法之外。这些变化可能会改变元素的价值。但是一旦声明数组,就不能更改其大小。如何使用函数?代码“p=newArr;”实际上不会在方法之外更改p的值。尽量避免这种情况,您的代码将不会那么混乱。benjamin提出了一个很好的观点。在大多数情况下,您不希望设置
p=newArr
,而只是使用newArr数组来避免读卡器混淆。好的,这就回答了问题。我如何让它将其写入p数组并作为新数组返回?不要修改p,只返回一个新数组。但是他设置p=newArr
@PaulDraper对不起,这是第一个for
循环。是的,我希望剩余的空格保持在0。但是,我设置了p=newArr,所以我不知道为什么它不能按我希望的方式工作。我希望复制值,然后将剩余值设置为0。是的,但我返回p。我希望其余的数组元素为0,默认情况下为0。@user2875661您只打印其中的第一个p.length。@user2875661是否确实要执行p=doubleArray(p)编码>而不仅仅是双数组(p)代码>?啊!邹祖这就是我一直在寻找的答案!谢谢大家!@邹州