查看: 97|回复: 1

Java——循环案例代码详解

[复制链接]

2

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-12-28 14:02:49 | 显示全部楼层 |阅读模式
目录

案例一

实现双色球的彩票功能。规则:从36个红球中随机选择不重复的6个数,从15个篮球中随机选择1个组成一注彩票。可以选择买多注。
public static void main(String[] args) {

        Scanner sc=new Scanner(System.in);
        System.out.println("请选择买几注:");
        int duoZhu=sc.nextInt();

        //多注彩票号码循环
        for (int k = 1; k <= duoZhu; k++) {

            //定义一个int数组,来存放7个彩票号码;
            int[] redNums=new int[7];
            boolean repeat=false;

            //36个红球中随机出6个不同数字的循环
            for (int i = 0; i <6; i++) {

                //存到数组中去
                redNums=(int)(Math.random()*35+1);
                if(i>0){
                    for (int j = 0; j < i; j++) {
                        //新获取的随机数跟数组中已有的随机数作比较,得到repeat的bool值
                        if(redNums==redNums[j]){
                            repeat=true;
                            break;
                        }
                    }
                }

                //如果repeat=true;说明有重复的,则需要重新产生随机数
                if(repeat==true){
                    redNums=(int)(Math.random()*35+1);
                }
            }

            //数组中的第七个数从篮球的15个中随机产生
            redNums[6]=(int)(Math.random()*14+1);
            System.out.println("您的第"+k+"注彩票号码为:");

            //循环打印出七个彩票号码
            for (int i = 0; i < redNums.length; i++) {
                System.out.print(redNums+"\t");
            }
            System.out.println();
        }
    }运行效果:



案例二

输出一个整数的二进制数、八进制数、十六进制数。
public static void main(String[] args) {

        String numS1="";
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int num=sc.nextInt();
        System.out.println("这个整数的二进制数:");
        for (int i = num; i > 0; i/=2) {
            numS1=i%2+numS1;
        }
        System.out.println(numS1);

        //打印完二进制后,清空numS1的内容
        numS1="";
        System.out.println("这个整数的八进制数:");
        for (int i = num; i > 0; i/=8) {
            numS1=i%8+numS1;
        }
        System.out.println(numS1);

        //打印完二进制后,清空numS1的内容
        numS1="";
        System.out.println("这个整数的十六进制数:");
        String s16="";
        System.out.println("这个整数的八进制数:");
        for (int i = num; i > 0; i/=16) {
            int z16=i%16;
            switch (z16) {
            case 10:
                s16="A";
                break;
            case 11:
                s16="B";
                break;
            case 12:
                s16="C";
                break;
            case 13:
                s16="D";
                break;
            case 14:
                s16="E";
                break;
            case 15:
                s16="F";
                break;
            default:
                s16=String.valueOf(z16);
                break;
            }
            numS1=s16+numS1;
        }
        System.out.println(numS1);
    }运行效果:



案例三

随机产生一个字符,判断:如果为大写字母则输出“大写字母”;如果为小写字母则输出“小写字母”;否则怎输出“其他字符”;
public static void main(String[] args) {

        char zm=(char)(Math.random()*('z'-'A')+'A');

        System.out.println(zm);

        if(zm>='A'&&zm<='Z'){
            System.out.println("大写字母");
        }else if(zm>='a'&&zm<='z'){
            System.out.println("小写字母");
        }else{
            System.out.println("其他字符");
        }
    }运行效果:







案例四

求两个整数的最大公约数和最小公倍数
解题思路:先求 最大公约数 ,用辗转相除法求,具体用法如下:
例如,求(319,377):
∵ 319÷377=0(余319)
∴(319,377)=(377,319);
∵ 377÷319=1(余58)
∴(377,319)=(319,58);
∵ 319÷58=5(余29)
∴ (319,58)=(58,29);
∵ 58÷29=2(余0)
∴ (58,29)= 29;
∴ (319,377)=29。
下面代码中的do循环操作就是用的此方法实现的。
最小公倍数:a,b的最大公约数记为(a,b)。关于最小公倍数与最大公约数,我们有这样的定理:(a,b)x[a,b]=ab(a,b均为整数)。
public static void main(String[] args) {

        Scanner sc=new Scanner(System.in);
        System.out.println("请输入两个整数:\n第一个整数:");
        int num1=sc.nextInt();
        System.out.println("第二个整数:");
        int num2=sc.nextInt();
        int num1C=num1;
        int num2C=num2;
        int yuShu=0;

        //辗转相除法求得最大公约数
        do{
            yuShu=num2%num1;
            num2=num1;
            num1=yuShu;

        }while(yuShu!=0);
        System.out.println("最大公约数为:"+num2);
        System.out.println("最小公倍数为:"+(num1C*num2C)/num2);
    }运行效果:



案例五

将100元兑换为1元、5元、10元的零钱,请问有多少种兑换方法?
public static void main(String[] args) {

        int count=0;
        for (int i = 0; i <=100; i++) {
            for (int j = 0; j <= 100; j+=5) {
                for (int k = 0; k <= 100; k+=10) {
                    if(i+j+k==100){
                        count++;
                    }
                }
            }
        }
        System.out.println("将100元兑换为1元、5元、10元的零钱的兑换方法有"+count+"种。");
    }运行效果:


回复

使用道具 举报

4

主题

12

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2022-12-28 14:03:48 | 显示全部楼层
代码有问题吧 案例一 6个数随机的位置 重复了 再随机一次没问题 那如果第二次随机还是重复的怎么办?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表