黑马程序员技术交流社区

标题: 求最值问题 [打印本页]

作者: wujie    时间: 2013-4-23 23:23
标题: 求最值问题
本帖最后由 wujie 于 2013-4-23 23:47 编辑

class  Ti {
    public static void main(String[] args)  {
           int [] a = {-1,-4,-5,-2,-7,-8};
           int z = pu( a );
           System.out.println(z);
   }

    public static int pu(int [] a)  {
         int b = 0;

          for(int x = 0;x < a.length -1;x++ ){
  
             if(a[x] < a[x+1]){
   
             b = a[x + 1];
   
            }
  
  
        }  
         return b;

   }



}
为什么我i的值求出来是-2??

作者: 尹丽峰    时间: 2013-4-23 23:35
本帖最后由 尹丽峰 于 2013-4-23 23:51 编辑

package heima;
public class demo1 {
public static void main(String[] args) {
  int[] a = { -1, -4, 1, -2, -8,100 };
  int z = pu(a);
  System.out.println(z);
}
public static int pu(int[] a) {
  int x ;
  for ( x = 0; x < a.length - 1; x++) {
   for (int y = 1; y < a.length - x - 1; y++) {
    if (a[y+1]< a[y]) {
     int b = a[y + 1];
     a[y + 1] = a[y];
     a[y] = b;
    }
   }
  }
  return a[x];
}
}


作者: $love    时间: 2013-4-23 23:41

class  Ti {
    public static void main(String[] args)  {
           int [] a = {-1,-4,-5,-2,-7,-8};
           int z = pu( a );
           System.out.println(z);
   }

    public static int pu(int [] a)  {
         int b = a[0];

          for(int x = 1;x < a.length;x++ ){
  
             if(b < a[x]){
   
             b = a[x + 1];
   
            }
  
  
        }
                return b;  
         
    }
    }
你自己拿代码看一下比较清楚
你的程序你自己调试一下就明白了
你是拿前面的值去和后一位比较
你只有后一位比前面的那位值大才会去记录给b赋值
所以才会得到-2
求最值是要把最大的值存到b中
不知道你看的明白没
希望能帮到你


作者: vicoooo    时间: 2013-4-23 23:43
if(a[x] < a[x+1]) 不能这样进行比较。你可以写一个排序:比如选择排序或者冒泡排序取最大值。
作者: wangyougu010    时间: 2013-4-23 23:46
class Ti {
        public static void main(String[] args) {
                int[]a = {-1,-4,-5,-2,-7,-8};
                int max = a[0];
                for (int i = 0; i < a.length ; i++) {
                        if(a[i] > max ) {
                                max = a[i+1];
                        }
                }
                System.out.println(max);
        }
}
求最值,可以把数组的第一个元素设为最大值,然后遍历数组,拿后面的跟它比较,如果大于该值,则替换,这样取得正确的结果。
作者: wujie    时间: 2013-4-23 23:47
O(∩_∩)O谢谢
作者: wujie    时间: 2013-4-23 23:47
尹丽峰 发表于 2013-4-23 23:35

O(∩_∩)O谢谢
作者: 黑马-张超    时间: 2013-4-23 23:50
class  Ti {
    public static void main(String[] args)  {
           int [] a = {-1,-4,-5,-2,-7,-8};
           int z = pu( a );
           System.out.println(z);
   }

    public static int pu(int [] a)  {
         int b = a[0];

          for(int x = 1;x < a.length ;x++ ){
  
             if(b < a[x]){
   
             b = a[x];
   
            }
                        
  
  
        }
                return b;
         

   }


把你的代码改了下~这样输出的就是-1了!
作者: wujie    时间: 2013-4-23 23:51
vicoooo 发表于 2013-4-23 23:43
if(a[x] < a[x+1]) 不能这样进行比较。你可以写一个排序:比如选择排序或者冒泡排序取最大值。 ...

我还没学到那个排序那里·····
作者: 黑马-张超    时间: 2013-4-23 23:53
我晕.好不容易搞出来了跟上面雷同了~我去!
作者: wujie    时间: 2013-4-23 23:53
黑马-张超 发表于 2013-4-23 23:50
class  Ti {
    public static void main(String[] args)  {
           int [] a = {-1,-4,-5,-2,-7,-8} ...

谢谢啊,呵呵
作者: wujie    时间: 2013-4-23 23:55
wangyougu010 发表于 2013-4-23 23:46
class Ti {
        public static void main(String[] args) {
                int[]a = {-1,-4,-5,-2,-7,-8};

还是这个简便,不过要是函数调用,有没更简便的···
作者: wujie    时间: 2013-4-23 23:57
黑马-张超 发表于 2013-4-23 23:53
我晕.好不容易搞出来了跟上面雷同了~我去!

纯属巧合···············
作者: 尹丽峰    时间: 2013-4-24 00:04
没学到排序那就看这段代码
  1. public class max
  2. {
  3.         public static void main(String[]args)
  4.         {
  5.                 int[] arr = {-9,-2,-3,9,1,100,-1};
  6.                 int max =getMax(arr);
  7.                 System.out.println(max);
  8.         }
  9.         public static int getMax(int[]arr)
  10.         {
  11.                 int max = arr[0];//把arr[0]当成是最大和其他的比较
  12.                 for(int x=1;x<arr.length;x++)
  13.                 {
  14.                         if(arr[x]>max)
  15.                         {
  16.                                 max=arr[x];//谁大就换位置
  17.                         }
  18.                 }
  19.                 return max;
  20.         }
  21. }
复制代码

作者: 黄茂霖    时间: 2013-4-24 16:22
  1. /*
  2. 你的代码不难看出,你定义一个int b = 0;比较数组中第一位是否比第二位小,如果成立,b = 第二位.
  3. */
  4. class  Ti {
  5.     public static void main(String[] args)  {
  6.            int [] a = {-1,-4,-5,-2,-7,-8};
  7.            int z = pu( a );
  8.            System.out.println(z);
  9.    }

  10.     public static int pu(int [] a)  {
  11.          int b = 0;

  12.           for(int x = 0;x < a.length -1;x++ ){
  13.                         /*
  14.                         分析你的代码:
  15.                                 你是这样比较的: 0和1        1和2        2和3        3和4        4和5 (数字代表角标)
  16.                                 假设:第一次进来a[x] < a[x+1] 成立,此时b=a[x+1];
  17.                                                         第二次进来a[x] < a[x+1] 不成立,此时b不动;(有可能不成立吧,此时的b指向的值可能是最大的)
  18.                                                         第三次进来a[x] < a[x+1]成立,此时b=a[x+1];(此时b取到的数跟第一次有没有联系?换言之就是第一次b取到的值和第三次取到的值都没有比较)
  19.                         解决方法:
  20.                                 要求最值其实很简单,假设法:
  21.                                         假设数组第一位是最大(最小),每次把角标0的数去和角标1以上的的数对比,
  22.                                         如果发现角标0的数大,则不动,否则让b去取;
  23.                         */
  24.              if(a[x] < a[x+1]){
  25.    
  26.              b = a[x + 1];
  27.    
  28.             }
  29.   
  30.         }
  31.          return b;
  32.    }

  33.    //实现代码:
  34.    class MaxMinTest
  35.    {
  36.                 public static void main(String[] args){
  37.                         int [] a = {-1,-4,-5,-2,-7,-8};


  38.                 }
  39.                 //求最大值
  40.                 public int max(int[] arr){
  41.                        
  42.                         if(arr == null)
  43.                                 throws new NullPointerException();
  44.                         //假设第一位为最大值
  45.                         int max = arr[0];
  46.                         //从第二位开始比较
  47.                         for(int i=1;i<arr.length;i++){
  48.                                 if(max < arr[i]){
  49.                                         max = arr[i];
  50.                                 }
  51.                         }
  52.                         return max;
  53.                 }
  54.                 //求最小值
  55.                 public int max(int[] arr){
  56.                        
  57.                         if(arr == null)
  58.                                 throws new NullPointerException();
  59.                         //假设第一位为最大值
  60.                         int max = arr[0];
  61.                         //从第二位开始比较
  62.                         for(int i=1;i<arr.length;i++){
  63.                                 if(max > arr[i]){
  64.                                         max = arr[i];
  65.                                 }
  66.                         }
  67.                         return max;
  68.                 }
  69.    }
复制代码





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