JavaBase综合题型 Java基础&综合提升

目录

一、利用Java语法案例实现(综合提升)

         1.题目要求:与电脑猜拳游戏(判断胜负)

         2. 题目要求:编写一个程序,要求用户输入今天星期几(int),根据用户的输入判断是工作日还是周末,并显示合适的问候语。如果输入的数字不在1~7之间,显示“日子过懵了吧?”,如果输入数字为6或7, 显示“周末愉快”,如果输入数字1-5,显示“工作日愉快”

        3.题目要求:系统界面

        4.输入一个成绩,根据不同的条件来判断等级  

                     4.1 第一种方式if与switch的结合(简洁版): 

                              4.2 第二种:通过if来设置范围并用设置变量(记号)用来表示,再使用switch来输出(繁琐版)

        5.    求1~100偶数和

                       5. 1 求1-100的奇数和

        6.编写基本流程的万年历

                7. 打印菱形

        8.判断100-200之间有多少个素数,并输出所有素数。所谓素数表示该数只能被1和本身整除

        9. 求10!

        10.百元买百鸡问题:公鸡每只5元,母鸡每只3元,小鸡每3只1元;

        11.  循环输入字符串,将这些输入的字符串都连接起来,直到输入的字符串为“esc”就结束循环,最后显示这个连接起来的字符串。提示"" 不区分大小写 退出的位置问题

        12.循环 输入5个学生的成绩,   求出最高分和最低分

        13.定义一个长度为5的字符串数组。循环输入5个姓名。然后再输入一个用户的姓名,检查数组中是否有这个人的姓名,并输出所在下标。

 14.定义一个长度为10的整型数组,并且为其赋值,将其奇数位的数值与偶数位的数值进行交换;并将其用foreach输出

        15.求斐波拉契数列前21项:

16.如何做到随机抽取学员姓名

        17.  (挑战题)定义一个长度为10的整型数组,循环输入10个整数。然后判断这个数组中有几个偶数,再定义一个正好能存放这几个偶数的数组,将上一个数组中的所有偶数复制过来。最后循环输出这些偶数。

        18. 求10-50之间的完数

        19.定义一个8*8的二维数组,求对角线的和(坐标相同)

二、综合总结


一、利用Java语法案例实现(综合提升)

         1.题目要求:与电脑猜拳游戏(判断胜负)

                1.1 第一种方式(if嵌套):

//第一种方式:
         //电脑(1  2   3)石头    剪刀   布
        Random rd = new Random();
        //电脑随机产生一个1-3之间的数字  分别代表石头  剪刀  布
        int dn = rd.nextInt(3)+1;//1-3
        //通过扫描器让用户输入指定的数字(1-3)
        Scanner sc = new Scanner(System.in);
        System.out.println("请出拳(1.石头 2.剪刀 3.布)");
        int yh = sc.nextInt();
        //判断
        if(yh == 1) {//用户输入的是1  1代表石头
            //电脑3种情况
            if(dn == 1) {
                System.out.println("用户出的是1(石头),电脑出的是1(石头),结果:平局");
            }else if(dn == 2) {
                System.out.println("用户出的是1(石头),电脑出的是2(剪刀),结果:用户赢");
            }else if(dn == 3) {
                System.out.println("用户出的是1(石头),电脑出的是3(布),结果:电脑赢");
            }
        }else if(yh == 2) {
            //电脑3种情况
            if(dn == 1) {
                System.out.println("用户出的是2(剪刀),电脑出的是1(石头),结果:电脑赢");
            }else if(dn == 2) {
                System.out.println("用户出的是2(剪刀),电脑出的是2(剪刀),结果:平局");
            }else if(dn == 3) {
                System.out.println("用户出的是2(剪刀),电脑出的是3(布),结果:用户赢");
            }
        }else if(yh == 3) {
            //电脑3种情况
            if(dn == 1) {
                System.out.println("用户出的是3(布),电脑出的是1(石头),结果:用户赢");
            }else if(dn == 2) {
                System.out.println("用户出的是3(布),电脑出的是2(剪刀),结果:用电脑赢");
            }else if(dn == 3) {
                System.out.println("用户出的是3(布),电脑出的是3(布),结果:平局");
            }
        }else {
            System.out.println("出拳失败,不符合要求~请重新运行程序进行猜拳");

        总结:采用了if嵌套,主要思路是分析所有的结果,整理逻辑,套用合适的结构即可。 

                1.2 第二种方式(switch与if结合):


//第二种方式:

一把出拳游戏,跟电脑猜拳(switch)
        //Scanner  Random的结合使用  用户:Scanner  电脑:Random
        Random rd = new Random();
        int dn = rd.nextInt(3);// 0 1 2
        // 用户输入
        Scanner sc = new Scanner(System.in);
        System.out.println("请出拳:(0-石头 1-剪刀 2-布)");
        int yh = sc.nextInt();
        if (yh >= 0 && yh <= 2) {
            switch (yh) {
            case 0:
                if (dn == 0) {
                    System.out.println("用户出得是石头(0),电脑出得是石头(0),即平局");
                } else if (dn == 1) {
                    System.out.println("用户出得是石头(0),电脑出得是剪刀(1),即用户赢");
                } else {
                    System.out.println("用户出得是石头(0),电脑出得是布(2),即电脑赢");
                } // 最后是否还需要使用else if==>不需要 随机器所产生的数字是固定范围
                    // 中断程序
                break;
            case 1:
                if (dn == 0) {
                    System.out.println("用户出得是剪刀(1),电脑出得是石头(0),即电脑赢");
                } else if (dn == 1) {
                    System.out.println("用户出得是剪刀(1),电脑出得是剪刀(1),即平局");
                } else {
                    System.out.println("用户出得是剪刀(1),电脑出得是布(2),即用户赢");
                } // 最后是否还需要使用else if==>不需要 随机器所产生的数字是固定范围
                    // 中断程序
                break;
            case 2:
                if (dn == 0) {
                    System.out.println("用户出得是布(2),电脑出得是石头(0),即用户赢");
                } else if (dn == 1) {
                    System.out.println("用户出得是布(2),电脑出得是剪刀(1),即电脑赢");
                } else {
                    System.out.println("用户出得是布(2),电脑出得是石头(2),即平局");
                } // 最后是否还需要使用else if==>不需要 随机器所产生的数字是固定范围
                    // 中断程序
                break;
            }
        } else {
            System.out.println("您的出拳不符合要求~请重新运行后再次出拳进行比赛。");
        }

         总结:以用户为第一视角利用switch结构和if结构,分别分析用户不同的出拳结果情况所对应的电脑出拳情况,进行相对应的结论判定。条件语句有两种:if        switch。

         2. 题目要求:编写一个程序,要求用户输入今天星期几(int),根据用户的输入判断是工作日还是周末,并显示合适的问候语。如果输入的数字不在1~7之间,显示“日子过懵了吧?”,如果输入数字为6或7, 显示“周末愉快”,如果输入数字1-5,显示“工作日愉快”

    Scanner sc = new Scanner(System.in);
        System.out.println("请输入今天星期几: ");
        String week = sc.nextLine();
        // 学习了逻辑运算符 && || !
        if ("星期一".equals(week) || "星期二".equals(week) || "星期三".equals(week) || "星期四".equals(week)
                || "星期五".equals(week)) {
            System.out.println("工作日愉快");
        } else if ("星期六".equals(week) || "星期日".equals(week)) {
            System.out.println("周末愉快");
        } else {
            System.out.println("日子过懵了吧~");
        }

        总结:采用String类型存储中文符号,利用if结构,再利用条件运算符的equals。

        3.题目要求:系统界面

     // 利用if语句结构开发系统选择界面
        // (1代表算加法 2代表算减法 3代表算乘法 4代表算求整 5计算闰年 6代表猜数字游戏)
        System.out.println("******** 欢迎进入276小网站系统 ***********\n");
        System.out.println("************功能1:加法运算 ************");
        System.out.println("************功能2:减法运算 ************");
        System.out.println("************功能3:乘法运算 ************");
        System.out.println("************功能4:求整运算 ************");
        System.out.println("************功能5:闰年运算 ************");
        System.out.println("************功能6:猜数字游戏***********");
        System.out.println("选项(1-6)代表不同的程序功能,请进行选择操作");

        // 立刻要使用扫描器进行输入不同的数字去选择不同的功能了~
        Scanner sc = new Scanner(System.in);
        System.out.println("请您进行选择功能:(1-6)");
        int num = sc.nextInt();// 有没有必要判断num是否在1-6之间。
        if (num >= 1 && num <= 6) {
            // 满足该条件后才能使用该网站上的功能
            if (num == 1) {
                System.out.println("***-_-您选择的是加法运算功能-_-***");
                System.out.println("请输入第一个数字: ");
                int a1 = sc.nextInt();
                System.out.println("请输入第二个数字: ");
                int b1 = sc.nextInt();
                int c1 = a1 + b1;
                System.out.println("通过加法运算功能得到2个数字的和为: " + c1);
            } else if (num == 2) {
                System.out.println("***-_-您选择的是减法运算功能-_-***");
                System.out.println("请输入第一个数字: ");
                int a2 = sc.nextInt();
                System.out.println("请输入第二个数字: ");
                int b2 = sc.nextInt();
                int c2 = a2 - b2;
                System.out.println("通过减法运算功能得到2个数字的差为: " + c2);
            } else if (num == 3) {
                System.out.println("***-_-您选择的是乘法运算功能-_-***");
                System.out.println("请输入第一个数字: ");
                int a3 = sc.nextInt();
                System.out.println("请输入第二个数字: ");
                int b3 = sc.nextInt();
                int c3 = a3 * b3;
                System.out.println("通过乘法运算功能得到2个数字的积为: " + c3);
            } else if (num == 4) {
                System.out.println("***-_-您选择的是求整运算功能-_-***");
                System.out.println("请输入第一个数字: ");
                int a4 = sc.nextInt();
                System.out.println("请输入第二个数字: ");
                int b4 = sc.nextInt();
                int c4 = a4 / b4;
                System.out.println("通过求整运算功能得到2个数字的商为: " + c4);
            } else if (num == 5) {
                System.out.println("***-_-您选择的是闰年运算功能-_-***");
                System.out.println("请输入一个年份: ");
                int year = sc.nextInt();
                // 求闰年的标准:4年一闰 百年不闰 四百年一闰
                if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                    System.out.println(year + "年是闰年");
                } else {
                    System.out.println(year + "年是平年");
                }
            } else if (num == 6) {
                System.out.println("***-_-您选择的是猜数字游戏运算功能-_-***");
                // 通过随机数产生一个指定范围的数字
                Random rd = new Random();
                int sj = rd.nextInt(10) + 1;
                System.out.println("请输入一个1-10之间的数字进行猜测: ");
                int yh = sc.nextInt();
                if (yh >= 1 && yh <= 10) {
                    if (yh == sj) {
                        System.out.println("恭喜中奖500万");
                    } else {
                        System.out.println("很遗憾~未中奖;电脑产生的数字是: " + sj);
                    }
                } else {
                    System.out.println("您输入的数字超出范围~请重新运行程序进行猜测");
                }
            }
        } else {
            System.out.println("该选项功能尚未开发~敬请期待!!!");
        }

        总结:创建输入器Scanner去接收数据,然后通过if来进行判断,if结构输出条件,在条件内可以再输出其它的运算逻辑。也可以用swicth结构。

        4.输入一个成绩,根据不同的条件来判断等级  

                     4.1 第一种方式if与switch的结合(简洁版): 

   Scanner sc = new Scanner(System.in);
                System.out.println("请输入一个成绩: ");
                int s = sc.nextInt();
                if (s >= 0 && s <= 100) {
                    switch (s / 10) {
                    // 输出100 10
                    case 10:
                    case 9:
                        System.out.println("等级A");
                        break;
                    case 8:
                    case 7:
                        System.out.println("等级B");
                        break;
                    case 6:
                        System.out.println("等级C");
                        break;
                        case 5:
                            default:
                            System.out.println("等级D");
                        break;
                            }
            }else{    System.out.println("输入数据错误,请重新输入!");
            
            }    

            4.2 第二种:通过if来设置范围并用设置变量(记号)用来表示,再使用switch来输出(繁琐版)

   Scanner sc = new Scanner(System.in);

            System.out.println("请输入一个成绩: ");
            int s = sc.nextInt();
        if (s >= 0 && s <= 100) {
            // 通过标记(记号)去实现。 一个人去原始森林 怕迷路 在树上画一个记号。
            int sb = 0;// 定义一个变量保存每一个区间的记号(1.90-100 2.70-90 3.60-70 4.60一下)
            if (s >= 90) {
                sb = 1;// 1---90-100之间的任意一个数字
            } else if (s >= 70) {
                sb = 2;
            } else if (s >= 60) {
                sb = 3;
            } else {
                sb = 4;
            }
            // 判断记号就可以知道输入的成绩是处于哪一个区间范围
            switch (sb) {
            case 1:
                System.out.println("等级A");
                break;
            case 2:
                System.out.println("等级B");
                break;
            case 3:
                System.out.println("等级C");
                break;
            case 4:
                System.out.println("等级D");
                break;
            }

        } else {
            System.out.println("您录入的成绩不符合要求,请重新运行程序进行录入~");
        }

总结:利用if和switch结构的穿透性优化代码。

        5.    求1~100偶数和

     int sb = 2;
       int sum2 = 0;//总和
        while(sb<=100) {
            sum2+=sb;
            sb+=2;
        }
       System.out.println("sum2 = "+sum2);
//5.1 简写  每次循环  变量+2

                       5. 1 求1-100的奇数和

    int i = 1;
        int sum= 0;
        while(i<=100) {
            if(i%2==1) {//奇数条件
                System.out.println(i);
                sum+=i;
            }
            i++;
        }
        System.out.println("sum的结果为: "+sum);

        总结:循环主要参考其思维方式(+=)。循环有三种:1.while        2.dowhile        3.for。

        6.编写基本流程的万年历

// 输入一个年份和月份打印对应的日历格式。
        //1.固定的日历格式的打印
        //2.每个月的1号是星期几
        //3.根据②得知,求出星期几就跨几个空格。
        
        
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个年份: ");
        int year = sc.nextInt();
        System.out.println("请输入一个月份: ");
        int month = sc.nextInt();
        
        
        //求出每个月的第一天究竟是星期几?
        int sumDay = 0;//保存总天数
        //①计算与1900年之间相差的天数---注意一个问题。保证每个年份都需要判断是否为闰年,  year--->当前的年份
        for(int i = 1900;i<year;i++) {
            sumDay+=365;
            if(i%4==0&&i%100!=0||i%400==0) {
                sumDay++;
            }
        }
        //②求出月份之间相差的天数
        for(int i = 1;i<month;i++) {
            if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) {
                sumDay+=31;
            }else if(i==4||i==6||i==9||i==11) {
                sumDay+=30;
            }else if(i==2) {
                sumDay+=28;
                //判断
                if(year%4==0&&year%100!=0||year%400==0) {
                    sumDay++;
                }
            }
        }
        //③加上下一个月的第一天
        sumDay++;
        //④取模7余下几就是星期几
        int week = sumDay % 7;
        System.out.println("星期"+week);
        
        int month_to_day = 0;
        //根据month求出该月的具体天数
        if(month == 1||month==3||month==5||month ==7||month == 8||month==10||month==12) {
            month_to_day=31;
        }else if(month == 4||month==6||month==9||month ==11) {
            month_to_day=30;
        }else if(month == 2) {
            month_to_day=28;
            if(year%4==0&&year%100!=0||year%400==0) {
                month_to_day++;
            }
        }
        System.out.println(year+"年"+month+"月,这个月有: "+month_to_day+"天");
        //打印固定的日历格式(外国人的显示方式)
        System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
        //求出每个月的第一号是星期几  得到规律后  就跨相对应的空格
        for(int i = 1;i<=week;i++) {
            System.out.print("\t");
        }
        
        for(int i = 1;i<=month_to_day;i++) {
            System.out.print(i+"\t");
            if((week+i)%7==0) {
                System.out.println();
            }
            
        }

        总结:考虑到的因素:闰年与平年、格式的打印以及数据的对其方式、空格的对齐,以及一些基本信息的掌握。

        7. 打印菱形

                         如图所示:
                                                    *
                                                   ***
                                                  *****
                                                 *******
                                                  *****
                                                   ***
                                                    *

                        手动输入版本:

    Scanner sc = new Scanner(System.in);
        System.out.println("请输入菱形的行数: ");
        int line = sc.nextInt();
        // 判断 目的:为了保证输入的数字永远都是奇数。
        if (line % 2 == 0) {// 输入的数字是偶数
            System.out.println("由于您输入的数字是偶数,请进行选择 ①加1行 ②减1行");
            int num = sc.nextInt();//
            if (num == 1) {// 加1行
                line++;
                System.out.println("您选择的是加1行,所以最终菱形的行数是: " + line + "行");
            } else {// 减1行
                line--;
                System.out.println("您选择的是减1行,所以最终菱形的行数是: " + line + "行");
            }
        } else {
            System.out.println("您输入的数字是奇数,满足要求。所以最终菱形的行数是: " + line + "行");
        }

        // 将菱形分为2部分去打印
        // 上部分 一半 +1
        for (int i = 1; i <= line / 2 + 1; i++) {
            // 空格 的规律 4 3 2 1 0
            for (int m = 1; m <= 5 - i; m++) {
                System.out.print(" ");
            }
            // 星星的个数规律 1 3 5 7 9.... 2*n-1
            for (int j = 1; j <= 2 * i - 1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        // 下部分 1半
        for (int i = 1; i <= line / 2; i++) {
            // 空格的规律 1 2 3 4
            for (int m = 1; m <= i; m++) {
                System.out.print(" ");
            }
            // 星星的规律 7 5 3 1
            for (int j = 1; j <= line - 2 * i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }

        总结:采用分层把菱形分成两个三角形,找规律在进行拼合。利用循环+规律

        8.判断100-200之间有多少个素数,并输出所有素数。所谓素数表示该数只能被1和本身整除

    int count = 0;
        for(int i = 100;i<=200;i++) {//100-200
            boolean f = true;//假设每一个i都是素数
            //验证,每个i是否为素数
            for(int j = 2;j < i;j++) {
                if(i % j == 0) {//说明i不是素数
                    f = false;//假设推翻
                    break;
                }
            }
            if(f == true) {
                System.out.println(i+"是素数");
                count++;
            }
            
        }
        System.out.println("素数的总个数: "+count);

        总结:利用布尔值来进行一个判断,通过素数的性质来进行条件判断。

        9. 求10!

                  第一种写法:   

 // 1!+2!+3!+4!+....+10!=?
		       //  10! = 9! * 10 9! = 8! * 9
		   int mySum = 0;
		   for(int m = 1;m<=10;m++) {//m-->循环的数字的个数  1-10
		            int sum = 1;
		            for (int i = 1; i <= m; i++) {//每每个数字的阶乘
		                sum = sum * i;
		            }
		            System.out.println(m+"的阶乘是: "+sum);
		            mySum += sum;
		        }
		        System.out.println("总和为: "+mySum);
	}

                    第二种写法:

                 int sum = 1;//阶乘和
		        int mySum = 0;//求总和
		        for(int i = 1;i<=10;i++) {
		            //10的阶乘 = 9! * 10
		            sum = sum * i;
		            System.out.println(i+"的阶乘是: "+sum);
		         //   i = 1  求1的阶乘       结果保存在sum中
		           // 需要将1的阶乘  追加到mySum中即可。
		            mySum+=sum;
		        }
		        System.out.println("总和为: "+mySum);

总结:利用规律for循环结构来进行运算。

        10.百元买百鸡问题:公鸡每只5元,母鸡每只3元,小鸡每3只1元;

//		        一百元买一百只鸡,要求三种鸡都要买,有多少种购买组合?
//		        记住一个事情:  100元----100只鸡  
//		        设x只公鸡,y只母鸡,z只小鸡
//		        x+y+z = 100;只数
//		        x*5 +y*3 + z/3 = 100;100元
		        
//		        程序问题:
//		        公鸡 1   母鸡买的范围----》最多能买31只
//		        母鸡1    公鸡买的额范围---》最多能买19只
//		        公鸡买1只  母鸡买1只   情况     小鸡----》96只
//		        
//		        公1  母1  3  6   9   12...96
//		        公1  母2   3  6   9   12...96
		        int count = 0;
		        for(int i = 1;i<=19;i++) {//i代表的公鸡的个数(1-19)
		            for(int j = 1;j<=31;j++) {//j代表的是母鸡的个数(1-31)
		                for(int m = 3;m<=96;m+=3) {//m代表的是小鸡的个数(3-96)3的倍数
		                    //个数必须是100只
		                    int gs = i+j+m;
		                   // 价格必须是100粤安
		                    int jq = 5*i+3*j+m/3;
		                    if(gs == 100 && jq == 100) {
		                        System.out.println("组合---公鸡的个数: "+i+"只,母鸡的个数: "+j+",小鸡的个数: "+m);
		                        count++;
		                    }
		                }
		            }
		        }
		        
		        System.out.println("\t组合: "+count+"种情况");

        总结:考虑到各种情况,利用合适的方式语法来进行判断。

        11.  循环输入字符串,将这些输入的字符串都连接起来,直到输入的字符串为“esc”就结束循环,最后显示这个连接起来的字符串。提示"" 不区分大小写 退出的位置问题

  比如:输入abc      输入def        输入Esc
             就输出abcdef*/
        //用来保存所有字符串的的变量
        String b ="";
        Scanner sc =new Scanner(System.in);
        System.out.println("欢迎进入本人开发的小程序,本程序可以对字符串进行一个整合。");
        //通过死循环多次输出所要输出的字符串
        while(true) {

        System.out.println("请输入字符串,输入Esc退出,不区分大小写,请输入:");
        //不区分大小写的语法:     .equalsIgnoreCase
        String a =sc.nextLine();
        if("esc".equalsIgnoreCase(a)) {
            break;
        }
        b+=a;
        }
        System.out.println("你刚才输入的字符串进行整合的结果是:"+b);

        总结:这个需要进行一些新的尝试,例如String类型的存储其它的数据,再利用break的中断结束掉死循环,  .equalsIgnoreCase不区分大小写。

        12.循环 输入5个学生的成绩,   求出最高分和最低分

  int[] scores = new int[5];
		        for(int i = 0;i<scores.length;i++) {
		            System.out.println("请输入第"+(i+1)+"个学生的成绩: ");
		            int s = sc.nextInt();
		            scores[i] = s;
		        }
		        //假设法  
		        //打擂台的思想---假设数组中的第一个元素是最大值或者最小值
		        int max = scores[0];
		        int min = scores[0];
		        for(int i = 1;i<scores.length;i++) {
		            if(max < scores[i]) {
		                max = scores[i];
		            }
		            if(min > scores[i]) {
		                min = scores[i];
		            }
		        }
		        System.out.println("最大值是: "+max);
		        System.out.println("最小值是: "+min);

        总结:利用假设法,假设最大值最小值是数组中的第一个元素,通过if来进行对比,比最大值大的数就给它重新赋值进去,最小值也是一样的道理。

        13.定义一个长度为5的字符串数组。循环输入5个姓名。然后再输入一个用户的姓名,检查数组中是否有这个人的姓名,并输出所在下标。

   String[] names= {"张三","李四","王老五","张远山","宋青青"};
		        Scanner sc = new Scanner(System.in);
		        boolean flag = false;//假设没有找到
		        System.out.println("亲输入一个姓名: ");
		        String name = sc.next();
		        //遍历输出数组中所有的元素
		        for(int i= 0;i<names.length;i++) {
		            System.out.println(names[i]);
		            if(names[i].equals(name)) {//成立
		                flag = true;
		                //说数组中有这个名字
		                System.out.println(name+"这个人在数组中的第"+(i+1)+"个位置,下标是: "+i);
		                break;
		            }
		        }
		        if(flag == false) {进行优化   !flag
		            System.out.println("没有这个鬼");
		        }

        总结:利用boolean的假设法来避免循环的途中没必要的循环条件 

         14.定义一个长度为10的整型数组,并且为其赋值,将其奇数位的数值与偶数位的数值进行交换;并将其用foreach输出

         int[] arr = {11,22,33,44,55,66,77,88,99,100};
                System.out.println("交换前: "+Arrays.toString(arr));
                
                arr[0]----arr[1]
                arr[2]----arr[3]
                arr[4]----arr[5]
                for(int i = 0;i<arr.length;i++) {
                    if(i%2==0) {
                        int temp = 0;
                        temp = arr[i];
                        arr[i] = arr[i+1];
                        arr[i+1] = temp;
                    }
                }
                System.out.println("交换后: "+Arrays.toString(arr));

                
                for(int i = 0;i < arr.length/2;i++) {
                    i = 0 1 2 3 4
                    i = 0     arr[0]    2*i   arr[1]      i*2+1
                    i = 1     arr[2]      2*i   arr[3]    i*2+1
                    i = 2     arr[4]       2*i  arr[5]    i*2+1
                    int temp = 0;
                    temp = arr[2*i];
                    arr[2*i] = arr[2*i+1];
                    arr[2*i+1] = temp;
                }
                System.out.println("交换后: "+Arrays.toString(arr));

         总结:利用中间商的思想来进行数据转换。

        15.求斐波拉契数列前21项:

    //1,1,2,3,5,8,13,21,34......
		        int[] arr = new int[21];
		        arr[0] = 1;
		        arr[1] = 1;
		        for(int i = 2;i<arr.length;i++) {
		            arr[i] = arr[i-2]+arr[i-1];
		            System.out.println(arr[i]);
		        }
		        arr[2] = arr[0]+arr[1];2
		        arr[3] = arr[1]+arr[2];3
		        arr[20] = arr[18]+arr[19];
		        arr[n] = arr[n-2]+arr[n-1];

        总结:找到规律,定义初始化的值,利用规律进行赋值。

16.如何做到随机抽取学员姓名

 Random rd = new Random();
		        String[] names = {"小哈","小呵","小嘻","小青","小小","小笑",
"大大","潇潇","晓晓","肖肖","唐瑞"};
		        for (int i = 0; i < 3; i++) {
		            //随机产生3个随机数 ---随机数不要超过数组的范围
		            int sj = rd.nextInt(names.length);
		            System.out.println("随机姓名: "+names[sj]);
		        }

        总结:随机器只能产生数字,利用数组的下标特性,数组保存名字,随机数字代表小标即可。

        17.  (挑战题)定义一个长度为10的整型数组,循环输入10个整数。然后判断这个数组中有几个偶数,再定义一个正好能存放这几个偶数的数组,将上一个数组中的所有偶数复制过来。最后循环输出这些偶数。

     
        //定义一个长度为10的整型数组,循环输入10个整数。
        int[] arr = {11,22,33,44,55,66,77,88,99,100};
        int count = 0;//统计偶数的个数
        for(int i = 0;i<arr.length;i++) {
            //然后判断这个数组中有几个偶数
            if(arr[i] % 2 == 0) {
                count++;
            }
        }
        System.out.println("偶数的个数count = "+count);
        //再定义一个正好能存放这
        //        几个偶数的数组
        int[] copy = new int[count];
        //将上一个数组中的所有偶数复制过来。
        //定义一个变量来控制新数组的下标,赋值一个后,下标++  下一个
        int index = 0;
        //要想将偶数进行复制,先获取所有偶数
        for(int i = 0;i<arr.length;i++) {
            if(arr[i] % 2 == 0) {
                //直接将求出来的偶数赋值到新数组吗?
                //copy数组的下标最大值是4  i = 9
                copy[index]= arr[i];
                //下一个
                index++;
            }
        }
        System.out.println("新数组如下: ");
        for (int i : copy) {
            System.out.println(i);
        }

        总结:利用计数器来当做数组存储偶数的个数,再通过for循环if来判断之前保存数组中的偶数,设置一个计数器来当做偶数数组的下标来进行存储,每一次+1,这道题目最大的问题就是超过数据的长度。

        18. 求10-50之间的完数

               完数:这个数字的所有因子之和 等于本身  就是一个完数。
               因子:公约数?      这个因子(数字)能被提供的数字整除,说明该数字就是因子,
               12 --->因子有哪些? 1 2 3 4 6
               28---->因子有哪些? 1 2 4 7  14    1-27

            for(int num = 10;num<=1000;num++) {
		            int sum = 0;//求和
		            for(int i = 1;i < num ; i++) {28之前的27个数字1-27
		                //判断因子
		                if(num % i == 0) {
		                    System.out.println(i);
		                    sum = sum + i;
		                }
		            }
		            //判断sum 与 数字 num是否相等
		            if(sum == num) {
		                System.out.println(num+"这个数字就是一个完数");
		            }
		        }

        总结:了解因数的概念,利用sum与因数的特性即可,sum必须放在里面。

        19.定义一个8*8的二维数组,求对角线的和(坐标相同)

                int [][]a=new int [8][8] ;
                 a[0]=new int[]   {1,2,3,4,34,43,5,5};
                 a[1]=new int[]    {4,65,0,7,7,7,7,87};
                 a[2]=new int[]    {4,6,5,6,76,87,87,9};
                 a[3]=new int[]    {4,6,5787,3,2,2,31,7};
                 a[4]=new int[]    {45,5,7,6,7,8,87,89};
                 a[5]=new int[]    {2,5,3,6,47,4,3,4};
                 a[6]=new int[]    {6,3,3,7,8,3,4,7};
                 a[7]=new int[]    {325,76,76,87,52,432,432,56};
        
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
            System.out.print(a[i][j]+" ");
            }
            System.out.println();
        }
        int sum=0;
        for(int i =0;i<a.length;i++) {
            sum+=a[i][a.length-i-1]+a[i][i];
        }
        System.out.println("对角线的和为:"+sum);

        总结:求对角线两边的意思。

二、综合总结

        运用思想:学以致用,灵活变通,大胆尝试,多多实践 ,理智思考,逐步分析,细心耐心。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值