Java——循环案例代码详解

150 阅读2分钟

目录

案例一

实现双色球的彩票功能。规则:从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[i]=(int)(Math.random()*35+1);
				if(i>0){
					for (int j = 0; j < i; j++) {
                        //新获取的随机数跟数组中已有的随机数作比较,得到repeat的bool值
						if(redNums[i]==redNums[j]){
							repeat=true;
							break;
						}
					}
				}

                //如果repeat=true;说明有重复的,则需要重新产生随机数
				if(repeat==true){
					redNums[i]=(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[i]+"\t");
			}
			System.out.println();
		}
	}

运行效果:

image.png

案例二

输出一个整数的二进制数、八进制数、十六进制数。

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);
	}

运行效果:

image.png

案例三

随机产生一个字符,判断:如果为大写字母则输出“大写字母”;如果为小写字母则输出“小写字母”;否则怎输出“其他字符”;

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("其他字符");
		}
	}

运行效果:

image.png

image.png

image.png

案例四

求两个整数的最大公约数和最小公倍数

解题思路:先求 最大公约数 ,用辗转相除法求,具体用法如下:

例如,求(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);
	}

运行效果:

image.png

案例五

将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+"种。");
	}

运行效果:

image.png