【问题标题】:Is there a way to transfer the values of an array from method to method without using return?有没有一种方法可以在不使用返回的情况下将数组的值从一个方法传输到另一个方法?
【发布时间】:2019-04-08 19:57:02
【问题描述】:

我被困在 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 方法为空。请记住,我无法编辑 main 方法 - 我只能编辑我编写的三个方法。

【问题讨论】:

  • 你有能力编辑这些方法所属的类吗?如果是这样,您可以创建一个类变量并对其进行编辑。
  • 1、可以使用Arrays.sort(realArray)对数组进行排序。这将消除 setArray() 方法。 2、您可以使用方法clone()作为realArray = tempArray.clone()realArray = Arrays.copyOf(tempArray, tempArray.length)Array.Stream(...)System.arraycopy(...)
  • 这个要求类似于上下文设计模式:stackoverflow.com/questions/771983/… 不是传递数组进行排列,而是传递一个包含排列数组的对象,允许您将对象保持在范围内需要并且有排列而不明确要求它被返回。
  • 欢迎来到 Stack Overflow。我建议您阅读ericlippert.com/2014/03/05/how-to-debug-small-programs 以获取有关调试代码的一些提示。如果您仍然需要帮助,请edit您的问题,以便代码完整。如果您提供一个我们可以复制/粘贴并自己运行的完整代码示例,我们可以为您提供更好的帮助。

标签: java


【解决方案1】:

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

在 askInfo 方法之外得到的数组 realArraytempArray 的值是 null

这种说法完全不正确
int[] tempArray 数组正在 askInfo 内部有效地更改。
并且int[] realArray 正在有效地填充。

我建议你休息一下,重新开始这个练习。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 感谢您对 Stack Overflow 的贡献。此区域仅供解答。继续努力提高您的声誉,以便您可以将 cmets 发布到其他人的问题中以进行澄清。
    • 对不起,我的意思是作为答案而不是评论-如果听起来像一个,对不起
    • 这如何回答标题中的问题?你能补充更多细节吗?
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 2018-12-24
      • 2022-11-29
      • 1970-01-01
      相关资源
      最近更新 更多