【问题标题】:Returning arrays to main method将数组返回给 main 方法
【发布时间】:2012-08-09 08:54:26
【问题描述】:

我有一个关于将数组从一种方法返回到主方法的问题。它开始让我很恼火,我无法用大脑来解决这个问题。似乎即使我在方法中更改了数组,当我在 main 中显示它时,它也会显示旧数组。我正在尝试删除数组中的重复数字,我知道它可以工作,因为我已经在调试器中单步执行了它,但是在我返回它并返回主目录后,它再次显示整个数组!我知道我在这里想念的东西一定很容易。有人可以指出我正确的方向吗?这是我的代码...

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int[] numbers = new int[10];

    System.out.print("Enter 10 numbers: ");

    for (int x = 0; x < numbers.length; ++x)
        numbers[x] = input.nextInt();

    eliminateDuplicates(numbers);

    for (int y = 0; y < numbers.length; ++y)
        System.out.print(numbers[y] + " ");
}


public static int[] eliminateDuplicates(int[] numbers) {
    int[] temp = new int[numbers.length];
    int size = 0;
    boolean found = false;

    for (int x = 0; x < numbers.length; ++x) {

        for (int y = 0; y < temp.length && !found; ++y) {
            if (numbers[x] == temp[y])
                found = true;
        }
        if (!found) {
            temp[size] = numbers[x];
            size++;
        }
    found = false;
    }   

    int[] result = new int[size];
    for (int z = 0; z < result.length; ++z)
        result[z] = temp[z];

    return result;
}
}

【问题讨论】:

    标签: java arrays loops for-loop


    【解决方案1】:

    看看这个电话:

     eliminateDuplicates(numbers);
    

    您忽略了返回值。也许你想要:

     numbers = eliminateDuplicates(numbers);
    

    我有时希望 Java 有一种方法来指示不应忽略方法的返回值。也可以省去很多关于InputStream.read 的问题...

    【讨论】:

      【解决方案2】:

      应该是:numbers = eliminateDuplicates(numbers);

      您实际上忽略了方法返回的结果。

      【讨论】:

      • 哈哈,我知道这很愚蠢。非常感谢您的快速回答......我现在感觉很愚蠢。自学有时有点粗糙
      【解决方案3】:

      这样做:

      int[] result =eliminateDuplicates(numbers);
      for (int y = 0; y < result.length; ++y)
          System.out.print(numbers[y] + " ");
      

      另外,在您的eliminateDuplicates() 方法中,通过删除temp 数组直接使用result 数组。或者将temp 重命名为result 并返回。以下代码是不必要的:

      int[] result = new int[size];
          for (int z = 0; z < result.length; ++z)
              result[z] = temp[z];
      

      【讨论】:

      • 是的,但是如果原始数组中没有包含数字,那么大小是否仍为 10,并且我会得到 0?
      【解决方案4】:

      在 Java 中,parameters are passed by value,因此您不能使用 numbers 作为输入/输出参数。

      例如如果你是 C#,你可以做到

       eliminateDuplicates(ref numbers);
      

      但正如其他人指出的那样,最明显的问题是您忘记分配结果:)

      【讨论】:

        【解决方案5】:

        在你的主目录中,试试这个:

        numbers = eliminateDuplicates(numbers);
        

        【讨论】:

          【解决方案6】:

          方法调用应该是这样的——

          numbers = eliminateDuplicates(numbers);
          

          您没有捕捉到由消除重复函数返回的结果。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-06-30
            • 2013-12-15
            • 2020-02-21
            • 1970-01-01
            • 1970-01-01
            • 2017-12-22
            • 1970-01-01
            相关资源
            最近更新 更多