循环
循环
1.什么是循环
三要素:起点,循环体,截止
2.怎么去循环
3.java中的循环语法
a.while循环
实现:
b.do-while循环
while循环和do-while循环的区别和联系:
- while:当判断条件不满足的时候,一次也不执行;while循环的执行次数是0-n;
- do-while:当判断条件不满足时,至少执行一次;do-while的循环范围是1-n
c.for循环(foreach)
执行顺序
注意的地方
d.循环嵌套
内层循环循环一轮,外层循环循环一次
简易三层之内
一个固定代码:
时分秒计时:
e.两个关键字
- 跳过本次循环:continue,跳过本次循环,后置内容不再执行,前置内容仍然会执行。
- 跳出(终止)循环:break,终止循环,后续的所有次数的循环都不再执行。在调用break之前的依然正常执行,在调用break之后的,以及后续的所有轮,都结束。
画星星
正方形
思路:
- 先画一行,这一行是依次打印5个星星
- 一行打印完毕之后要换行
- 准备外层循环,意味着打印多少行
直角三角形
思路:
- 和正方形一样,同样是分为一行多少个星星,总共若干行
- 内层的循环上限和外层的循环当前次数有关
或者:
倒直角三角形
思路:
- 在正直角的基础上,内层是倒序循环/也可以是增序,因为是数量越来越少
- 其他的和正直角一样
或者:
反直角三角形
思路:
- 和正直角基本一致
- 每一行依然是五个符号,只不过是由空格和星星组合构成,是空格加星星的总和
- 最后一行,可以看出是0个空格+5个星星
或者:
杨辉三角
思路:
- 在正直角三角形的基础上
- 每一行的公式为:2a+1
或者:
一个小练习:
做一个简化版的体育彩票
规则:3+1,前3位,不看顺序,中1个10元,中2个100元,中3个1000元,最后一个看顺序,全中100000元
package com.qf.circulate;
import java.util.Random;
import java.util.Scanner;
public class BodyColor {
public static void main(String[] args) {
//模拟一个体彩
//3+1
//生成随机数:new Random().nextInt()
Scanner scan = new Scanner(System.in);
//生成奖池
while(true) {
System.out.println("欢迎使用割韭菜彩票系统!");
//生成第一个
int num1 = new Random().nextInt(100);
//生成第二个
int num2 = 0;
while(true) {
num2 = new Random().nextInt(100);
//判断生成的第一个值和第二个是否相同,若不相同则跳出此循环
if(num2 != num1) {
break;
}
}
//生成第三个
int num3 = 0;
while(true) {
num3 = new Random().nextInt(100);
//判断生成的第三个值和第一、二个是否相同,若不相同则跳出此循环
if(num3 != num1
&&num3 !=num2) {
break;
}
}
//生成第四个
int num4 = 0;
while(true) {
num4 = new Random().nextInt(100);
//判断生成的第四个值和第一、二、三个是否相同,若不相同则跳出此循环
if(num4 != num1
&&num4 !=num2
&&num4 != num3) {
break;
}
}
System.out.println("奖池:"+num1+" "+num2+" "+num3+" "+num4);
//break;
//选号
System.out.print("请选号(一):");
int choNum1 = scan.nextInt();
//选号二
int choNum2 = 0;
while(true) {
System.out.print("请选号(二):");
choNum2 = scan.nextInt();
if(choNum2 != choNum1) {
break;
}
}
//选号三
int choNum3 = 0;
while(true) {
System.out.print("请选号(三):");
choNum3 = scan.nextInt();
if(choNum3 != choNum1
&&choNum3 != choNum2) {
break;
}
}
//选号四
int choNum4 = 0;
while(true) {
System.out.print("请选号(四):");
choNum4 = scan.nextInt();
if(choNum4 != choNum1
&&choNum4 != choNum2
&&choNum4 !=choNum3) {
break;
}
}
System.out.println("选号:"+choNum1+" "+choNum2+" "+choNum3+" "+choNum4);
//兑奖
int count = 0;
boolean flag = true;
if(choNum1 == num1) {
count++;
if(choNum2 == num2) {
count++;
if(choNum3 == num3) {
count++;
if(choNum4 == num4) {
count++;
}else {
flag = false;
}
}else {
flag = false;
}
}else {
flag = false;
}
}else {
flag = false;
}
//中奖信息
switch(count){
case 1:
System.out.println("恭喜中奖10元!");
break;
case 2:
System.out.println("恭喜中奖100元!");
break;
case 3:
System.out.println("恭喜中奖1000元!");
break;
case 4:
System.out.println("恭喜中奖100000元!");
break;
}
}
}
}
改造:
package com.qf.circulate;
import java.util.Random;
import java.util.Scanner;
public class BodyColor {
public static void main(String[] args) {
//模拟一个体彩
//3+1
//生成随机数:new Random().nextInt()
//生成奖池
boolean flag1 = true;
while(flag1) {
Scanner scan = new Scanner(System.in);
System.out.println("请选择:输入 1.开始游戏\t输入2.退出游戏");
int begin = scan.nextInt();
switch(begin) {
case 1:
System.out.println("欢迎使用割韭菜彩票系统!");
//生成第一个
int num1 = new Random().nextInt(100);
//生成第二个
int num2 = 0;
while(true) {
num2 = new Random().nextInt(100);
//判断生成的第一个值和第二个是否相同,若不相同则跳出此循环
if(num2 != num1) {
break;
}
}
//生成第三个
int num3 = 0;
while(true) {
num3 = new Random().nextInt(100);
//判断生成的第三个值和第一、二个是否相同,若不相同则跳出此循环
if(num3 != num1
&&num3 !=num2) {
break;
}
}
//生成第四个
int num4 = 0;
while(true) {
num4 = new Random().nextInt(100);
//判断生成的第四个值和第一、二、三个是否相同,若不相同则跳出此循环
if(num4 != num1
&&num4 !=num2
&&num4 != num3) {
break;
}
}
//System.out.println("奖池:"+num1+" "+num2+" "+num3+" "+num4);
//break;
//选号
System.out.print("请选号(一):");
int choNum1 = scan.nextInt();
//选号二
int choNum2 = 0;
while(true) {
System.out.print("请选号(二):");
choNum2 = scan.nextInt();
if(choNum2 != choNum1) {
break;
}
}
//选号三
int choNum3 = 0;
while(true) {
System.out.print("请选号(三):");
choNum3 = scan.nextInt();
if(choNum3 != choNum1
&&choNum3 != choNum2) {
break;
}
}
//选号四
int choNum4 = 0;
while(true) {
System.out.print("请选号(四):");
choNum4 = scan.nextInt();
if(choNum4 != choNum1
&&choNum4 != choNum2
&&choNum4 !=choNum3) {
break;
}
}
System.out.println("选号:"+choNum1+" "+choNum2+" "+choNum3+" "+choNum4);
//兑奖
int count = 0;
boolean flag = true;
if(choNum1 == num1) {
count++;
if(choNum2 == num2) {
count++;
if(choNum3 == num3) {
count++;
if(choNum4 == num4) {
count++;
}else {
flag = false;
}
}else {
flag = false;
}
}else {
flag = false;
}
}else {
flag = false;
}
//中奖信息
switch(count){
case 1:
System.out.println("恭喜中奖10元!");
break;
case 2:
System.out.println("恭喜中奖100元!");
break;
case 3:
System.out.println("恭喜中奖1000元!");
break;
case 4:
System.out.println("恭喜中奖100000元!");
break;
default:
System.out.println("没中奖,欢迎下次再来!");
break;
}
break;
default:
System.out.println("可恶这个韭菜跑了!!!>_<");
flag1 = false;
break;
}
}
}
}
作业:
- 请打印99乘法表(必做)
package com.qf.circulate;
public class MultiplicationTable {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 1;
while(i<10) {
int j = 1;
while(j<=i) {
System.out.print(j+"*"+i+"="+i*j+"\t");
j++;
}
System.out.println();
i++;
}
}
}
- 打印一棵圣诞树(选做)
package com.qf.circulate;
public class ChristmasTree {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 0;
while(i<4) {
int n = 30;
while(n>i) {
System.out.print(" ");
n--;
}
int j = 0;
while(j<=i*2) {
System.out.print("*");
j++;
}
System.out.println();
i++;
}
int a1 = 1;
while(a1<6) {
int n1 = 30;
while(n1>a1*2-1) {
System.out.print(" ");
n1--;
}
int b1 = 1;
while(b1<a1*4) {
System.out.print("*");
b1++;
}
System.out.println();
a1++;
}
int a2 = 1;
while(a2<7) {
int n2 = 30;
while(n2>a2*2) {
System.out.print(" ");
n2--;
}
int b2 = 0;
while(b2<a2*4) {
System.out.print("*");
b2++;
}
System.out.println();
a2++;
}
int a3 = 1;
while(a3<8) {
int n3 = 26;
while(n3>0) {
System.out.print(" ");
n3--;
}
int j3 = 8;
while(j3>0) {
System.out.print("*");
j3--;
}
System.out.println();
a3++;
}
}
}
- 思考题:打印1000以内的水仙花数(一个单循环)
package com.qf.circulate;
public class Daffodil {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 1000;
System.out.print("一千以内的水仙花数是:");
while(i>1) {
int ind = i%10;
int ten = i/10%10;
int hub = i/100%10;
int sum = ind*ind*ind+ten*ten*ten+hub*hub*hub;
if(i == sum) {
System.out.print(sum+" ");
}
i--;
}
}
}