java基础-流程控制-day04
1. if单分支
public class TestIf01{
public static void main(String[] args){
// 对三个数(1-6) 求和
int num1 = 6;
int num2 = 6;
int num3 = 5;
int sum = 0;
sum += num1;
sum += num2;
sum += num3;
System.out.println("总和:"+sum);
// >=14 一等奖
// >=10 二等奖
// >=6 三等奖
// < 四等奖
if (sum>=14){
System.out.println("一等奖");
}
if (sum<14&&sum>=10){
System.out.println("二等奖");
}
if (sum<10&&sum>=6){
System.out.println("三等奖");
}
if (sum<6){
System.out.println("四等奖");
}
}
}
2. if else 多分支
public class TestIf02{
public static void main(String[] args){
// 对三个数(1-6) 求和
int num1 = 6;
int num2 = 6;
int num3 = 5;
int sum = 0;
sum += num1;
sum += num2;
sum += num3;
System.out.println("总和:"+sum);
// >=14 一等奖
// >=10 二等奖
// >=6 三等奖
// <6 四等奖
if (sum>=14){
System.out.println("一等奖");
}else if(sum>=10){//默认隐含了<14的条件
System.out.println("二等奖");
}else if(sum>=6){
System.out.println("三等奖");
}else{//注意这里不写if 默认隐含了<6的条件
System.out.println("四等奖");
}
}
}
3. if else双分支
可以改成 ?:结构
public class TestIf03{
public static void main(String[] args){
// 对三个数(1-6) 求和
int num1 = 6;
int num2 = 6;
int num3 = 5;
int sum = 0;
sum += num1;
sum += num2;
sum += num3;
System.out.println("总和:"+sum);
// >=10 中奖
// <10 没中奖
if (sum>=10){
System.out.println("中奖");
}else{
System.out.println("没中奖");
}
System.out.println(sum>=10?"中奖":"没中奖");
}
}
4. 随机生成一定区间的整数
random --> [0.0, 1.0)
*6 --> [0.0, 6.0)
int --> [0, 5]
+1 --> [1, 6]
(int)(Math.random()*6) +1
随机生成 32--68之间的一个数
68-32=36
random --> [0.0, 1.0)
*35 --> [0.0, 35.0)
int --> [0, 34)
+32 --> [32, 68)
(int)(Math.random()*35) +32
public class TestIf04{
public static void main(String[] args){
// 随机生成三个数(1-6) 求和
int num1 = (int)Math.random()*6 +1;
System.out.println("num1: "+num1);
int num2 = (int)(Math.random()*6) +1;
System.out.println("num2: "+num2);
int num3 = (int)(Math.random()*6) +1;
System.out.println("num3: "+num3);
int sum = 0;
sum += num1;
sum += num2;
sum += num3;
System.out.println("总和:"+sum);
// >=10 中奖
// <10 没中奖
if (sum>=10){
System.out.println("中奖");
}else{
System.out.println("没中奖");
}
}
}
练习1

import java.util.Scanner;
public class TestIf05{
public static void main(String[] args){
//输入积分
Scanner sc = new Scanner(System.in);
System.out.println("请输入积分:");
if (sc.hasNextInt()==true){
int score = sc.nextInt();
System.out.println("输入积分是:"+score);
if (score>=0){
//判断折扣
double discount = 0;
if (score>=8000){
discount = 0.6;
}else if(score>=4000){
discount = 0.7;
}else if(score>=2000){
discount = 0.8;
}else{
discount = 0.9;
}
System.out.println("折扣:"+discount);
}else{
System.out.println("输入积分不能为负数!");
}
}else{
System.out.println("输入积分不合法");
}
}
}
练习2;
小朋友搬桌子:
年龄大于7岁,可以搬桌子;
如果年龄大于5岁,性别是男,可以搬桌子;
否则不可以搬动桌子,提示:你还太小了
逻辑分析:
- 年龄大于7 男孩女孩都能搬
- 年龄小于5 都不能
- 年龄 5--7之间 只有男孩才能搬
import java.util.Scanner;
public class TestIf06{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入年龄:");
int age = sc.nextInt();
if(age>7){
System.out.println("yes");
}else if(age>5){
System.out.println("请输性别 男--1 女--0");
int sex = sc.nextInt();
if(sex==1){
System.out.println("yes");
}else{
System.out.println("no");
}
}else{
System.out.println("no");
}
}
}

import java.util.Scanner;
public class TestIf06{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入年龄:");
int age = sc.nextInt();
if(age>7){
System.out.println("yes");
}else if(age>5){
System.out.println("请输性别: 男 女");
String input = sc.next();
char sex = input.charAt(0);
if(sex=='男'){
System.out.println("yes");
}else{
System.out.println("no");
}
}else{
System.out.println("no");
}
}
}
5 switch语句
实现一个功能:
根据给出的学生分数,判断学生的等级:
>=90 -----A
>=80 -----B
>=70 -----C
>=60 -----D
<60 -----E
import java.util.Scanner;
public class TestIf07{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入分数:");
int score = sc.nextInt();
/*
if (score>=90){
System.out.println("A");
}else if(score>=80){
System.out.println("B");
}
*/
switch(score/10){
case 10:System.out.println("A");break;
case 9:System.out.println("B");break;
case 8:System.out.println("C");break;
case 7:System.out.println("D");break;
case 6:System.out.println("E");break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
default:System.out.println("成绩输入错误");
}
/*
【4】为了防止代码的“穿透”效果:在每个分支后面加上一个关键词break,遇到break这个分支就结束了
【5】类似else的“兜底”“备胎”的分支:default分支
*/
}
}
6. while循环
引入:
public class TestWhile01{
public static void main(String[] args){
// 实现1+2+3+4+5
int num = 1;
int sum = 0;
sum += num; //0+1
num++;//2
sum += num; //0+1+2
num++;//3
sum += num; //0+1+2+3
num++;//4
sum += num; //0+1+2+3+4
num++;//5
sum += num; //0+1+2+3+4+5
System.out.println("sum:"+sum);
}
}
循环4要素:
public class TestWhile02{
public static void main(String[] args){
// 实现1+2+3+4+5
int num = 1;//[1]初始化
int sum = 0;
while(num<=5){//[2]条件判断
sum+=num;//[3]循环体
num++;//[4]迭代
}
System.out.println("sum:"+sum);
}
}
[1]四要素:条件初始化 条件判断 循环体 迭代
[2]执行过程 [1][2][3][4]-->[2][3][4]-->[2][3][4]...
[3]详细过程
num=1, sum=0
准备开始执行第一次循环,判断num<=5-->true--{}执行:sum:1,num:2,第一次循环结束
准备开始执行第二次循环,判断num<=5-->true--{}执行:sum:1+2,num:3,第二次循环结束
准备开始执行第三次循环,判断num<=5-->true--{}执行:sum:1+2+3,num:4,第三次循环结束
准备开始执行第四次循环,判断num<=5-->true--{}执行:sum:1+2+3+4,num:5,第四次循环结束
准备开始执行第五次循环,判断num<=5-->true--{}执行:sum:1+2+3+4+5,num:6,第四次循环结束
准备开始执行第六次循环,判断num<=5-->false--{}不执行,循环结束,
练习:
【1】1+2+3+4+5+。。。。+100
【2】2+4+6+8+。。。。+998+1000
【3】5+10+15+20+。。。+100
【4】99+97+95+。。5+3+1
【5】135791113
public class TestWhile03{
public static void main(String[] args){
//【1】1+2+3+4+5+。。。。+100
int i = 1;
int sum = 0;
while(i<=100){
sum +=i;
i++;
}
System.out.println("结果:"+sum);
//【2】2+4+6+8+。。。。+998+1000
i = 2;
sum = 0;
while(i<=100){
sum +=i;
i+=2;
}
System.out.println("结果:"+sum);
//【3】5+10+15+20+。。。+100
i = 15;
sum = 0;
while(i<=100){
sum +=i;
i+=5;
}
System.out.println("结果:"+sum);
//【4】99+97+95+。。5+3+1
i = 99;
sum = 0;
while(i>=1){
sum+=i;
i-=2;
}
System.out.println("结果:"+sum);
//【5】1*3*5*7*9*11*13
i = 1;
sum = 1;
while(i<=13){
sum*=i;
i+=2;
}
System.out.println("结果:"+sum);
}
}
do-while循环
使用场景: 先要考试 等出了结果 才知道要不要参加下一次考试
循环体 先要执行一遍 再去判断条件
--条件true 继续进入下一次循环
--条件false退出循环
do{考试
}while(通过
)
7. for循环
for(条件初始化;条件判断;迭代){
循环体
}
public class TestFor01{
public static void main(String[] args){
// 1+2+3+4+5
int sum = 0;
for(int i=0;i<=5;i++){
sum+=i;
}
System.out.println("sum:"+sum);
}
}
8. break continue return关键字的使用
8.1 break 退出循环
练习:
public class TestFor02{
public static void main(String[] args){
// 求和 1—+2+3...+100 当和第一次超过300时退出循环
int sum = 0;
for(int i=0;i<=100;i++){
sum+=i;
if(sum>300){
break;
}
System.out.println("sum:"+sum);
}
}
}
public class TestFor03{
public static void main(String[] args){
// 求和 1—+2+3...+100 当和i=36退出循环
int sum = 0;
for(int i=0;i<=100;i++){
sum+=i;
System.out.println("i:"+i);
if(i==36){//如果改成while
break;
}
}
}
}
public class TestFor03{
public static void main(String[] args){
// 求和 1—+2+3...+100 当和i=36退出循环
int sum = 0;
for(int i=0;i<=100;i++){
sum+=i;
System.out.println("i:"+i);
while(i==36){
break;// 注意这里只会break while循环 for循环不受影响
}
}
}
}
结果:0-100全部打印
break的打标签使用
public class TestFor04{
public static void main(String[] args){
// 求和 1—+2+3...+100 当和i=36退出循环
int sum = 0;
outer: //给这个for循环打标签
for(int i=0;i<=100;i++){
sum+=i;
System.out.println("i:"+i);
while(i==36){
break outer; //根据标签停止
}
}
}
}
结果:只输出 0-36
8.2 continue 退出本次迭代
1-->100输出能被6整除的数
public class TestFor05{
public static void main(String[] args){
// 1 2 3...100 只输出能被6整除的数
int sum = 0;
outer: //给这个for循环打标签
for(int i=0;i<=100;i++){
sum+=i;
if(i%6==0){
System.out.println("i:"+i);
}
}
}
}
方式2;不能被6整除的就continue 不打印
public class TestFor05{
public static void main(String[] args){
// 1 2 3...100 只输出能被6整除的数
int sum = 0;
outer: //给这个for循环打标签
for(int i=0;i<=100;i++){
sum+=i;
if(i%6!=0){
continue;
}
System.out.println("i:"+i);
}
}
}
public class TestFor06{
public static void main(String[] args){
// 1 2 3 100 当和i=36 continue
int sum = 0;
for(int i=0;i<=100;i++){
sum+=i;
if(i==36){
continue;
}
System.out.println("i:"+i);
}
}
}
结果: 36没打印出来
public class TestFor06{
public static void main(String[] args){
// 1 2 3 100 当和i=36 continue
int sum = 0;
for(int i=0;i<=100;i++){
sum+=i;
while(i==36){
System.out.println("---->i:"+i);
continue;
}
System.out.println("i:"+i);
}
}
}
结果: 0-35打印出来 36死循环
8.3 return 退出方法的执行
public class TestFor06{
public static void main(String[] args){
// 1 2 3 100 当和i=36 return
int sum = 0;
for(int i=0;i<=100;i++){
sum+=i;
if(i==36){
System.out.println("-----");
return;
}
System.out.println("i:"+i);
}
}
}
结果:0-35打印 36只打印--- 退出
9. 练习
9.1 打印1-100能被5整除的数 每行输出6个数
public class TestFor07{
public static void main(String[] args){
// 打印1-100能被5整除的数 每行输出6个数
int count= 0;
for(int i=1;i<=100;i++){
if(i%5==0){
System.out.print(i+"\t");
if (count%6==0){
System.out.println();
}
count++;
}
}
}
}

9.2 练习
import java.util.Scanner;
public class TestFor08{
public static void main(String[] args){
/*
【1】请录入10个整数,当输入的数是666的时候,退出程序--(被迫退出)。
【2】判断其中录入正数的个数并输出。
【3】判断系统的退出状态:是正常退出还是被迫退出。
*/
boolean flag=true;//默认正常退出
int count = 0;
for(int i=1;i<=10;i++){
Scanner sc = new Scanner(System.in);
System.out.println("请第"+i+"次输入整数:");
int num = sc.nextInt();
if(num>0){
count++;
}
if(num==666){
//System.out.println("被迫退出");
flag = false;
break;
}
}
System.out.println("正数的个数:"+count);
System.out.println(flag?"正常退出":"被迫退出");
}
}

9.3 打印乘法口诀
public class TestFor09{
public static void main(String[] args){
for(int j=1;j<=9;j++){
// 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
for(int i=1;i<=j;i++){
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();
}
for(int j=9;j>=1;j--){
// 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
for(int i=1;i<=j;i++){
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();
}
}
}
9.4 打印各种形状
打印 49 由组成的正方形
public class TestFor10{
public static void main(String[] args){
for(int j=1;j<=4;j++){
for(int i=1;i<=9;i++){
System.out.print("*");
}
System.out.println();
}
}
}

前面有5个空格
public class TestFor10{
public static void main(String[] args){
for(int j=1;j<=4;j++){
for(int i=1;i<=5;i++){
System.out.print(" ");
}
for(int i=1;i<=9;i++){
System.out.print("*");
}
System.out.println();
}
}
}

打印平行四边形
public class TestFor10{
public static void main(String[] args){
/* 空格数
********* 5
********* 4
********* 3
********** 2
*/
for(int j=1;j<=4;j++){
for(int i=1;i<=6-j;i++){
System.out.print(" ");
}
for(int i=1;i<=9;i++){
System.out.print("*");
}
System.out.println();
}
}
}

三角形
public class TestFor11{
public static void main(String[] args){
/* *个数 行数
* 1 1
*** 3 2
***** 5 3
******* 7 4
*/
for(int j=1;j<=4;j++){
for(int i=1;i<=6-j;i++){
System.out.print(" ");
}
for(int i=1;i<=2*j-1;i++){
System.out.print("*");
}
System.out.println();
}
}
}

棱形
public class TestFor12{
public static void main(String[] args){
/* *个数 行数 空格
* 1 1
*** 3 2
***** 5 3
******* 7 4
***** 5 1 3
*** 3 2 4
* 1 3 5
j 7-2*j
*/
for(int j=1;j<=4;j++){
for(int i=1;i<=6-j;i++){
System.out.print(" ");
}
for(int i=1;i<=2*j-1;i++){
System.out.print("*");
}
System.out.println();
}
for(int j=1;j<=3;j++){
for(int i=1;i<=j+2;i++){
System.out.print(" ");
}
for(int i=1;i<=7-2*j;i++){
System.out.print("*");
}
System.out.println();
}
}
}

空心棱形
public class TestFor12{
public static void main(String[] args){
/* *个数 行数 空格
* 1 1
*** 3 2
***** 5 3
******* 7 4
***** 5 1 3
*** 3 2 4
* 1 3 5
j 7-2*j
*/
for(int j=1;j<=4;j++){
for(int i=1;i<=6-j;i++){
System.out.print(" ");
}
for(int i=1;i<=2*j-1;i++){
if(i==1||i==(2*j-1)){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
for(int j=1;j<=3;j++){
for(int i=1;i<=j+2;i++){
System.out.print(" ");
}
for(int i=1;i<=7-2*j;i++){
if(i==1||i==(7-2*j)){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}

10. 打印菱形的另外一种方式
待补充
11. 百钱买百鸡
待补充

浙公网安备 33010602011771号