【问题标题】:Java - How to modify an array within a for loop and have it be remembered after the for loop exits?Java - 如何在 for 循环中修改数组并在 for 循环退出后记住它?
【发布时间】:2016-04-04 03:07:48
【问题描述】:

这个程序的思想是将输入数组从小到大排序。

所以,我的整体方法存在一些问题,并且在 for 循环退出后记住了“结果”数组。当我尝试调用该方法时,结果似乎没有保存。

另外,由于某种原因,我得到了 0 和 13 作为结果数组的值,即使这些不是原始数组的值,我也不确定它们来自何处或如何获得它们。

public static int[] sortMe(int[] inputArray){
 int[] result = new int[inputArray.length];
   for(int i = 0; i < inputArray.length - 1; i++){
      for(int j=0; j <inputArray.length - 1; j++){
            if (inputArray[j] > inputArray[j+1]){
                int temp = inputArray[j];
                result[j] = inputArray[j+1];
                result[j+1] = temp;
          }
        }
   return result;
}

【问题讨论】:

  • 您的排序算法在语义上不正确

标签: java arrays sorting for-loop


【解决方案1】:

您的方法返回结果。 因此,从方法外部调用它并将结果分配回原始数组。像这样的:

int[] myArray = new int[]{3,1,5,4,2};
myArray = sort(myArray);

您的方法存在一些问题:

1) 出现 0 值是因为您没有正确排序,并且在创建初始结果数组时,默认情况下,数组中的所有值都初始化为零。

2) 另外,你根本不需要中间结果数组,直接修改 inputArray 即可。

3) 此外,您的 return 语句位于外部 for 循环中,导致它仅在迭代 1 次后返回结果。它需要移到两个 for 循环之外。

我已经用以下工作结果调整了你的方法代码:

public static int[] sortMe(int[] inputArray) {
    for (int i = 0; i < inputArray.length; i++) {
        for (int j = 0; j < inputArray.length - 1; j++) {
            if (inputArray[j] > inputArray[j + 1]) {
                int temp = inputArray[j];
                inputArray[j] = inputArray[j + 1];
                inputArray[j + 1] = temp;
            }
        }
    }
    return inputArray;
}

【讨论】:

  • 调用该方法我有类似的东西,但由于某种原因它不打印......虽然其他方法工作正常
【解决方案2】:

代码int[] result = new int[inputArray.length];创建一个新数组并将所有元素初始化为0。因此,如果一些连续元素已经排序,它们不会处理内部循环,结果数组的这些元素保持为0。 例如,对于数组 {4,6,1,9} ,我得到 {0,1,6,0} 作为结果。 对于您的情况,最好将输入数组的内容复制到结果数组。

此外,仅检查连续元素在您的情况下效果不佳。 对于数组 {4,6,1,9} ,仅比较连续元素将给出 {4,1,6,9} 作为结果。因此,需要考虑不同的方法。

其次,该方法似乎引发了编译错误,因为它在“i”for循环关闭后错过了返回语句。

【讨论】:

    猜你喜欢
    • 2019-08-07
    • 1970-01-01
    • 2011-01-22
    • 2022-01-09
    • 2016-04-25
    • 2022-01-26
    • 1970-01-01
    • 2016-10-02
    • 2022-06-10
    相关资源
    最近更新 更多