黑马程序员技术交流社区

标题: 为什么两个调用函数单独执行结果正确,一起执行结果错? [打印本页]

作者: 乔叶旭    时间: 2012-11-25 03:14
标题: 为什么两个调用函数单独执行结果正确,一起执行结果错?
本帖最后由 乔叶旭 于 2012-11-25 10:18 编辑

/*给定一个数组,获取组中的最大值和最小值*/
class Demo
{
        public static void main(String[] args)
        {
                //int max;
                int[] arr = new int[]{5,1,6};
                System.out.println("MAX:");
                System.out.println(max(arr));
                System.out.println("min:");
                System.out.println(min(arr));
        }
        public static int max(int[] arr)
        {
                int x;
                for (x =0;x < (arr.length-1) ;x++ )
                {
                        if (arr[x] >= arr[x+1])
                        {
                                arr[x+1] = arr[x];
                        }
                        else
                        {
                                arr[x+1] = arr[x+1];
                        }
                }
                return arr[x];
        }

        public static int min(int[] arr)
        {
                int y;
                for (y =0;y < (arr.length-1) ;y++ )
                {
                        if (arr[y] <= arr[y+1])
                        {
                                arr[y+1] = arr[y];
                        }
                        else
                        {
                                arr[y+1] = arr[y+1];
                        }
                }
                return arr[y];
        }
        
}
作者: 倪鹏博    时间: 2012-11-25 03:25
本帖最后由 倪鹏博 于 2012-11-25 03:27 编辑

你的两个函数功能实现有误!
你这不是求最值的!
看代码:
  1. public static int max(int[] arr)
  2. {
  3.     int m=arr[0];
  4.     for (int x =0;x < arr.length ;x++ )
  5.    {
  6.        if (arr[x] > m)
  7.       {
  8.          m = arr[x];
  9.       }
  10.    }
  11.    return m;
  12. }

  13. public static int min(int[] arr)
  14. {
  15.    int m=arr[0];
  16.    for (y =0;y < arr.length ;y++ )
  17.    {
  18.       if (arr[y] < m)
  19.       {
  20.          m = arr[y];
  21.       }
  22.    }
  23.    return m;
  24. }
复制代码

作者: 乔叶旭    时间: 2012-11-25 09:48
倪鹏博 发表于 2012-11-25 03:25
你的两个函数功能实现有误!
你这不是求最值的!
看代码:

功能我不认为是错的啊,单独执行是可以执行的出结果的,请问错在哪里,具体怎么错了?
作者: 段海涛    时间: 2012-11-25 10:06
楼主,你的两个函数单独运行是没问题的,逻辑上可行
但你两个函数一起运行的时候就会出错,原因在于,你把你的数组传给一个函数执行之后,这个数组里面的数据已经被这个函数所改变了,当第二个函数拿到这个数组的时候,它已经不是最开始的那个数组了
你的数组最开始是 5 1 6  
如果执行求最大值的函数  数组会变成 5 5 6
你再执行求最小值,求出来的就不是1   ,而是  5  

作者: 乔叶旭    时间: 2012-11-25 10:18
段海涛 发表于 2012-11-25 10:06
楼主,你的两个函数单独运行是没问题的,逻辑上可行
但你两个函数一起运行的时候就会出错,原因在于,你把 ...

哦,原来是这样,非常感谢!!!
作者: 韩俊杰    时间: 2012-11-25 10:27
我发现你的问题了,把max方法中稍微改一下就OK了,如下所示
public static int max(int[] arr)
        {
                int x;
                for (x =0;x < (arr.length-1) ;x++ )
                {
                        if (arr[x] >= arr[x+1])
                        {
                                arr[x+1] = arr[x];    //把这一句话改成arr[x]=arr[x+1]
                        }
                        else
                        {
                                arr[x+1] = arr[x+1];
                        }
                }
                return arr[x];
        }

但是我觉得你的程序有点麻烦,我把我写的程序给你展示一下,希望能帮到你,如下所示
public class Zuizhi {

public static void main(String[] args) {
         int []arr ={5,1,6};  //初始化一个数组
         int max=getMax(arr);       //调用方法获取最大值
         System.out.println("最大值为:"+max);
         int min=getMin(arr);       //调用方法获取最小值
         System.out.println("最小值为:"+min);
}


public static int getMax(int []arr){
        int max=0;
        for (int i=1;i<arr.length;i++){
        if (arr>arr[max]){
           max=i;          //局部变量max记录最大值
       }
  }
       return arr[max]; //返回最大值
}

public static int getMin(int []arr){
     int min=0;
     for (int i=1;i<arr.length;i++){
     if (arr<arr[min]){
         min=i;          //局部变量min记录最小值
     }
  }
     return arr[min]; //返回最小值
}
}


作者: 森仔    时间: 2012-11-25 10:40
下面是我对你的代码进行了简单的修改,你看下运行结果就知道怎么回事了 很直接


/*给定一个数组,获取组中的最大值和最小值*/
class Demo3
{
        public static void main(String[] args)
        {
                //int max;
                int[] arr = new int[]{5,1,6};
                                printarr(arr);
                System.out.println("MAX:");
                System.out.println(max(arr));
                printarr(arr);
                System.out.println("min:");
                System.out.println(min(arr));
        }
        public static int max(int[] arr)
        {
                int x;
                for (x =0;x < (arr.length-1) ;x++ )
                {
                        if (arr[x] >= arr[x+1])
                        {
                                arr[x+1] = arr[x];
                        }
                        else
                        {
                                arr[x+1] = arr[x+1];
                        }
                }
                return arr[x];
        }

        public static int min(int[] arr)
        {
                int y;
                for (y =0;y < (arr.length-1) ;y++ )
                {
                        if (arr[y] <= arr[y+1])
                        {
                                arr[y+1] = arr[y];
                        }
                        else
                        {
                                arr[y+1] = arr[y+1];
                        }
                }
                return arr[y];
        }
       
               
               
               
public static void printarr(int[] arr)
{
        System.out.print("[");
       
        for(int x=0;x<arr.length;x++)
               
        {
               
                if (x!=arr.length-1)
                System.out.print(arr[x]+" , ");
                else
                        System.out.println(arr[x]+"]");

        }
       
}
        
}




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