• Practice| 数组


    /*
    从键盘确定班级的组号,在从键盘输入每一组的人数,并输入每一个学员的成绩,并求出,每一组的平均分,
    全部的平均分,每一组的最高分,全部的最高分,并显示结果.
    
    */
    class Test3{
        public static void main(String[] args){
            
            java.util.Scanner input = new java.util.Scanner(System.in);
    
            //先确定一共有多少个组;
            System.out.print("请输入一共有多少个组:");
            int groups = input.nextInt();
            
            int[][] scores = new int[groups][]; //如5个组,+ 人数
            
            //遍历输入每个组的人数
            
            for(int i = 0;i < scores.length;i++){
                
                System.out.print("请输入第" + (i+1) +"组的人数:");
                int num = input.nextInt();
                scores[i] = new int[num];  //确定每 i 行的列数 <==> 相当于一维数组;
                
            }
            
            //遍历scores二维数组,输入成绩即填充列数,默认值为0 ;
            for(int i = 0; i < scores.length;i++){
                for(int j = 0;j < scores[i].length;j++){
                    System.out.print("请输入第"+ (i+1) +"组" + "第"+ (j+1) + "个学员的成绩:");
                    int score = input.nextInt();
                    scores[i][j] = score;
                }
                System.out.println();
            }
            //每个组和班级的平均分
            int sumAll = 0;
            int countAll = 0;
            for(int i = 0; i < scores.length;i++){
                int sumGroup = 0; //每循环一次就会赋0 -->可求出每组的成绩
                int countGroup = 0;
                for(int j = 0;j < scores[i].length;j++){
                    sumAll += scores[i][j];
                    countAll++;
                    
                    sumGroup += scores[i][j];
                    countGroup++;
                }
                System.out.println("第" + (i+1) + "组的总分为:" + sumGroup + "	" + "第" + (i+1) + "组的平均分为:" + sumGroup/countGroup);
            }
            System.out.println("全班总分为:" + sumAll + "	" + "全班平均分为:" + sumAll/countAll);
            
            //求每个组和班级的最高分
            int max_ban = 0;
            for(int i = 0;i < scores.length;i++){
                int max_zu = 0;
                    //int max_ban = 0;
                for(int j = 0;j < scores[i].length;j++){
                    
                    if(scores[i][j] > max_zu){
                        max_zu = scores[i][j];
                    }
                    if(scores[i][j] > max_ban){
                        max_ban = scores[i][j];
                    }
                    
                }System.out.println("第" + (i+1) + "组的最高分为:" + max_zu);
                
            }System.out.println("全班最高分为:" + max_ban);
            
        }
    }

    数组的复制

    /*
    (1)已知一个数组存储了成绩
    int[] scores = {67,89,23,45,99};
    要让你把,所有不及格的成绩找出来,放到一个数组中
    结果:{23,45}
    
    (1)先统计不及格的有几个人,count个
    (2)新建数组  int[] low = new int[count];
    (3)再遍历scores,把不及格的复制到low数组中
    */
    
    class ArrayCopy{
        public static void main(String[] args){
            int[] scores = {67,89,23,45,99};
            int count = 0;
            for(int i = 0;i < scores.length; i++){
                if(scores[i] < 60){
                    count++;
                }
            }
            int[] low = new int[count];
    
            for(int i = 0,j = 0; i < scores.length && j<count; i++){ //&& j<count不写也可以不会超范围;
                if(scores[i] < 60){
                    //j = i;//i=2, 3
                    low[j] = scores[i];    //这里是关键啊啊
                    j++;
                }
            }
            
            //for(int i = 0;i<low.length;i++){
                //System.out.println(low[i]);
            //}
            for(int num : low){
                System.out.print("不及格的有:" + num + "
    ");
            }
        }
    }

    二分查找(前提是有顺序的)

    使用二分查找算法查找字符串数组中  {"a","b","c","d","e","f","g","h"} g的元素。

    * String类型:
     * (1)重写了equals方法
     * (2)实现了java.lang.Comparable接口
     *         这个接口的抽象方法  int compareTo(String str)
     */
    public class Test19 {
        public static void main(String[] args) {
            String[] arr = {"a","b","c","d","e","f","g","h"};
            String find = "g";
            
            int left = 0;
            int right = arr.length-1;
            int mid = (left + right)/2;
            int index = -1;
            
            while(left<=right){
                if(arr[mid].equals(find)){
                    index = mid;
                    break;
                }else if(find.compareTo(arr[mid])>0){//find比arr[mid]大,去mid的右边查找
                    left = mid +1;
                }else{
                    right = mid - 1;
                }
                mid = (left + right)/2;
            }
            System.out.println("g的下标是:" +index);
        }
    }
    //二分法
    class BinarySearch{
        public static void main(String [] args){
            int[] arr = {0,1,2,5,8,9,12,17,20};
            //int[] arr = {1,2,5,8,9,12,17,20};
            int index = -1;
            int find = 5;
            int left = 0;
            int right = arr.length - 1;
            int mid = (left + right) /2;
            
            
            while(left <= right){  //left left   left  left
                if(arr[mid] == find){//找到了
                    index = mid;
                    break;
                }else if(find < arr[mid]){//说明find在[mid]的左边
                    right = mid-1;
                }else{//说明find在[mid]的右边
                    left = mid + 1;    
                } 
                mid = (left + right)/2;
            }
            if(index==-1){
                System.out.println("未找到");
            }else{
                System.out.println("下标:" + index);
            } 
        }
    }

    冒泡排序(把大的往右边移动-下沉;把小的往左移动-冒泡)

    /*
    冒泡排序:
    从小到大
    
    //1、先照我这个写
    //2、如果我要求,每一轮从最后一个元素开始比较
    //我刚才,相当于把“大”往“右”移动
    //现在,把“小”往“左”移动
    /*
    冒泡排序:实现从小到大
    (1)方法一:把“大”往“右”移动,称为“下沉”
    (2)方法二:把“小”往“左”移动,称为“冒泡”
    
    
    */
    
    class BubbleSort{
        public static void main(String[] args){
            int[] arr = {3,9,4,2,1,8,6}; //6
            
            //从小到大:通过相邻元素的比较, 大的往后移动称为 下沉;
            
            for(int i = 1;i < arr.length-1;i++ ){
                for(int j = 0;j < arr.length-1;j++){
                    if(arr[j] > arr[j+1]){
                        int temp = 0;
                        temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = temp;
                    }
                }
            }for(int i = 0; i < arr.length; i++){
                System.out.print(arr[i] + "	");
            }
            
        }
    }
    
    ---->>>
    1       2       3       4       6       8       9
    class BubbleSort{
        public static void main(String[] args){
            int[] arr = {3,9,4,2,1,8,6}; //6
            
            //从小到大:把 小 的往 左 移动;称为"冒泡"。
            for(int i = 0; i < arr.length;i++){
                for(int j = arr.length-1; j > i;j--){
                    if(arr[j] < arr[j-1]){  //如果后边的arr[j] < 前边的arr[j-1]
                        int temp = 0;
                        temp = arr[j-1];
                        arr[j-1] = arr[j];
                        arr[j] = temp;
                    }
                }
            }for(int i = 0;i < arr.length;i++){
                System.out.print(arr[i] + "	");
            }
        }
    }

    ---->>>
    1       2       3       4       6       8       9

     

    package com.atguigu.exam;
    
    import java.util.Arrays;
    
    public class Test20 {
        public static void main(String[] args) {
            int[] array = {4,3,6,1};
            sort(array);
            System.out.println(Arrays.toString(array));
        }
        
        public static void sort(int[] arr){
            //轮数:n-1
            for (int i = 1; i < arr.length; i++) {
                //每一轮从左往右比较
                /*
                 * 当i=1,j=0,1,2,...arr.length-2   j<arr.length-i
                 */
                for (int j = 0; j < arr.length-i; j++) {
                    if(arr[j] > arr[j+1]){
                        int temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = temp;
                    }
                }
            }
        }
    }

    直接选择排序

    /*
    
    直接选择排序-->>
    思路:
        每一轮找出本轮未排序元素中的最小值,然后和它应该在的位置的元素交换
        
    例如:
    第一轮:最小值是1,它的位置[4],它应该在[0],[4]和[0]位置元素交换  {1,2,7,9,4,6}
    第二轮:最小值是2,它的位置[1],它应该在[1],不动                   {1,2,7,9,4,6}
    第三轮:最小值是4,它的位置[4],它应该在[2],[4]和[2]位置元素交换  {1,2,4,9,7,6}
    第四轮:最小值是6,它的位置[5],它应该在[3],[5]和[3]位置元素交换  {1,2,4,6,7,9}    
    第五轮:最小值是7,它的位置[4],它应该在[4],不动
    */
    
    class TestSelectSort{
        public static void main(String[] args){
            int[] arr = {4,2,7,9,1,6};
            //外循环:5轮
            //i的循环值:0,1,2,3,4  i<arr.length-1
            for(int i = 0; i <arr.length-1;i++){
                //找出本轮的最小值及其下标
                //(1)先假设“本轮未排序部分”的第一个元素最小
                int min = arr[i];
                int index = i;
                
                //(2)用min 和 "剩余的元素" 进行比较,确定本轮的最小值; 从i+1开始比较,到最后;
                /*
                第一轮:未排序部分 [0,5],min=arr[0],index=0,j=1,2,3,4,5
                第二轮:未排序部分 [1,5],min=arr[1],index=1,j=2,3,4,5
                第三轮:未排序部分 [2,5],min=arr[2],index=2,j=3,4,5
                第四轮:未排序部分 [3,5],min=arr[3],index=3,j=4,5
                第五轮:未排序部分 [4,5],min=arr[4],index=4,j=5
                */
                
                for(int j = i+1; j < arr.length; j++){
                    if(min > arr[j]){
                        min = arr[j];
                        index = j;
                    }
                }
                
                
                //(3)把[index]位置的元素和它应该在的位置交换
                /*
                第一轮,最小值应该在[0],第一轮i=0
                第二轮,最小值应该在[1],第一轮i=1
                第三轮,最小值应该在[2],第一轮i=2
                第四轮,最小值应该在[3],第一轮i=3
                第五轮,最小值应该在[4],第一轮i=4
                */
                if(index != i){ //如果arr[index],即本轮的最小值,不在它应该在的位置[i],就要交换
                    int temp = arr[index];
                    arr[index] = arr[i];
                    arr[i] = temp;        
                }
            }
            for(int num : arr){
                System.out.print(num); //124679
            }
        
        
        }
    }
            
            
  • 相关阅读:
    <a>作Form表单提</a>
    图片读写分离
    MSSql ID自动增长删除数据重1开始
    WPF 控件
    Cookies
    MVC页面跳转
    MVC-各种传值方式
    mvc框架下,怎样用cookie实现下次自动登录
    SQL函数说明大全 (转)
    SQL日期(转)
  • 原文地址:https://www.cnblogs.com/shengyang17/p/9986701.html
Copyright © 2020-2023  润新知