【问题标题】:How do I return an array after it has been swapped?交换后如何返回数组?
【发布时间】:2014-10-22 19:15:27
【问题描述】:

所以我有我的主要方法,它应该有一个 1-20 打印的数组,然后我应该为每个偶数出现在循环中传递该数组。 swap 方法会将数组中的偶数与下一个数字进行切换……所以在数组 [1, 2, 3, 4, 5,..] 中,2 和 3 会切换,4 和 5 会切换.

这里是主要方法:

public class Lab_01_Tester {

public static void main (String[] args) throws FileNotFoundException
{
    PrintWriter writer = new PrintWriter("Lab_01_nums.txt");
    int[] randArray  = Lab_01_ArrayUtilities.buildIntArray(20, 10, 29);

    String randArrayString = Arrays.toString(randArray);

    writer.write(randArrayString);
    System.out.print(randArrayString);

    writer.close();

    for (int i = 0; i < randArray.length - 1; i++)
    {
        if (randArray[i] % 2 == 0)
        {
            Lab_01_ArrayUtilities.swap (randArray, i, i + 1);
            i = i +1;
        }

        else;

    }
    System.out.println();
    System.out.print(randArrayString);

}

}

这是randArray 被传递给的swap 方法:

public static int[] swap (int[] randArray, int i, int j)
{
    int temp = randArray[i];
    randArray[i] = randArray[j];
    randArray[j] = temp;

    return randArray;
}

我的问题是,数组传回来的时候,没有变化

【问题讨论】:

  • 也许是这样,randArray = Lab_01_ArrayUtilities.swap (randArray, i, i + 1);?
  • 你仔细测试过这个吗?只是快速通读,但看起来 swap() 应该可以工作。
  • 是的,没有必要返回数组。无论如何,该方法都将起作用。可能是其他代码的问题,像else; 这样的东西看起来很糟糕。

标签: java arrays sorting return parameter-passing


【解决方案1】:

您不需要返回任何内容(假设您将方法签名更改为返回void) - 数组的元素已就地交换。

例如:

int[] array = { 3, 5, 4 };
swap(array, 0, 2);
System.out.println(array[0]); // 4
System.out.println(array[2]); // 3

这是你的实际问题:

System.out.print(randArrayString);

自上次打印以来,您没有更改 randArrayString - 所以难怪它打印相同的值。您只需要在打印出来之前再次添加这一行:

randArrayString = Arrays.toString(randArray);

【讨论】:

  • 当我打印我的完整数组时,虽然没有任何改变。
  • @NikDesai:查看我的编辑 - 您没有打印数组的当前内容......您正在打印之前打印的相同字符串。
  • 哇哦.. 非常感谢,帮我省了几个小时的咒骂时间 :)
猜你喜欢
  • 2017-10-01
  • 2011-03-07
  • 1970-01-01
  • 2015-09-14
  • 2021-05-23
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
  • 2021-04-05
相关资源
最近更新 更多