【问题标题】:Pass array to method and return the array将数组传递给方法并返回数组
【发布时间】:2015-09-12 02:47:31
【问题描述】:

这是我正在研究的问题

使用 for 循环生成一个由十个随机整数组成的数组,所有整数都在 100 到 200 的范围内,包括 100 到 200。使用 Arrays 类对整个数组进行排序和显示。 接下来,将数组作为唯一参数传递给一个方法,该方法将数组的每个元素加倍,然后返回数组。 使用 foreach 循环将返回数组中的所有元素显示在一行上,由 a 分隔单一空间。后一个循环还应该确定返回数组中所有元素的总和。用“千”逗号显示总和,如示例输出中所示。

这是我的代码:

package bryant7and8;

import java.util.Arrays;


public static void main(String[] args) {

    int[] myList = new int[10];

        for (int i = 0; i < myList.length; i++) {
            myList[i] = 100 + (int) (Math.random() * ((110 - 10) + 1));

    }
    Arrays.sort(myList);
    System.out.println(Arrays.toString(myList));

    doubleArray (myList);
    System.out.println(doubleArray(myList));
}

public static int[] doubleArray(int[] array) {
    for (int i = 0; i < array.length; i++) {
        array[i] *= 2;
    }

    return array;
}

}

我不知道如何传递数组,我已经研究了几个小时,我的书籍解释没有帮助。另外,我对这种可怕的问题格式表示歉意,我对 stackoverflow 还是新手。

【问题讨论】:

标签: java arrays methods


【解决方案1】:

你应该写一个这样的方法:

public static int[] doubleArray (int[] array) {
    //double the array... I think you know how to do this part.
    return array;
}

现在假设您有一个名为 myArray 的数组,您可以像这样将它传递给方法:

doubleArray (myArray);

然后myArray中的元素会加倍。您还可以将方法的返回值用于其他用途。

或者,您可以返回另一个全新的数组:

public static int[] doubleArray (int[] array) {
    int[] newArray = new int[array.length];
    //put all the stuff in "array" in "newArray"
    //double the new array... I think you know how to do this part.
    return newArray;
}

那么当你调用方法时,传入的参数不会改变。但是返回值是双倍数组。

【讨论】:

  • 只需使用您在 cmets 中发布的代码即可。我认为这是正确的。 @CoreyBryant
【解决方案2】:
void doubleArray(int[] values){
    //change the value array, with doubling logic

}

由于数组是通过引用传递的,所以传递的数组会被改变。无需退货。

【讨论】:

    【解决方案3】:

    您只需要一个将数组作为参数的方法,修改该数组,然后返回相同的数组。

    private int[] doubleArray(int[] arr) {
    
        for (int i = 0; i < arr.length; i++) {
            arr[i] *= 2;
        }
    
        return arr;
    }
    

    编辑:正如其他答案所指出的,您不需要 返回数组。无论如何,您都在修改原始数组,因此您所做的任何更改都将在此方法的范围之外持续存在。

    【讨论】:

      【解决方案4】:

      只需创建一个静态方法(因为您将从静态 main() 方法调用它),将您的数组作为参数传递给它。对其进行一些修改。

      public static void doubleTheArrayElements(myList){
      //put your logic here
      }
      

      在你的主要方法中调用它:doubleTheArrayElements(myList) 无需返回数组,因为 Java 参数是通过引用传递的。

      【讨论】:

        【解决方案5】:

        你最好相信java是按值传递的。更多详情请参考Is Java "pass-by-reference" or "pass-by-value"?

        整个代码如下所示,仅供您参考。调用 public static int[] notByReference(int[] arr) 方法后,myList 没有指向新对象。而是为复制的变量分配了对新对象的新引用。

        import java.util.Arrays;
        
        public class ArrayTenRandom {
        
            public static void main(String[] args) {
        
                int[] myList = new int[10];
        
                for (int i = 0; i < myList.length; i++) {
                    myList[i] = 100 + (int) (Math.random() * ((110 - 10) + 1));
        
                }
                Arrays.sort(myList);
                System.out.println(Arrays.toString(myList));
                doubleArray(myList);
                System.out.println(Arrays.toString(myList));
                notByReference(myList);
                System.out.println(Arrays.toString(myList));
        
            }
        
            public static void doubleArray(int[] arr){
                for(int i = 0; i < arr.length; i++){
                    arr[i] = arr[i] * 2;
                }
            }
        
            public static int[] notByReference(int[] arr){
                arr = new int[2];
                System.out.println(Arrays.toString(arr));
                return arr;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-08-19
          • 1970-01-01
          • 2018-09-23
          • 2015-03-04
          • 1970-01-01
          • 2018-04-24
          • 2015-06-04
          • 2013-12-15
          相关资源
          最近更新 更多