Java的嵌套循环

循环过后就是嵌套循环了,这一篇讲几个练习题。

概念
嵌套循环:一个循环作为另外一个循环的循环体。循环中包含了其他的循环。

特点:外层循环迭代一次,内层循环执行一遍。
内层循环循环体执行的次数 ,等于 各层循环执行的次数的乘积。

**打印,矩形,平行四边形,等腰三角形

打印,矩形,平行四边形,等腰三角形
//double loop
// 打印,矩形,平行四边形,等腰三角形
//    *  i==0  height-i-1
//   ***   i==1  2*i+1
//  *****    i==2
// *******     i==3

public class DoubleLoop{
	public static void main(String[] args){
		//外层控制打印的行数  内层控制一行打印的内容。
		final int MIN = 13;
		final int MAX = 18;
		
		int width = (int)(Math.random()*(MAX-MIN)+MIN);
		int height = (int)(Math.random()*(MAX-MIN)+MIN);
		
		System.out.println("width = "+width + "\theight = "+height);
		for(int i=0;i<height;i++){
			for(int j=0;j<width;j++){
				System.out.print("* ");
			}
			System.out.println();
		}
		System.out.println();
		//平行四边形
		for(int i=0;i<height;i++){
			//打印若干个空格
			for(int j=0;j<height-i-1;j++){
				System.out.print(" ");
			}
			for(int j=0;j<width;j++){
				System.out.print("* ");
			}
			System.out.println();
		}
		System.out.println();
		//等腰三角形
		for(int i=0;i<height;i++){
			//打印若干个空格
			for(int j=0;j<height-i-1;j++){
				System.out.print(" ");
			}
			for(int j=0;j< 2*i+1;j++){
				System.out.print("*");
			}
			System.out.println();
		}
		
		
	}
}






//菱形下半部分倒置的等腰三角形
		for(int i=0;i<height;i++){//外层循环控制打印的行数
			for(int j=0;j<i;j++){//打印若干个空格
				System.out.print("  ");
			}
			if(i > 0){
				for(int j=0;j<height*2-1-2*i;j++){//内层循环控制打印*  + \n
					System.out.print(" *");
				}
				System.out.print("\n");
			}
		}



//菱形下半部分倒置的等腰三角形
		for(int i=0;i<height;i++){//外层循环控制打印的行数
			for(int j=0;j<i;j++){//打印若干个空格
				System.out.print("  ");
			}
			if(i > 0){
				for(int j=0;j<height*2-1-2*i;j++){//内层循环控制打印*  + \n
					System.out.print(" *");
				}
				System.out.print("\n");
			}
		}

素数

素数:只能被1和自身整除的数。又叫质数。
1 既不是素数也不是合数。

求2–100以内的所有的素数:

// 求2–100以内的所有的素数:

public class DoubleLoop1{
	public static void main(String[] args){
		

    	for(int i=2;i<=100;i++){
    			//对i 逐个进行判断,是否满足i 是素数的条件
    			//对于任意一个 i  在 [2~i-1] 在这个区间内,做余操作,都会产生余数。
    			boolean flag = false;//标志位
    			for(int j=2;j<=i-1;j++){
    				if(i % j == 0){
    					//说明i 是合数 结束 当前层循环
    					flag = true;
    					break;
    				}
    			}
    			//如果flag 还是false ,那么代表条件在整个内层循环中,都没有成立。素数
    			if(!flag){ 
    				System.out.println("i = "+i);
    			}
    		}
    
    	}
    }

百钱买百鸡

公鸡5块钱一只,母鸡 3钱 一只, 小鸡 一元三只 ,,100钱买100只鸡。有多少种组合。
今有鸡翁一,值钱伍;鸡母一,值钱三;鸡鶵三,值钱一。凡百钱买鸡百只,问鸡翁、母、鶵各几何?

//今有鸡翁一,值钱伍;鸡母一,值钱三;鸡鶵三,值钱一。凡百钱买鸡百只,问鸡翁、母、鶵各几何?

 public class DoubleLoop2{
    	public static void main(String[] args){
    		//列出所有的情况组合,满足条件的即是。
    		
    		for(int i = 0;i<20;i++){//公鸡的数量 cock
    			for(int j=0;j<=33;j++){//母鸡的数量  hen
    				for(int k = 0;k<=300;k+=3){//小鸡的数量 
    					if(i + j + k == 100 && i*5 + j * 3 + k/3 == 100){
    						System.out.println("i = "+i + "\tj = "+j+"\tk = "+k);
    					}
    				}
    			}
    		}
    		
    		
    		for(int i = 0;i<20;i++){//公鸡的数量 cock
    			for(int j=0;j<=33;j++){//母鸡的数量  hen
    				int k = 100 - i - j;
    					if(i*5 + j * 3 + k/3 == 100 && k%3 == 0){
    						System.out.println("i = "+i + "\tj = "+j+"\tk = "+k);
    					}
    				
    			}
    		}
    		
    	}
    }

九九乘法表


//九九乘法表
public class TestNine{
	public static void main(String[] args){
		final int ROW = 9;
		for(int i= 1;i <=ROW;i++){//外层控制行数
			for(int j=1;j<=i;j++){//一行的列数
				int value  = j*i;
				System.out.print(j+"*"+i+"="+value+" ");
			}
			System.out.println();
		}
		
	}
}



专卖店买衣服

需求:去专卖店买衣服,一共5家专卖店,每一家最多可以买3件衣服。在买衣服之前,可以选择  1 : 继续购买,2 : 去下一家专卖店, 3 :或者直接回家。
中间需要打印,进入第几家专卖店,买了第几件衣服。
最后打印,一共买了多少件衣服。

// 需求:去专卖店买衣服,一共5家专卖店,每一家最多可以买3件衣服。在买衣服之前,可以选择  1 : 继续购买,2 : 去下一家专卖店, 3 :或者直接回家。
// 中间需要打印,进入第几家专卖店,买了第几件衣服。
// 最后打印,一共买了多少件衣服。
import java.util.Scanner;
public class TestDoubleLoop2{
	public static void main(String[] args){
		int counter = 0;
		Scanner scanner = new Scanner(System.in);
		int choice = 0;
		//外层循环控制第几家店
		for(int i = 1;i<=5;i++){
			//
			System.out.println("**************欢迎进入第 "+ i +" 家店****************");
			for(int j=1;j<=3;j++){
				System.out.println("请您选择:【1:继续购买】,【2:去下一家】,【3:打道回府】");
				choice = scanner.nextInt();
				if(choice == 1){
					//什么都不需要做
				}else if(choice == 2){
					//结束内层循环
					break;
				}else if(choice == 3) {
					//结束内层+外层
					break;
				}

				//买衣服
				System.out.println("**************第 "+ i +" 家店买的第 "+ j +" 件衣服****************");
				counter ++;
			}
			if(choice == 3){//跳出外层
				break;
			}
		}
		
		System.out.println("一共买了 "+counter +" 件衣服!");
		
	}
}

决斗!

// 实现一场战斗
// 绿谷少年 vs  爆豪少年
// 每个英雄 赋值 初始血量 1000.
// 每个英雄 伤害随机
//  绿谷少年 damage[30-50] 暴击率30% 暴击加成 1.8倍
//  爆豪少年 damage [20-40] 暴击率50% 暴击加成 2倍

// 然后普通攻击和暴击要求不同的输出内容,输出本次伤害,和对方剩余的血量
// 一人一刀互相伤害
// 使用循环模拟两个人的一场战斗 
// while
// 最终输出结果。谁胜利了,剩余血量。

public class Battle{
	public static void main(String[] args) throws Exception{
		
		int aHp = 1000;
		int hHp = 1000;
		
		int counter = 1;
		
		while(true){
			System.out.println("\n***************第 "+counter ++ +" 局开始了****************");
			//互相伤害
			//爆豪少年攻击绿谷少年
			int damage = (int)(Math.random()*(41-20)+20);
			boolean isCritical = false;
			if(Math.random()<0.5){//50%
				isCritical = true;
			}
			
			if(isCritical){
				damage <<= 1;
				System.out.println("【爆豪少年】攻击了【绿谷少年】,产生了~~~暴击~~~~,暴击伤害为:"+damage);
			}else{
				System.out.println("【爆豪少年】攻击了【绿谷少年】,伤害为:"+damage);
			}
			Thread.sleep(300);
			aHp -= damage;
			if(aHp <= 0){
				aHp = 0;
				break;
			}
			
			//绿谷少年攻击爆豪少年
			isCritical = false;
			damage = (int)(Math.random()*(51-30)+30);
			if(Math.random()<0.3){//30%
				isCritical = true;
			}
			
			if(isCritical){
				damage *= 1.8;
				System.out.println("【绿谷少年】攻击了【爆豪少年】,产生了~~~暴击~~~~,暴击伤害为:"+damage);
			}else{
				System.out.println("【绿谷少年】攻击了【爆豪少年】,伤害为:"+damage);
			}
			Thread.sleep(300);
			hHp -= damage;
			if(hHp <= 0){
				hHp = 0;
				break;
			}
		}
		//打印谁最终胜利,剩余多少血量
		if(aHp > 0){
			System.out.println("绿谷少年胜利了,剩余血量为:"+aHp);
		}else{
			System.out.println("爆豪少年胜利了,剩余血量为:"+hHp);
		}
		
	}
}

练习题有点多,慢慢看。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值