黑马程序员技术交流社区

标题: 为什么最值总是有问题呢,求大神 [打印本页]

作者: beiji    时间: 2015-10-23 22:07
标题: 为什么最值总是有问题呢,求大神
我觉得我的代码木有问题,但是在求最值得时候总会出错,求出来的值并不是最值,求大神指导

import java.util.Scanner;
class Noname1 {
         public static void main(String[] args)   {
               
                int[] arr=creatArray();
                viewShow(arr);
               
         }
         //创建数组
         public static int[] creatArray() {
               
                 Scanner sc=new Scanner(System.in);
                 System.out.println("请输入数组的长度:");
                int len=sc.nextInt();
                int[] arr=new int[len];
                for(int i=0;i<len;i++){
                        System.out.println("请输入数组的第"+(i+1)+"数据:");
                        arr[i]=sc.nextInt();
                }
               
                return arr;
          }
          //主界面
         public static void viewShow(int[] arr) {

                 Scanner sc=new Scanner(System.in);
                 System.out.println();
                 System.out.println("主界面:");
                System.out.println("-----------------------------");
                System.out.println("1.显示数组;");
                System.out.println("2.查找数据;");
                System.out.println("3.翻转数组;");
                System.out.println("4.数组最值;");
                System.out.println("5.创建数组:");
                System.out.println("886.退出;");
                System.out.println("-----------------------------");
                System.out.println("请输入你需要的选项: ");

                int choose=sc.nextInt();
                switch(choose) {
                        case 1:
                                System.out.println("您输入的数组为:");
                                showArray(arr);
                                viewShow(arr);
                        case 2:
                                System.out.println("请输入您要查找的数据:");
                                int num=sc.nextInt();
                                seachNum(num,arr);
                                viewShow(arr);
                        case 3:
                                System.out.println("反转后的数组为:");
                                turnArray(arr);
                                viewShow(arr);
                        case 4:
                                System.out.println("需要查找:1 最大值;2 最小值;3 返回");
                                int c=sc.nextInt();
                                if(c==1) {
                                        System.out.println("您查找的最大值为:");
                                        int max=max(arr);
                                        System.out.println(max);
                                 }else if(c==2) {
                                        System.out.println("您查找的最小值为:");
                                        int min=min(arr);
                                        System.out.println(min);
                                  }else if(c==3) {
                                        viewShow(arr);
                                   } else {
                                        System.out.println("您输入有误请返回重新输入");
                                  }       
                                 viewShow(arr);
                        case 5:
                                        main(int[] arr);
                        case 886:
                                break;
                        default :
                                System.out.println("您输入有误请--------跳转返回");
                                viewShow(arr);

                 }
          }

          //显示数组方法
        public static void showArray(int[] arr)  {
                System.out.print("[  ");
                for (int i =0;i<arr.length ;i++ )  {
                        System.out.print(arr[i]+"\t");
                }
                System.out.print("]");
                System.out.println();
        }

        //查找数据方法
         public static void seachNum(int num,int[] arr) {
                for (int i=0; i<arr.length;i++) {
                        if(num==arr[i]) {
                                System.out.println("您查找的数据的下标为:"+i);
                        }else {
                                System.out.println("您查找的数据不存在");
                         }
                }
          }

          //反转数组方法
          public static void turnArray(int[] arr) {
                  int[] b=arr;
                for(int i=0;i<b.length/2;i++) {
                        int temp=b[i];
                        b[i]=b[arr.length-1-i];
                        b[arr.length-1-i]=temp;
                 }
                showArray(b);
           }

           //最大值方法
          public static int max(int[] arr) {
                        int max=arr[0];
                for(int i=1;i<arr.length;i++) {
                       
                        max=max>arr[i]?max:arr[i];
                        return max;
            }
                return -1;
          }

          //最小值方法
          public static int min(int[] arr) {
                 int min=arr[0];
                for(int i=1;i<arr.length;i++){
                       
                        min=min<arr[i]?min:arr[i];
                        return min;
                 }
                 return -1;
          }

}
作者: 奔跑的小红帽    时间: 2015-10-23 23:20
  return max;不应该放在循环里,你这样写每次返回的都是第一个和第二个的中的最大值,后面的元素没办法比较
作者: 奔跑的小红帽    时间: 2015-10-23 23:24
public static int getMax(int[] arr){
        int max = arr[0];
        for(int x = 0;x < arr.length;x++){
                if(arr[x]>max){
                        max = arr[x];
                }
        }
        return max;
}




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