数组和方法?

时间:2011-10-20 16:58:39

标签: java

我正在为Java编程课程完成任务,我不确定以下内容是如何工作的?下面的方法从数组和整数中获取值。应该将整数添加到数组中,然后在方法之外的其他方法中使用,等等,但是当方法没有返回数组的新内容时,它怎么能工作?方法中有一个空白?我错过了什么吗?预先一些帮助?是否有关于指针的东西?

public static void makeTransaction(int[] trans, int amount);

3 个答案:

答案 0 :(得分:2)

Java中的数组是对象。如果修改方法内的trans数组,则更改将反映在 1 之外。例如:

public static void modify(int[] arr)
{
    arr[0] = 10;
}

public static void main(...) 
{
    int x = {1, 2, 3};
    System.out.println(x[0]); // prints 1

    modify(x);
    System.out.println(x[0]); // now it prints 10

}

请注意,无法在Java中动态调整本机数组的大小。如果需要,您将不得不使用ArrayList之类的东西。或者,您可以将返回类型更改为int[]并返回一个新数组,并将新元素“追加”到旧数组中:

public static int[] makeTransaction(int[] trans, int amount)
{
    int[] new_trans = Arrays.copyOf(trans, trans.length + 1);
    new_trans[trans.length] = amount;

    return new_trans;
}

1 还值得注意的是,作为对象,数组引用按值传递,因此以下代码在方法之外无效:

public void no_change(int[] arr)
{
    arr = new int[arr.length];
}

答案 1 :(得分:0)

您无法向数组添加任何内容。 Java数组具有固定长度。事实上,你想做的事情是不可能的。您可以使该方法返回一个int[]数组,但它将是一个全新的数组,包含初始数组的所有元素+作为参数传递的数量。

如果要向类似数组的结构中添加内容,请使用ArrayList<Integer>

答案 2 :(得分:0)

您是否必须按原样保留方法签名?

另外,你能更具体一点吗?当你说“应该将整数添加到数组中”时,你指的是amount参数吗?如果是这样,那么该数额是如何增加的?我们将它放在数组中的某个位置还是放在末尾,从而延长数组的长度?

就指针而言,Java的指针是隐含的,所以如果你对语言知之甚少,那么你可能就不那么清楚了。无论如何,我相信Java方法通常会通过引用传递对象,而原始值则按值传递。但是,即便这样也不完全正确。如果要将对象参数分配给新对象,则当方法终止时,传递给方法的变量在执行之前的方法之后是相同的。但是,如果您要更改参数的成员属性,那么当方法终止时,这些属性值将与方法内部的值相同。

无论如何,回到你的问题,我相信这会有效,因为数组是一个对象。所以,如果你要做以下事情:

    public static void makeTransaction(int[] trans, int amount)
    {
        trans[0] = amount;
    }

//  static int i;

    /**
     * @param args
     */
    public static void main(String[] args)
    {   
        int[] trans = {0,1,3};
        makeTransaction(trans, 10);
        for(int i = 0; i<trans.length; i++)
        {
            System.out.println(trans[i]);
        }
    }

数组的输出为:

  

10   1   3

但是,看这个。如果我决定如此实施makeTransaction该怎么办:

public static void makeTransaction(int[] trans, int amount)
{
    trans[0] = amount;
    trans = new int[3];
}

您认为输出是什么?是否将它设置为全零或将与以前相同?答案是输出将与以前相同。这与我之前所说的有关。

我可能已经将指针指向了内存中的新对象,但是main方法内部指针的副本保持不变。它仍然指向内存中与之前相同的位置。当makeTransaction方法终止时,我在其中创建的new int[3]对象可用于垃圾回收。原始阵列保持不变。因此,当人们说Java通过引用传递对象时,它更像是按值传递对象的引用。