有没有一种方法可以在不使用return的情况下将数组的值从一个方法传递到另一个方法?

时间:2019-04-08 19:57:03

标签: java

我被困在Java编码任务上。我应该为现有程序创建三个方法(askInfocopyInfosetArray),该程序可以让用户将数字输入到数组中,然后组织并打印该数组。 AskInfo将该数组作为参数,从用户处请求索引值,并以int形式返回输入数字的数量。 CopyInfo将值复制到具有返回的数字长度的新数组中,并且setArray对数字进行排序。

我的问题是,根据分配,askInfo仅应返回输入数字的数量。因此,它将方法打印的数组值留在方法内部,使得copyInfo无法检索这些值并将其复制到第二个数组中。您如何建议我无法编辑主要方法而克服了这个问题?

主要方法:

    int[] tempArray = new int[100];
    System.out.println("Type in numbers. Type zero to quit.");
    int amountOfNumbers = askInfo(tempArray);

    int[] realArray = new int[amountOfNumbers];
    copyInfo(realArray, tempArray);

    setArray(realArray);

    printArray(realArray);

我的代码:

public static int askInfo (int[] tempArray) { //asks for numbers and assigns them to tempArray, returns the length of realArray
    int count = 0;
    Scanner reader = new Scanner(System.in);
    for (int i =0;i<tempArray.length;i++){
        System.out.print((i+1)+". number: ");
        tempArray[i] = reader.nextInt();
        count++;
        if (tempArray[i] == 0) //stops asking for values if user inputs 0
            return count;
        }
    return count;
    }

public static int[] copyInfo (int[] realArray, int[] tempArray)  { //copies tempArray's values to realArray
    for (int i=0; i<realArray.length;i++){
        realArray[i] = tempArray[i];
    }
    return realArray;
}

public static int[] setArray (int[] realArray) { //sorts realArray from largest value to smallest
    for (int i=0;i<realArray.length;i++){
        for (int j=i+1;j<realArray.length;j++){
            if (realArray[i]<realArray[j]){
                int tmp = realArray[i];
                realArray[i] = realArray[j];
                realArray[j] = tmp;
            }
        }
    }
    return realArray;   
}

现在程序确实可以编译,但是数组realArraytempArray的值超出askInfo方法的范围为空。请记住,我无法编辑主要方法-我只能编辑我编写的三种方法。

3 个答案:

答案 0 :(得分:1)

您编写的代码本身就是正确的。您不需要任何修改。
你说

  

从askInfo方法之外获取的数组realArraytempArray的值为null

那句话完全是不正确
int[] tempArray数组正在askInfo内部进行有效更改。
并且int[] realArray被有效地填充。

enter image description here

我建议您休息一下,然后重新思考。

答案 1 :(得分:1)

是我还是您想念您的printArray方法?除此之外,代码看起来还不错。数组是引用类型,因此,即使方法中添加了其中的值,所有方法也都可以访问同一TempArray

答案 2 :(得分:-1)

在Java中,数组变量是对数组对象的引用。这意味着,当您在tempArray[i] = reader.nextInt();中分配askInfo()时,它将修改tempArray中名为main()的数组的内容。有关更多信息,请阅读Are arrays passed by value or passed by reference in Java?