黑马程序员技术交流社区

标题: 急求大神解惑 [打印本页]

作者: 月下夜风    时间: 2016-7-2 22:58
标题: 急求大神解惑
下面是今天遇到的一题,写了代码,编译没问题,但是没预期结果,求学友们分析一波
分析以下需求,并用代码实现:
        (1)定义一个int类型的一维数组,内容为{6,2,9,15,1,5,20,7,18}
        (2)将数组最大元素与最后一位元素进行交换,最小元素与第一位元素进行交换,并打印数组
这是我写的代码:
  1. class ShuZu1 {
  2.         public static void main(String[] args) {
  3.                 int[] arr={6,2,9,15,1,5,20,7,18};
  4.                 int max=getMax(arr);//获取最大元素索引
  5.                 int min=getMin(arr);//获取最小元素索引
  6.                 jiaoHuan(arr[0],arr[min]);//第一位元素与最小元素交换
  7.                 jiaoHuan(arr[arr.length-1],arr[max]);//最后一位元素与最大元素交换
  8.                 print(arr);//遍历打印数组
  9.         }
  10.         public static void print(int[] arr) {
  11.                 for (int x=0;x<arr.length ;x++ ) {
  12.                         System.out.print(arr[x]+" ");
  13.                 }
  14.         }
  15.         public static void jiaoHuan(int a,int b) {
  16.                 int x=a;
  17.                 a=b;
  18.                 b=x;
  19.         }
  20.         public static int getMax(int[] arr) {
  21.                 int max=0;
  22.                 for (int x=1;x<arr.length ;x++ ) {
  23.                         if (arr[max]<arr[x]) {
  24.                                 max=x;
  25.                         }
  26.                 }
  27.                 return max;
  28.         }
  29.         public static int getMin(int[] arr) {
  30.                 int min=0;
  31.                 for (int x=1;x<arr.length ;x++ ) {
  32.                         if (arr[min]>arr[x]) {
  33.                                 min=x;
  34.                         }
  35.                 }
  36.                 return min;
  37.         }

  38. }
复制代码

哪里出问题了。。。。。急求
作者: yaozhilin    时间: 2016-7-2 23:29
  if (arr[max]<arr[x]) {  max=x;  }
这两句有问题的,你实际上return的是所有arr[0]<arr[x]的值里面的X,而且max会被最后一个arr[x]里面的x覆盖掉.
作者: xfbyxq    时间: 2016-7-3 01:01
你写的交换函数有问题,
public static void jiaoHuan(int[] array,int a,intb){
      int temp=array[a];
        array[a]=array;
        array=temp;
}



这样写就能交换了

作者: 月下夜风    时间: 2016-7-3 09:47
xfbyxq 发表于 2016-7-3 01:01
你写的交换函数有问题,
  • public static void jiaoHuan(int a,int b) {

  • 可以,大兄弟
    作者: 月下夜风    时间: 2016-7-3 09:51

    是这样啊,没错,我返回的就是数组里最大值的角标,不过出的问题解决了,谢谢啦
    作者: shuiwa    时间: 2016-7-3 09:54
    交换出了问题,没有写出数组参数
    作者: 孟小垚    时间: 2016-7-3 10:32
    public static void main(String[] args) {
                    int[] arr = {6,2,9,15,1,5,20,7,18};
                    int[] arrs = new int[arr.length];
                    for (int i = 0; i < arr.length; i++) {
                            arrs[i] = arr[i];
                    }
                    Arrays.sort(arrs);
                    arr[0] = arrs[0];
                    arr[arr.length - 1] = arrs[arrs.length - 1];
                    for (int i : arr) {
                            System.out.print(i + ",");
                    }
            }
    作者: 新人—小明同学    时间: 2016-7-4 02:28
    顶!d=====( ̄▽ ̄*)




    欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2