1、分支结构
1.1 if...else if
练习1:测试商品打折案例
package cn.tedu.basic;
import java.util.Scanner;
/*测试商品打折案例*/
//需求:接收用户输入的商品原价,满10000打五折,满5000打八折,满2000打九折,低于2000原价
public class TestDiscount {
//0.创建程序入口main函数
public static void main(String[] args) {
//1.提示并接收用户输入原价
System.out.println("请输入商品原价:");
double price = new Scanner(System.in).nextDouble();
//2.定义一个变量用来保存实付的结果
double count = price;//注意count的初始值是商品的原价
//3.计算打折后的价格
if(price>=10000) {//10000以上打五折
count = price*0.5;
}else if (price >=5000) {
count = price*0.8;
}else if (price>=2000) {
count = price*0.9;
}
System.out.println("实付金额为:"+count);
}
}
练习2:统计学生分数的档位
package cn.tedu.basic;
import java.util.Scanner;
/*
*@author 学生:Q
*@vesion :java1.8.131
*创建时间:2021年6月3日 上午11:48:18
*/
/*本类用于判断班里10个学员分数的档位*/
public class TestScore {
//0.创建程序入口main函数
public static void main(String[] args) {
//1.提示并接收输入的学员分数
System.out.println("输入你的分数:");
int score = new Scanner(System.in).nextInt();
/*为了增强程序的健壮性,若用户输入的数据不符合规则,就结束*/
int i =1;
int great = 0,best = 0,better = 0,good = 0,bad = 0;
while(i<=10) {//班里10个人,判断每个人的成绩,完成后退出
if(score<0 || score>100) {
System.out.println("输入非法,重新输入:");
score = new Scanner(System.in).nextInt();
}
//2.判断分数分数的段位,并输出结果
if(score>=90) {//大于90优秀
System.out.println("优秀");
great++;
}else if (score>=80 ) {//[80,90)良好
System.out.println("良好");
best++;
}else if(score >=70) {//[70,80)较好
System.out.println("较好");
better++;
}else if(score>=60) {//[60,70)及格
System.out.println("及格");
good++;
}else {//小于60不及格
System.out.println("不及格");
bad++;
}i++;
if(i>10) {
System.out.println("结束");
break;//break跳出循环,如果用return,整个程序就结束了且不输出结果
}
System.out.println("输入下一个成绩:");
score = new Scanner(System.in).nextInt();
}
System.out.println("10人中优秀的有:"+great+"个,"+"良好的有:"+best+"个,"+"较好的有:"+better+"个,"+
"及格的有:"+good+"个,"+"不及格的有:"+bad+"个,");
}
}
1.2 switch...case
1).变量a的类型只支持byte、short、int、char、String类型
2).变量a的值会依次与case后的值作比较,若不加break ,会穿透所有case的输出值,包括 default输出值
3).switch 语句可以拥有多个 case 语句,每个 case 后面跟一个要比较的值和冒号,且此值的数据类型必须与变量的数据类型一致
4).设置了default,当所有case分支都没有匹配到,就执行default下的输出值
5).break与default是可选项,根据具体业务需求决定是否添加
6).作用:判断一个变量与一系列值中某个值是否相等,每个值称为一个分支
当一个case成立,从这个case向后穿透所有case,包括default,直到程序结束
该结构会有穿透现象,如果想每个分支都停止,就需要在每个分支后加break;
格式:
练习:每周要做的活动
package cn.tedu.basic;
import java.util.Scanner;
/*本类用于练习switch结构2*/
public class TestSwitch2 {
public static void main(String[] args) {
System.out.println("请确定今天是周几:");
//String d= "周四";
String d = new Scanner(System.in).nextLine();
switch(d) {
case "周一":System.out.println("周一边晨跑边敲代码");break;
case "周二":System.out.println("周二边俯卧撑边敲代码");break;
case "周三":System.out.println("周三边仰卧起坐边敲代码");break;
case "周四":System.out.println("周四敲代码");break;
case "周五":System.out.println("周五边深蹲边敲代码");break;
case "周六":System.out.println("周六边引体向上边敲代码");break;
case "周日":System.out.println("周日边跳绳边敲代码");break;
default:System.out.println("去睡觉");
}
}
}
2、循环结构
2.1 for循环
格式:
1、for循环创建思路和每个条件的功能:
1).开始条件:定义控制循环的循环变量,并给循环变量初始化
2).循环条件:限制循环变量的范围,控制循环何时结束
3).更改条件:控制循环变量的变化
2、for循环创建思路:从哪开始,到哪结束 ,如何变化
循环的执行情况是由三个条件共同控制的
3、循环一共执行几次怎么判断?
答:看循环变量可以取到的值一共有几个,有几个就执行几次
练习:打印100次slogon/打印0到10/打印10到0/打印8,88,888,8888
package cn.tedu.basic;
/*本类用于测试循环结构中的for循环*/
public class TestFor {
public static void main(String[] args) {
//需求:打印四次自己的宣言
/**格式:for(开始条件; 循环条件; 更改条件){符合循环条件执行的循环体}*/
for(int i = 1; i<=4;i++);{
System.out.println("又不是没那条件,干就完了");
}
//需求:打印1-10
//for循环从哪开始:1,到哪里结束:10,如何变化:++
for(int j =1; j<=10;j++) {
System.out.println(j);
}
//需求:打印10-1
//for循环从哪开始:10,到哪里结束:1,如何变化:--
for(int k = 10;k>=1;k--) {
System.out.println(k);
}
//需求:8,88,888,8888
for(int i = 8;i<=8888;i=i*10+8) {
System.out.print(i+",");
}
}
}
练习2:求1-100的总和/偶数的和/偶数的个数
package cn.tedu.basic;
public class TestFor2 {
public static void main(String[] args) {
m1();
m2();
m3();
}
/*需求:求出1-100以内的所有偶数的个数*/
private static void m3() {
//1.定义变量用来保存偶数的个数
int count = 0;
//2.创建循环,依次循环1-100范围内的数
for(int i = 1;i<=100;i++) {
//3.过滤出来要统计个数的偶数
if(i%2 == 0) {//说明这是一个偶数
//4.对偶数的个数进行累计
count=count+1;//count++
}
}//5.打印最终结果
System.out.println(count);
}
/*需求:求出1-100以内的所有偶数的和*///开始条件:2结束条件:100 改变条件:
private static void m2() {
//1.定义变量用来保存最终求和的结果
int sum = 0;
//2.创建循环,依次循环1-100范围内的数
for(int i = 1;i<=100;i++) {
//3.过滤出来需要累加的偶数
if(i%2 == 0) {
// if(i%2 ==1 )过滤奇数
sum = sum +i;
}
}//4.打印最终计数结果
System.out.println(sum);
}
/*需求:求出1-100以内的所有数的和*/
private static void m1() {
//1.定义一个变量用来保存求和的结果
int count = 0;
//2.创建循环,依次循环1-100内的数
for(int i = 1;i<=100;i++) {
//3.将本轮循环到的数字累加到最终的 结果中
count = count +i;
}System.out.println(count);
}
}
2.2while循环/do...while循环
while格式:
do...while循环格式:
注意:死循环while(true){执行体1,执行体2...,break;},死循环一定要设置出口break
练习:猜数字案例:利用了调用方法和if-else if结构,包含while循环和do...while循环
package cn.tedu.review;
import java.util.Random;
import java.util.Scanner;
/*本类练习while循环和do-while循环*/
//需求:产生一个随机数,和用户一直输入的数字作比较直到用户猜对
public class TestWhile_DoWhile {
//1-1.创建程序入口函数main()方法
public static void main(String[] args) {
int r = createNum();//1-2.调用生成随机数的方法
//System.out.println(r);
guessNumber1(r);//使用while循环猜数字
guessNumber2(r);//使用do-while循环猜数字
}
//创建猜数字的方法2,练习do-while
private static void guessNumber2(int r) {
do {
System.out.println("猜猜看:");
int input = new Scanner(System.in).nextInt();
//3.判断用户是否猜对(用猜的数字和随机数作比较)
if(input>r) {
System.out.println("猜大了!");
}else if(input<r) {
System.out.println("猜小了!");
}else if(input == r) {
System.out.println("猜对了!");
//猜对了就结束后面所有的轮数,利用break跳出循环
break;//注意:死循环一定要设置程序出口
}
}while(true);
}
//创建猜数字的方法,练习while循环
private static void guessNumber1(int r) {
//1.写一个死循环
while(true) {//死循环,注意:需要设置程序的出口
//2.提示并接收用户猜的数字
System.out.println("猜猜看:");
int input = new Scanner(System.in).nextInt();
//3.判断用户是否猜对(用猜的数字和随机数作比较)
if(input>r) {
System.out.println("猜大了!");
}else if(input<r) {
System.out.println("猜小了!");
}else if(input == r) {
System.out.println("猜对了!");
//猜对了就结束后面所有的轮数,利用break跳出循环
break;//注意:死循环一定要设置程序出口
}
}
}
//创建一个让程序产生随机数的方法
private static int createNum() {
//1-3.java.util.Random();注意导包,接收随机生成的数字
//参数100是自定义,表示生成随机数的范围时[0,100)包含0不包含100以内的数字
int random = new Random().nextInt(100);
return random;
}
}
2.3三种循环的区别和应用场景:
- for:知道循环次数
- while/do while:当循环次数不确定时
- while:先判断,不符合规则,不执行代码
- do while:代码最少被执行一次,再去判断,符合规则,再次执行代码
- 循环之间都可以互相替代,但是一般最好选择合适的循环结构来完成代码
3.嵌套循环
for循环嵌套的特点:
- 1.每外层循环执行一次,内层循环要执行多次
- 2.外层循环控制行数,内层循环控制列数
练习:99乘法表
package cn.tedu.review;
public class TestFor99Excel {
public static void main(String[] args) {
//需求:99乘法表
for(int i =1;i<=9;i++) {//外-行
for(int j =1;j<=i;j++) {//内-列
System.out.print(j+"*"+i+"="+(i*j)+"\t ");//"\t"表示制表符,控制格式整齐度
}
System.out.println();//换行
}
}
}
4.break,continue和retrun的区别
1)continue:跳过本次循环,继续执行下一次循环
2)break: 跳出整个循环,往后不在执行此循环
3)return: 跳出整个循环,以及整个程序,停止运行
拓展: 多层嵌套for循环如何跳到最外层
不加任何代码,最里层的break,只能跳出最内层的循环, 如果想要跳出最外面的,就要新增一个标记.
在想要跳出循环的地方加标记,然后break标记.
同理换成continue 标记; 效果一样.
/**
* 测试多重for循环 break
*/
public static void forTest() {
int a = 3;
tab: for (int i = 0; i < a; i++) {
System.out.println("我是i...." + i);
for (int j = 0; j < a; j++) {
System.out.println("我是j...." + j);
if (j == 1) {
break tab;
}
}
}
}