javaSE基础知识(五)循环---while,do--while ,for,嵌套循环

定义:重复的执行某些代码

循环的分类

  1. while
  2. do -while
  3. for
  4. jdk1.5之后出现一个增强for 循环:for-each,后期数组详解

while

语法:

while(循环条件){
	//循环的主体代码
}
//循环条件:必须是一个boolean值的表达式

小练习:打印10次Helloworld

public class Test{
	public static void main (){
		final int MAX=10;
		//定义计数器
		int count=0;
		while(count<MAX){
			System.out.println("HelloWORLD");
			count++;
		}
	}
}
//1-100的累加和
public class Test{
//1-100的累加和
	public static void main(String[] args){
		int sum=0;
		int count=1;
		while (count<=100){
			sum=sum+count;
			count++;//迭代的位置要注意把握边界值
		}
		System.out.println(sum);
	}
	//1--100偶数相加
	public static void main (String[] args){
		int sum=0;
		counter=1;
		while(counter<=100){
		//按位与运算:同1则1,否则为0;按位非运算:同0为0,否则为1;
			if(counter&1==0){//也可用%取余
				sum+=counter;
			}
			counter++;
		}
		System.out.println(sum);
	}
}

do -while

语法:

do{
	//循环体
}while(循环条件);

小练习

public static void main(String[] args){
		int sum=0;
		int count=1;
		do{
			sum+=counter++
		}while (count<=100);
		System.out.println(sum);
	}
public class Test{
	public static void main(String[] args){
		final int MIN=10;
		final int MAX=901;
		int num=0;
	do{
		num=(int)(Math.random()*(MAX-MIN)+MIN);
	}while(!(num%7==0 && num%5==0));
	System.out.println(num);
	}
}

和电脑猜拳的游戏石头剪刀布,五局三胜
玩家先Scanner 输入选择 一个手势,电脑随机选择一个
打印选择的手势
比较结果,打印本局谁胜利了!
打印最终比分。
需要定义的常量
常量:石头,剪刀,布 最大胜利的场数 3
变量:电脑随机的选择,玩家输入的值,玩家胜利的次数,电脑胜利的次数

import java.util.Scanner;
public class Test{
	public static void main (String[] args){
	//定义常量
	final int STONE=1;
	final int SCISSORS=2;
	final int PAPER=3;
	
	final int MAX_WIN_COUNT=3;
	//定义变量
	int computer=0;
	int player=0;
	int computerWinNum=0;
	int playerWinNum=0;
	//局数
	int count=1;
	Scanner scanner =new Scanner(System.in);
	//循环的主体//电脑和玩家胜利的局数都小于最大胜利的局数
	while(playerWinNum<MAX_WIN_COUNT&&computerWinNum<MAX_WIN_COUNT){
	//打印本居开始
		System.out.println("*******第"+count+"场开始******");
		System.out.println("请输入您的手势;【1--石头】,【2--剪刀】,【3--布】");
		//玩家随机输入
		player=(int)scanner.nextInt();
		//判断输入错误
		while(player<STONE || player>PAPER){
			System.out.println("输入错误,请输入您的手势;【1--石头】,【2--剪刀】,【3--布】");
			player=(int)scanner.nextInt();
		}
		//电脑随机选择输入
		computer=(int)(Math.random()*(PAPER+1-STONE)+STONE);
		//打印玩家输入信息
		if(player==STONE){
			System.out.println("玩家选择了【石头】");
			}else if(player==SCISSORS){
				System.out.println("玩家选择了【剪刀】");
			}else if(player==PAPER){
				System.out.println("玩家选择了【布】");
			}
			//打印电脑选择结果
			switch(computer){
				case STONE:
					System.out.println("电脑选择了【石头】");
				break;
				case SCISSORS:
					System.out.println("电脑选择了【剪刀】");
				break;
				case PAPER:
					System.out.println("电脑选择了【布】");
				break;
			}
			//比较输出比较结果
			if(player==STONE){
				switch(computer){
				case STONE:
				System.out.println("【石头】对【石头】平局");
				break;
				case SCISSORS:
				System.out.println("【石头】对【剪刀】玩家胜利");
					playerWinNum++;;
				break;
				case PAPER:
				System.out.println("【石头】对【布】电脑胜利");
					computerWinNum++;
				break;
				}
			}else if(player==SCISSORS){
				switch(computer){
				case STONE:
				System.out.println("【剪刀】对【石头】电脑胜利");
					computerWinNum++;
				break;
				case SCISSORS:
				System.out.println("【剪刀】对【剪刀】平局");
				break;
				case PAPER:
				System.out.println("【剪刀】对【布】玩家胜利");
					playerWinNum++;
				break;
				}
			}else if(player==PAPER){
				switch(computer){
				case STONE:
				System.out.println("【布】对【石头】玩家胜利");
					playerWinNum++;
				break;
				case SCISSORS:
				System.out.println("【布】对【剪刀】电脑胜利");
				computerWinNum++;
				break;
				case PAPER:
				System.out.println("【布】对【布】平局");
				break;
				}
			}
			//打印当前比分
			System.out.println("当前比分:【玩家】vs【电脑】:"+playerWinNum+"vs"+computerWinNum);
			System.out.println("*******第"+count +"场结束******");
			count++;	
		}
		if(playerWinNum==MAX_WIN_COUNT){
			System.out.println("玩家胜利,当前总比分:【玩家】vs【电脑】:"+playerWinNum+"vs"+computerWinNum);
		}else{
			System.out.println("电脑胜利,当前比分:【电脑】vs【玩家】:"+computerWinNum+"vs"+playerWinNum);
		}
	}
}

//开开心心和电脑大战三百回合 

for 循环

语法:

for(循环条件初始化:循环条件:迭代){
	//循环体
}

练习
0-100的相加

public class Test{
	public static void main (String[] args){
		int sum=0;
		for(int i=1;i<=100;i++){
			sum+=i;
		}
		System.out.println(sum);
		//或者
		sum=0;
		int i=1;
		for(:i<=100:){
			sum+=i;
			i++;
		}
	}
}

//水仙花数,在100-999之间有几个这样的数,这三位数的每一位的三次幂之和等于该数本身,求这几个数

public class Test{
	public static void main (String[] args){
		for (int i=100;i<1000;i++){
			int unit=i % 10;
			int shiwei=i % 100 / 10;
			int baiwei=i / 100;
			int sum=unit*unit*unit+shiwei*shiwei*shiwei+baiwei*baiwei*baiwei;
			if(i==sum){
				System.out.println(sum);
			}
		}
	}
}

循环选择

  1. while :循环次数不确定,使用while(线程,io流)
  2. for:循环的次数是固定(容器,数组)

break; continue;

break 的作用

  • 在switch 语句中使用,用来结束switch 语句的。
  • 还可以在循环体中结束当前循环的。(只能结束一层循环) continue的作用
  • 只能在循环体中使用
  • 跳过本次循环执行后续内容执行下次循环
    while:执行到了continue 循环体中后续代码直接跳过,直接进入下次 循环条件的判断
    do- while:同上
    for :执行到continue 循环体中后续代码直接 跳过,直接跳到迭代去执行,然后条件判断
public class Test{
	public static void main(String[] args){
		final int MIN=10;
		final int MAX=901;
		int num=0;
	while(true){
	num=(int)(Math.random()*(MAX-MIN)+MIN);
	if(num%7==0&&num%5==0)break;
	}
	System.out.println(num);
	}
}

用循环实现打印一个用*组成的正方体边长自定义

public class Test{
	public static void main(String[] args){
		java.util.Scanner scan =new java.util.Scanner(System.in);
		
	}
	class myMath extends Math{
	
	}
}

嵌套循环

外层循环迭代一次,内层循环执行一遍

import java.util.Scanner;

public class Test1 {

	public static void main (String[] args){
		Scanner scan=new Scanner(System.in);
		System.out.println("请输入矩形的边长!!!");
		int width=scan.nextInt();
		for(int i=0;i<width;i++){
			for(int j=0;j<=width;j++){
				System.out.print(" *");
				
			}
			System.out.println();
			
		}
		
	}
	
}
import java.util.Scanner;

public class Test1 {

	public static void main (String[] args){
		Scanner scan=new Scanner(System.in);
		System.out.println("请输入平行四边形的边长!!!");
		int width=scan.nextInt();
		for(int i=0;i<width;i++){
			for(int k=0;k<i;k++){
				System.out.print(" ");
			}
			for(int j=0;j<=width;j++){
				System.out.print(" *");
			}
			System.out.println();
		}
	}

//带空格输出形式

import java.util.Scanner;

public class Test1 {

	public static void main (String[] args){
		Scanner scan=new Scanner(System.in);
		System.out.println("请输入等腰三角形的底边长!!!");
		int width=scan.nextInt();
		for(int i=0;i<width;i++){
			for(int k=i;k<width-1;k++){
				System.out.print(" ");
			}
			for(int j=0;j<=i;j++){
				System.out.print(" *");
			}
			System.out.println();
		}
	}
}

//不带空格输出形式

import java.util.Scanner;

public class Test1 {

	public static void main (String[] args){
		Scanner scan=new Scanner(System.in);
		System.out.println("请输入等腰三角形的底边长!!!");
		int width=scan.nextInt();
		for(int i=0;i<width;i++){
			for(int k=i;k<width-1;k++){
				System.out.print(" ");
			}
			for(int j=0;j<(i<<1)+1;j++){
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

战斗练习

实现一场战斗
亚瑟 VS 后裔
每个英雄 赋值 初始血量 1000,
每个英雄 伤害随机
亚瑟 damage[30,50)暴击率30% 暴击 伤害1.8
后裔 damage[20,40) 暴击率50% 暴击伤害2
然后普通攻击和暴击要求不同的输出内容,输出本次伤害,和对方剩余的血量
一人一刀互相伤害
使用循环模拟两人的一场战斗
最终输出结果,谁胜利,剩余血量

public class Test1 {
	public static void main(String[] args){
        final double HP=1000;
        
        final double YASE_DAM_MIN=30;
        final double YASE_DAM_MAX=50;
        final double YASE_CRITICAL_PERCENT=0.3;
        final double YASE_CRITICAL_DAM=1.8;
        
        final double HOUYI_DAM_MIN=30;
        final double HOUYI_DAM_MAX=50;
        final double HOUYI_CRITICAL_PERCENT=0.5;
        final double HOUYI_CRITICAL_DAM=2;
        //初始化两个任务的血量
        double yaseHP=HP,houyiHp=HP;
        System.out.println("=====两人相遇战斗开始=====");
        while(yaseHP > 0 && houyiHp > 0){
        	int saizi=(int)(Math.random()*(3-1));
            if(saizi==1){
            	System.out.println("亚瑟先手");
            	//亚瑟造成随机伤害
            	double yase =(Math.random()*(YASE_DAM_MAX-YASE_DAM_MIN)+YASE_DAM_MIN);
            	//是否产生暴击
            	boolean isCritical=false;
            	if(Math.random()<=YASE_CRITICAL_PERCENT){
            		isCritical=true;
            	}
            	if(isCritical){
            		yase*=YASE_CRITICAL_DAM;
            		System.out.println("亚瑟挥舞一刀造成暴击伤害"+yase);
            	}else{
            		System.out.println("亚瑟挥舞一刀造成伤害"+yase);
            	}
            	houyiHp=houyiHp-yase<0?0:houyiHp-yase;
            	System.out.println("后裔剩余血量"+houyiHp);
            }else{
            	System.out.println("后裔先手");
            	//后裔造成随机伤害
            	double houyi =(Math.random()*(HOUYI_DAM_MAX-HOUYI_DAM_MIN)+HOUYI_DAM_MIN);
            	//是否产生暴击
            	boolean isCritical=false;
            	if(Math.random()<=HOUYI_CRITICAL_PERCENT){
            		isCritical=true;
            	}
            	if(isCritical){
            		houyi*=HOUYI_CRITICAL_DAM;
            		System.out.println("后裔射出一箭造成暴击伤害"+houyi);
            	}else{
            		System.out.println("后裔射出一箭造成造成伤害"+houyi);
            	}
            	yaseHP=yaseHP-houyi<0?0:yaseHP-houyi;
            	System.out.println("亚瑟剩余血量"+yaseHP);
            }
    	}
        
        if(houyiHp==0){
        	System.out.println("后裔战死");
        }else if(yaseHP==0){
        	System.out.println("亚瑟战死");
        } 
  }
}
发布了23 篇原创文章 · 获赞 4 · 访问量 382

猜你喜欢

转载自blog.csdn.net/weixin_44804206/article/details/105111306