Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么不返回正确的数组(java)?_Java_Arrays_Return - Fatal编程技术网

为什么不返回正确的数组(java)?

为什么不返回正确的数组(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

我有一个方法,它将我的初始数组加倍,然后将其作为新数组返回。当我重新打印新数组时,它并没有显示它翻了一倍。我将只粘贴单个方法,但如果还不够,请告诉我。当我使用第二个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;

}
公共静态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)?啊!邹祖这就是我一直在寻找的答案!谢谢大家!@邹州