Java数组中的二维数组、二分查找法、杨辉三角的案例

一、代码及效果图

1.二维数组案例及效果图

案例:已知有3个班级各5名学员,请使用二维数组动态录入所有学员成绩,并计算各个班级的平均成绩,最好成绩和最差成绩。依次输出,平均成绩最好的班,三个班所有学员中成绩最高的分数,最差的分数。

代码如下(示例):

public class Work3 {
    public static void main(String[] args) {
        double [][] scores=new double[3][5];
        double [] avg=new double[3];//平均成绩
        double [] max=new double[3];//最好成绩
        double [] min=new double[3];//最差成绩
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < scores.length; i++) {
            double sum=0;
            double maxInit=-1;
            double minInit=1000;
            for (int j = 0; j < scores[i].length; j++) {
                //成绩录入
                System.out.println("请输入第"+(i+1)+"个班的第"+(j+1)+"个学员的成绩:");
                scores[i][j]=sc.nextDouble();
                sum+=scores[i][j];//求和
                //求每个班最大值
                if(scores[i][j]>maxInit){
                    maxInit=scores[i][j];
                }
                //求每个班最小值
                if(scores[i][j]<minInit){
                    minInit=scores[i][j];
                }
            }
            avg[i]=sum/5;
            max[i]=maxInit;
            min[i]=minInit;
        }

        //求出平均成绩最好的班
        double Max=avg[0];
        int MaxIndex=0;
        for (int i = 1; i < avg.length; i++) {
            if(avg[i]>Max){
                Max=avg[i];
                MaxIndex=i;
            }
        }
        System.out.println("平均成绩最好的班是"+(MaxIndex+1)+"班,分数是"+Max);
        //所有学员中分数最高和最差
        Arrays.sort(max);
        Arrays.sort(min);
        System.out.println(max[2]);
        System.out.println(min[0]);
    }
}

在这里插入图片描述

2.二分查找法及效果图

代码如下(示例):
案例:使用Arrays类升序排列数组{1,5,12,36,55,78,98},请用户输入一个要查找的数字,判断是否存在该数字,如果存在,输出它在升序后数组中的位置,不存在,输出提示信息。

public class Work4 {
    public static void main(String[] args) {
    int[] arr={1,5,12,36,55,78,98};
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个要查找的数字:");
        int X=sc.nextInt();
        fun(arr,X);
    }

    private static void fun(int[] arr,int X) {
        int start=0,end=arr.length-1,mid=(start+end)/2;
        while (start<=end){
            if (X==arr[mid]){
                System.out.println("找到了,下标为:"+mid);
                return;
            }else if (X>arr[mid]){
                start=mid+1;
            }else {
                end=mid-1;
            }
            mid=(start+end)/2;
        }
        System.out.println("找不到");
    }
}

在这里插入图片描述
在这里插入图片描述

3.报数选班长及效果图

代码如下(示例):
案例:按照一定的规则选举班长,规则如下:将班里的N个人围城一圈,顺序编号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,然后从下一个人重新开始,最后留下的那个人就被选为班长,请问按照这个规则,选出的班长是原来编号为第几号的学生,假设班上有25个人

public class Work01 {
    public static void main(String[] args) {
        int [] stus=new int[25];
        //编号
        for (int i = 0; i < stus.length; i++) {
            stus[i]=i+1;
        }
        //标记法,用0表示退出
        int k=0;//报数器
        int num=0;//表示淘汰的人数
        while (true){//重复转圈报数
            //表示实现一轮报数
            for (int i = 0; i < stus.length; i++) {
                if (stus[i]!=0){//过滤掉淘汰的人
                    k++;//报数
                    if (k%3==0){
                        stus[i]=0;//淘汰
                        num++;
                        if (num==24){//淘汰人数为24,结束游戏
                            System.out.println(Arrays.toString(stus));
                            return;
                        }
                    }
                }
            }
        }
    }
}

在这里插入图片描述

4.杨辉三角及效果图

代码如下(示例):
案例:2.打印杨辉三角形(要求打印10行),如下所示:(使用二维数组)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

package work1;

public class Work02 {
    public static void main(String[] args) {
        //定义一个长度为10的二维数组
        int [][] num=new int[10][];
        //行数和个数的关系
        for (int i = 0; i <num.length ; i++) {
            num[i]=new int[i+1];
        }
        for (int i = 0; i < num.length; i++) {
            for (int j = 0; j < num[i].length; j++) {
                if(j==0||j==num[i].length-1){
                    num[i][j]=1;//左右端点
                }else {
                    num[i][j]=num[i-1][j-1]+num[i-1][j];
                }
            }
        }
        //输出
        for (int i = 0; i < num.length; i++) {
            //输出每行前面的空格
            for (int j = 0; j < 10-i; j++) {
                System.out.print("  ");
            }
            for (int j = 0; j < num[i].length; j++) {
                if(num[i][j]>=100)
                    System.out.print(num[i][j]+" ");
                else if(num[i][j]>=10)
                    System.out.print(num[i][j]+"  ");
                else
                    System.out.print(num[i][j]+"   ");
            }
            System.out.println();
        }
    }
}

在这里插入图片描述

总结

以上就是二维数组和二分查找法相关的案例内容,主要是利用二维数组的特点以及循环的结合来实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值