首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的代码不返回我想要的?

为什么我的代码不返回我想要的?
EN

Stack Overflow用户
提问于 2019-07-14 17:37:15
回答 5查看 98关注 0票数 0

我有一些代码不能返回我想要的东西。

代码语言:javascript
复制
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},那么它将打印出11 1 1而不是6 3 1 2。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-07-14 17:51:13

您的代码试图做的事情(虽然没有成功)是查找数组的min和max项,但是即使这样也没有成功,因为您没有使用这样的赋值保存max和min值:

代码语言:javascript
复制
max = swapping[i];

但你却用相反的方法:

代码语言:javascript
复制
swapping[i] = max;

无论如何,即使您正确地做了它,您也必须用另一个循环来重复这个数组来进行交换。

如果在第一个循环中保存的不是min和max的值,而是它们的索引,则可以避免第二个循环:

代码语言:javascript
复制
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;
}

结果:

代码语言:javascript
复制
86 5 928 14 5 26 7 8 9 10 3 40 
票数 3
EN

Stack Overflow用户

发布于 2019-07-14 17:46:41

问题发生在您的第一个for循环中。

代码语言:javascript
复制
if(swapping[i]>max){
  swapping[i]=max;
}

因为一开始最大是1。当swappingi是任意值时(例如,3用于i=1)。

您的代码变成了

代码语言:javascript
复制
if(3>1){
  swapping[i]=1;
}

你基本上是用最大值来替换任何大于你在最大值中所拥有的值。你想做的正好相反。

代码语言:javascript
复制
if(swapping[i]>max){
  max=swapping[i];
}

您也有一些bug,但这是您当前错误的答案。

看来你想写的函数是这样的。

代码语言:javascript
复制
  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;
  }

有更有效的解决方案,但这一个做了最少的修改您的代码。

票数 0
EN

Stack Overflow用户

发布于 2019-07-14 17:56:52

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

swappingi = max和swappingi = min只将数组值设置为1,即当前值max和min。

你需要

代码语言:javascript
复制
  if(swapping[i]>max){
     max = swapping[i];
  }
  if(swapping[i]< min){
     min = swapping[i];
  }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57029700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档