为什么我的代码不会返回我想要的东西?

时间:2019-07-14 17:37:15

标签: java arrays loops

我有一些代码无法返回我想要的代码。

class Main {
  public static void main(String[] args) {
    int[] swapped= {86,5,3,14,5,26,7,8,9,10,928,40};
       int[] swaps=swap(swapped);
       for(int num: swaps){
      System.out.print(num + " ");
    }
  }
  public static int[] swap(int[] swapping){
    int max=swapping[0];
    int min=swapping[0];
    for(int i=0;i<swapping.length;i++){
      if(swapping[i]>max){
        swapping[i]=max;
      }
      if(swapping[i]<min){
        swapping[i]=min;
      }
    }
    for(int i=0;i<swapping.length;i++){
      if(swapping[i]==max){
        swapping[i]=min;
      }
      if(swapping[i]==min){
        swapping[i]=max;
      }
    }
    return swapping;
  }
}

该代码应该交换数组中最大和最小的数字,但是它只为每个元素返回数组中的第一个元素。因此,如果数组为{1,3,6,2},则它将打印出1 1 1 1而不是6 3 1 2

5 个答案:

答案 0 :(得分:3)

您的代码试图做的事(尽管没有成功)是找到数组的min和max项,但是即使这样也不会成功,因为您没有使用以下分配来保存max和min值: / p>

max = swapping[i];

但是您使用相反的方法:

swapping[i] = max;

无论如何,即使您正确执行了操作,也必须使用另一个循环来重申该数组以进行交换。
如果在第一个循环中没有保存最小值和最大值的值,而是保存了它们的索引,则可以避免第二个循环:

public static int[] swap(int[] swapping){
    int max = 0;
    int min = 0;
    for(int i = 1; i < swapping.length; i++){
        if(swapping[i] > swapping[max]){
            max = i;
        }
        if(swapping[i] < swapping[min]){
            min = i;
        }
    }
    int temp = swapping[min];
    swapping[min] = swapping[max];
    swapping[max] = temp;
    return swapping;
}

结果:

86 5 928 14 5 26 7 8 9 10 3 40 

答案 1 :(得分:0)

问题出现在您的第一个for循环中。

if(swapping[i]>max){
  swapping[i]=max;
}

因为一开始的最大值是1。当swaps [i]是任何值时(例如,对于i = 1,例如3)。

您的代码就是这个

if(3>1){
  swapping[i]=1;
}

基本上,您将用max的值替换大于max的任何值。你想做的是相反的。

if(swapping[i]>max){
  max=swapping[i];
}

您还有更多错误,但这是您当前错误的答案。

好像您要编写的函数是这样。

  public static int[] swap(int[] swapping){
    int max=swapping[0];
    int min=swapping[0];
    for(int i=0;i<swapping.length;i++){
      if(swapping[i]>max){
        max = swapping[i];
      }
      if(swapping[i]<min){
        min = swapping[i];
      }
    }
    for(int i=0;i<swapping.length;i++){
      if(swapping[i]==max){
        swapping[i]=min;
      }else {
        if(swapping[i]==min){
          swapping[i]=max;
        }
      }
    }
    return swapping;
  }

有更有效的解决方案,但是这一解决方案对您的代码所做的改动最少。

答案 2 :(得分:0)

您永远不会在循环中保存最大值和最小值。此外,您没有正确交换值。

swapping [i] = max和swapping [i] = min仅将数组值设置为1,即max和min的当前值。

您需要

  if(swapping[i]>max){
     max = swapping[i];
  }
  if(swapping[i]< min){
     min = swapping[i];
  }

}

答案 3 :(得分:0)

您将需要最大和最小索引才能进行交换:

public static int[] swap(int[] swapping){
    //Initializing values and indexes
    int max = swapping[0];
    int min = swapping[0];
    int maxIndex = 0;
    int minIndex = 0;
    //The maximum and minimum values and indexes so far were the 0'th, so we start from the first
    for (int index = 1; index < swapping.length; index++) {
        if (max < swapping[index]) {
            max = swapping[index];
            maxIndex = index;
        }
        if (min > swapping[index]) {
            min = swapping[index];
            minIndex = index;
        }
    }
    swapping[maxIndex] = min;
    swapping[minIndex] = max;
    return swapping;
}

答案 4 :(得分:0)

我认为,在交换的第一个循环中,您将保存min和max的值

,此外,当您检查swapping[i]==max还是swapping[i]==min时,您应该使用 else if ,因为否则使用swapping[i]==max时,请先写下swipping[i]中的值,然后检查swapping[i]==min的值(现在为true)是否将swapping[i]的值替换为最大值。 这是我认为正确方法的一个示例(请注意第15、18、24行)

class Main {
  public static void main(String[] args) {
    int[] swapped= {86,5,3,14,5,26,7,8,9,10,928,40};
      int[] swaps=swap(swapped);
      for(int num: swaps){
        System.out.print(num + " ");
      }
      System.out.println();
  }
  public static int[] swap(int[] swapping){
    int max=swapping[0];
    int min=swapping[0];
    for(int i=0;i<swapping.length;i++){
      if(swapping[i]>max){
        max = swapping[i];
      }
      if(swapping[i]<min){
        min = swapping[i];
      }
    }
    for(int i=0;i<swapping.length;i++){
      if(swapping[i]==max){
        swapping[i]=min;
      } else if(swapping[i]==min){
        swapping[i]=max;
      }
    }
    return swapping;
  }
}