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

时间:2013-11-20 18:23:28

标签: java arrays return

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

}

9 个答案:

答案 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来使更改反映在方法之外。这些变化可能正在改变因素。值。但是一旦声明了数组的大小,你就无法改变它。