循环过后就是嵌套循环了,这一篇讲几个练习题。
概念
嵌套循环:一个循环作为另外一个循环的循环体。循环中包含了其他的循环。
特点:外层循环迭代一次,内层循环执行一遍。
内层循环循环体执行的次数 ,等于 各层循环执行的次数的乘积。
**打印,矩形,平行四边形,等腰三角形
打印,矩形,平行四边形,等腰三角形
//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);
}
}
}