@[TOC](JAVA基础-循环结构)
循环结构—一重循环
while、do while、for
通过案例来引出循环:
【1】求合:1+2+3+4+5
public class TestWhile{
public static void main(String[] args){
//功能:1+2+3+4+5:
//定义变量:
int num1 = 1;
int num2 = 2;
int num3 = 3;
int num4 = 4;
int num5 = 5;
//定义一个求和变量:
int sum = 0;
sum += num1;
sum += num2;
sum += num3;
sum += num4;
sum += num5;
System.out.println(sum);
}
}
缺点:变量定义过多
解决办法:引用num++,来减少num的定义
public class TestWhile{
public static void main(String[] args){
//功能:1+2+3+4+5:
//定义变量:
int num = 1;
//定义一个求和变量:
int sum = 0;
sum += num;
num++;
sum += num;
num++;
sum += num;
num++;
sum += num;
num++;
sum += num;
num++;
System.out.println(sum);
}
}
缺点:重复计算太多
解决办法:引入循环:
public class TestWhile{
public static void main(String[] args){
//功能:1+2+3+4+5:
//定义变量(初始化):
int num = 1;
//定义一个求和变量:
int sum = 0;
//while循环
while(num<=5){
sum += num;
num++;
}
System.out.println(sum);
}
}
【while循环原理】先进行()中的判定,结果为布尔类型,判断结果为true,则开始执行{}内容,如果判断结果为false,则循环结束!
【执行过程】
num=1 sum=0
(1).num=0<=5—》true—》sum=1 num=2;
(2).num=1<=5—》true—》sum=3 num=3;
(3).num=2<=5—》true—》sum=6 num=4;
(4).num=3<=5—》true—》sum=10 num=5;
(5).num=4<=5—》true—》sum=15 num=6;
(6).num=6<=5—》false—》循环终止,输出sum:15
【循环四要素】
【条件初始化】初始化,只执行一次,while循环中,需要把初始化放在循环体外,否则每次执行循环体都将进行条件初始化。
【条件判断】用于判断是否需要执行
【循环体】判断为true则执行
【迭代】判断为true则执行
【do while与while的区别】
while判断后再执行,do while则先执行之后再进行判断。
【do while的使用场景】
考试补考(需要先考试获取成绩之后才能知道是否需要补考,所以要先执行,再判断。)
【for(形式灵活,结构如下)】
for(条件初始化;条件判断;迭代){
循环体
}
【while、do while、for的效率谁更高】
一样高(由于for形式比较简单,日常一般使用for循环)
【练习】
【1+2+3+…+100】
//求:1+2+3+.....+100
public class PracticeBk01{
public static void main(String[] args){
int sum=0;
int num=1;
while(num<=100){
sum+=num;
num++;
}
System.out.println(sum);
}
}
【3691215】
//求3*6*9*12*15
public class PracticeBk02{
public static void main(String[] args){
int sum=1;
int num=3;
while(num<=15){
sum*=num;
num = num+3;
}
System.out.println(sum);
}
}
【输出1-100中被4整除的数,每行输出6个】
//输出1-100中被4整除的数,每行输出6个
public class PracticeBk03{
public static void main(String[] args){
int num = 1;
int count = 0;
while(num<=100){
if(num%4==0){
if(count%6==0){
System.out.println();
}
count++;
System.out.print(num+"\t");
}
num++;
}
}
}
【break、continue、return的区别】
【break】
1.用于switch分支,每个case分支后加上break关键字,可以结束分支,防止“穿透”。
2.用于循环中,中断最近的一个循环。
【continue】
终止本次循环,执行下一次循环(类似遇到continue直接跳过当前的判断条件,进行下一个的判断。)
【return】
直接停止方法
【练习】
实现一个功能:
1.请录入10个整数,当输入的数是666的时候,退出程序。
2.判断其中录入正数的个数并输出。
3.判断系统的退出状态:是正常退出还是被迫退出。
/* 实现一个功能:
1.请录入10个整数,当输入的数是666的时候,退出程序。
2.判断其中录入正数的个数并输出。
3.判断系统的退出状态:是正常退出还是被迫退出。*/
import java.util.Scanner;
public class PracticeBk04{
public static void main(String[] args){
//引入一个布尔类型的变量,当做一个“开关”,默认开关是开着的
boolean flag = true;
int count = 0;//用于记数
Scanner SC = new Scanner(System.in);
for(int i = 1;i<=10;i++){
System.out.println("请录入第"+i+"个整数:");
int num = SC.nextInt();
if(num>0){
count++;
}
if(num==666){
flag=false;
break;
}
}
if(flag){//默认为flag=true
System.out.println("正常退出!");
}else{
System.out.println("被迫退出!");
}
System.out.println("输入的正数个数为:"+count);
}
}
循环结构—二重循环
【案例分析】
乘法口诀:
11=1
12=2 22=4
13=3 23=6 33=9
14=4 24=8 34=12 44=16
15=5 25=10 35=15 45=20 55=25
16=6 26=12 36=18 46=24 56=30 66=36
17=7 27=14 37=21 47=28 57=35 67=42 77=49
18=8 28=16 38=24 48=32 58=40 68=48 78=56 88=64
19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 9*9=81
/*乘法口诀
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81*/
public class PracticeBk05{
public static void main(String[] args){
for(int i = 1;i<=9;i++){
for(int j = 1;j<=i;j++){
System.out.print(j+"*"+i+"="+j*i+"\t");
}
System.out.println();
}
}
}
19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 99=81
18=8 28=16 38=24 48=32 58=40 68=48 78=56 88=64
17=7 27=14 37=21 47=28 57=35 67=42 77=49
16=6 26=12 36=18 46=24 56=30 66=36
15=5 25=10 35=15 45=20 55=25
14=4 24=8 34=12 44=16
13=3 23=6 33=9
12=2 22=4
1*1=1
/*乘法口诀:
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*4=4 2*4=8 3*4=12 4*4=16
1*3=3 2*3=6 3*3=9
1*2=2 2*2=4
1*1=1
*/
public class PracticeBk06{
public static void main(String[] args){
for(int i = 9;i>=0;i=i-1){
for(int j = 1;j<=i;j++){
System.out.print(j+"*"+i+"="+j*i+"\t");
}
System.out.println();
}
}
}
用*打印各种形状
【矩形/前面有空格的矩形】
//用*画各种图形
//矩形(8*4):
public class PracticeBk07{
public static void main(String[] args){
for(int i = 1;i<=4;i++){
for(int j = 1;j<=8;j++){
System.out.print("*");
}
System.out.println();
}
//矩形每列前面加空格
for(int i = 1;i<=4;i++){//控制行数
for(int num = 1;num<=4;num++){//控制空格数
System.out.print(" ");
}
for(int j = 1;j<=8;j++){//控制列数
System.out.print("*");
}
System.out.println();
}
}
}
【平行四边形】
//平行四边形:
public class PracticeBk08{
public static void main(String[] args){
for(int i = 1;i<=4;i++){//控制行数
for(int num = 1;num<=(4-i);num++){//控制空格数
System.out.print(" ");
}
for(int j = 1;j<=8;j++){//控制列数
System.out.print("*");
}
System.out.println();
}
}
}
【三角形】
//三角形
public class PracticeBk09{
public static void main(String[] args){
for(int i = 1;i<=4;i++){//控制行数
for(int num = 1;num<=(4-i);num++){//控制空格数
System.out.print(" ");
}
for(int j = 1;j<=(2*i-1);j++){//控制列数
System.out.print("*");
}
System.out.println();
}
}
}
【菱形】
//菱形
public class PracticeBk10{
public static void main(String[] args){
for(int i = 1;i<=4;i++){//控制行数
for(int num = 1;num<=(4-i);num++){//控制空格数
System.out.print(" ");
}
for(int j = 1;j<=(2*i-1);j++){//控制列数
System.out.print("*");
}
System.out.println();
}
for(int i = 1;i<=3;i++){//控制行数
for(int num = 1;num<=i;num++){//控制空格数
System.out.print(" ");
}
for(int j = 1;j<=(7-2*i);j++){//控制列数
System.out.print("*");
}
System.out.println();
}
}
}
【空心菱形】
//空心菱形
public class PracticeBk11{
public static void main(String[] args){
for(int i = 1;i<=4;i++){//控制行数
for(int num = 1;num<=(4-i);num++){//控制空格数
System.out.print(" ");
}
for(int j = 1;j<=(2*i-1);j++){//控制列数
if(j==1||j==(2*i-1)){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
for(int i = 1;i<=3;i++){//控制行数
for(int num = 1;num<=i;num++){//控制空格数
System.out.print(" ");
}
for(int j = 1;j<=(7-2*i);j++){//控制列数
if(j==1||j==(7-2*i)){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
【三重循环】
练习:
百钱买百鸡:
公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,
用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,
问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。
public class PracticeBk12{
public static void main(String[] args){
//设x为公鸡个数,y为母鸡个数,z为小鸡个数,每只鸡需要至少买一个
//所以公鸡最多的数量:(100-3-1)/5=19;母鸡最多的数量:(100-5-1)/3=31;小鸡必须是3只一起买,y=100-x-y
for(int x = 1;x<=19;x++){
for(int y = 1;y<=31;y++){
int z=100-x-y;
if((x+y+z==100)&&((5*x)+(3*y)+(z/3)==100)&&z%3==0){
System.out.println("公鸡数量:"+x+"\t"+"\t"+"母鸡数量:"+y+"\t"+"小鸡数量:"+z);
}
}
}
}
}