目录
一,if分支结构
1,概述
顺序结构的程序虽然能解决计算、输出等问题
但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构
2,形式
3,代码实现
package cn.tedu.basic;
import java.util.Scanner;
/**需求:接收用户输入的原价,满1000打9折,满2000打8折,满5000打5折*/
public class TestDiscount {
public static void main(String[] args) {
//1.提示用户输入原价
System.out.println("请输入商品原价:");
//2.接收用户输入的原价
double price = new Scanner(System.in).nextDouble();
//3.计算打折后的价格
//3.1定义变量用来保存打折后的价格
double count = price;//初始值是商品的原价
//3.2判断用户的打折段位并打折
if(price >= 5000) {//满5000
count = price *0.5;//打5折
}else if(price >= 2000) {//满2000
count = price * 0.8;//打折8折
}else if(price >= 1000) {//满1000
count = price *0.9;//打9折
}
// if(1000 <= price && price< 2000) {
// count = price *0.9;
// }else if(2000 <= price && price < 5000) {
// count = price * 0.8;
// }else if(price >= 5000) {
// count = price *0.5;
// }
//3.3输出用户实际支付的价格
System.out.println("您实际应该支付:"+count);
}
}
package cn.tedu.basic;
import java.util.Scanner;
/*本类用于判断学员分数的档位*/
public class TestScore {
public static void main(String[] args) {
//1.提示并接收学员的分数
System.out.println("请输入你的分数:");
int score = new Scanner(System.in).nextInt();
/*90分及以上 优秀
*80-89 良好
*70-79 中等
*60-69 及格
*60分及以下 不及格 */
/**为了增强程序的健壮性,如果用户输入的数据不符合规则,就结束*/
if(score <0 || score >100 ) {
System.out.println("输入数据不合法,请重新输入!!!");
}else {
//2.判断分数的段位,并输出结果
if(score >= 90) {//大于90
System.out.println("优秀!");
//}else if(score>=80 && score <=89) {
}else if(score>=80) {//[80,90)
System.out.println("良好!");
}else if(score>=70) {//[70,80)
System.out.println("中等!");
}else if(score>=60) {//[60,70)
System.out.println("及格!");
}else {//小于60
System.out.println("不及格!");
}
}
}
}
二,switch结构
2.1概述
switch case 语句用来判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
当一个case成立,从这个case向后穿透所有case,包括default,直到程序结束或者遇到break程序才结束。
2.2形式
2.3代码实现
package cn.tedu.basic;
/*本类用于练习switch结构*/
/**总结:
* 1.变量a的类型byte short char int String
* 2.会拿着变量a的值依次与case后的值做比较,如果不加break,
* 会向后穿透所有case,包括default
* 3.如果设置了default“保底选项”,并且没有任何case匹配到的话,就执行default
* 4.break与default是可选项,根据具体业务来决定加不加
* */
public class TestSwitch {
//1.创建程序的入口函数main
public static void main(String[] args) {
//2.定义一个变量
int a = 19;
//3.完成switch结构的测试
switch(a) {
case 1 : System.out.println(1);break;
case 2 : System.out.println(2);break;
case 3 : System.out.println(3);break;
case 4 : System.out.println(4);break;
case 5 : System.out.println(5);break;
default : System.out.println(0);
}
}
}
package cn.tedu.basic2;
/**本类用来测试switch结构2*/
public class TestSwitch2 {
public static void main(String[] args) {
String day = "星期五";
switch(day) {
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("想吃点啥吃点啥吧~");
}
}
}
三,for循环结构
3.1概述
循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。
它由循环体中的条件,判断继续执行某个功能还是退出循环。
根据判断条件,循环结构又可细分为先判断后执行的循环结构和先执行后判断的循环结构。
3.2形式
3.3 for循环执行顺序
3.4代码实现
package cn.tedu.basic;
/**本类用来测试循环结构for循环*/
public class TestFor {
public static void main(String[] args) {
//需求:打印100次自己的宣言
//for(开始条件;循环条件;更改条件){循环体;}
for(int i = 1;i<=100;i++) {
System.out.println(“又不是没那条件,干就完啦!”);
}
//需求:打印0到10
//for(开始条件;循环条件;更改条件){循环体;}
//0 1 2 3 4 5 6 7 8 9 10
//从哪开始:0
//到哪结束:10
//怎么变化:+1 ++
for(int i = 0;i<=10;i++) {
System.out.println(i);
}
System.out.println("**********************");
//需求:打印10到0
//10 9 8 7 6 5 4 3 2 1 0
//从哪开始:10
//到哪结束:0
//怎么变化:-1 --
//for(开始条件;循环条件;更改条件){循环体}
for(int i = 10 ;i >= 0;i--) {
System.out.println(i);
}
//需求:打印8,88,888,8888,
//8 88 888 8888
//从何开始:8
//到哪结束:8888
//如何变化:*10+8
for(int i =8 ; i <= 8888 ; i=i*10+8) {
System.out.print(i+",");//使用的是print(),打印后不换行
}
}
}
package cn.tedu.basic;
/*本类用于测试for循环结构2*/
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<101;i++) {
//3.过滤出来要统计个数的偶数
if(i % 2 ==0) {//说明这是一个偶数
//4.对偶数的个数进行累计
//count = count +1;
count++;
//++count;
}
}
//5.打印最终统计的个数
System.out.println(count);
}
/*需求:求出1-100以内所有偶数的和*/
private static void m2() {
//1.定义变量用来保存最终求和的结果
int sum = 0;
//2.创建循环,依次循环1-100范围内的数
for(int i = 1;i <101;i++) {
//3.过滤出来需要累加的偶数
if(i%2 == 0) {
//if(i%2 == 1) {//过滤奇数
//4.能进来,说明是偶数,累加
sum = sum +i;
}
}
//5.在for循环结束以后,打印所有偶数累加的和
System.out.println(sum);
}
/*需求:求出1-100以内所有数的和*/
private static void m1() {
//1.定义一个变量用来保存求和的结果
int sum = 0;
//2.创建循环,依次循环1-100范围内的数
for(int i = 1;i<=100;i++) {
//3.将本轮循环到的数字累加到最终的结果中
sum = sum + i;
}
//4.打印最终累加的结果
System.out.println(sum);
}
}
四,嵌套for循环
4.1概述
存在至少2层for循环,根据外层的条件,判断里层能否执行
如果能执行,就把里层代码都循环完毕后,再继续判断是否执行外层循环的下一次循环
4.2形式
4.3代码实现
package cn.tedu.basic;
/*本类用于测试嵌套for循环*/
public class TestForDemo {
public static void main(String[] args) {
//执行顺序
//执行外层循环第一轮,i=1,打印1,遇到内层循环,打印12345,i自增成2
//执行外层循环第二轮,i=2,打印2,遇到内层循环,打印12345,i自增成3
//执行外层循环第三轮,i=3,打印3,遇到内层循环,打印12345,i自增成4
//i为4,不满足循环条件,循环结束
/**总结:外层循环执行一次(控制轮数)
* 内层循环执行多次(在每一轮中执行的次数)*/
for(int i = 1; i<=3;i++) {//外层循环
System.out.println("外层循环的第:"+i+"轮");
for(int j = 1; j <=5 ; j++) {//内层循环
System.out.println("内层循环的第"+j+"次");
}
}
System.out.println("**************打印矩形******************");
//执行顺序分析:
//外层第一轮i=1,遇到内层循环,打印*****,内层循环结束,换行,i自增成2
//外层第二轮i=2,遇到内层循环,打印*****,内层循环结束,换行,i自增成3
//外层第三轮i=3,遇到内层循环,打印*****,内层循环结束,换行,i自增成4
//此时i的值为4,不符合循环条件,循环结束
/**总结:外层循环控制的是行数
* 内层循环控制的是每行打印的列数*/
for(int i = 1;i<=3;i++) {
for(int j = 1;j<=5;j++) {
System.out.print("*");
}
System.out.println();//用空白行来换行
}
}
}
package cn.tedu.basic;
/**需求:利用for循环,打印左直角三角形*/
//行1星1 *
//行2星2 * *
//行3星3 * * *
//行4星4 * * * *
//行i星i * * * * *
public class TestForTriangle {
public static void main(String[] args) {
for(int i = 1;i<6;i++) {//外循环
for (int j = 1; j <=i; j++) {//内循环
//注意:需要修改内循环的循环条件,让j的最大值随着i改变,否则写死了
System.out.print("*");//在同一轮/同一行打印不换行
}
System.out.println();//空白行用来换行
}
}
}
package cn.tedu.basic;
/**本类用于测试完成99乘法表*/
//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 TestFor99Excel {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {//控制行数,打印9行
for (int j = 1; j <= i; j++) {//控制列数,i行打印i列
//System.out.println("*");--打印左直角三角形
//System.out.println("2*3=6");2--i 3--j 6--i*j
//拼接打印算式,后面拼接一个"\t"表示这是表格格式,\t也被称作制表符
System.out.print(j+"*"+i+"="+(i*j)+"\t");
}
System.out.println();//空白行用来换行
}
}
}
4.4break与continue
4.4.1概念
break: 直接结束当前循环,跳出循环体,简单粗暴
break以后的循环体中的语句不会继续执行,循环体外的会执行
注意如果是嵌套for循环,在内层循环遇到了break,只会跳出当前这一层内循环哦
continue: 跳出本轮循环,继续下一轮循环
continue后本轮循环体中的语句不会继续执行,但是会继续执行下轮循环,循环体外的也会执行
4.4.2代码实现
package cn.tedu.method;
import java.util.Scanner;
/**需求:找数字88
* 提示并接受用户输入100次数字,如果不是88,则继续输入,找到88就结束*/
public class TestBreakAndContinue {
public static void main(String[] args) {
//循环体可以帮助我们执行重复的事情,控制for循环执行100次
for(int i = 1;i <= 100; i++) {
//在每一次循环中都要提示并接收用户输入的数字
System.out.println("请输入数字:");
int input = new Scanner(System.in).nextInt();
if(input != 88) {//用户输入的不是88
continue;//直接继续输入
/**注意,不管是不是加continue,都可以在猜不对的情况下继续输入
* 只不过加了continue后效率更高,只要数据不等于88,就无需执行后面的代码
* 直接进行下一轮的猜数字即可* */
/**break或者continue之后都不允许写代码,都是不可到达的代码*/
//System.out.println(0);//Unreachable code
}
System.out.println("我是用来测试continue有没有跳过循环后半部分代码的哦");
if(input == 88) {//找到88了
System.out.println("恭喜您,猜对了!");
break;//结束程序
//System.out.println(0);//Unreachable code
}
}
}
}
五,循环结构 : while
5.1形式(先判断,再执行)
5.2代码实现
package cn.tedu.method;
import java.util.Random;
import java.util.Scanner;
/**
* 本类用于练习while循环
* 需求: 产生一个随机数,和用户一直在输入的数字做比较,直到用户猜对
* */
public class TestWhile {
public static void main(String[] args) {
int r = createNum();//调用可以生成随机数的方法,并且接收生成的随机数
System.out.println("打个小抄:"+r);
//调用猜数字方法1--while
guessNum(r);
}
//创建猜数字的方法
public static void guessNum(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;
}
}
}
//创建一个用来生成随机数的方法
public static int createNum() {
//让程序产生一个随机数
//java.util.Random,注意导包,快捷键:Ctrl+Shift+O
int random = new Random().nextInt(100);//参数100是自定义的,此时生成的随机数范围是[0,100)的整数
return random;
}
}
六,循环结构 : do-while
6.1形式(先执行,再判断,循环体代码保证最少执行一次)
6.2代码实现
private static void f2() {
int n;
do {
System.out.println("我是循环体");
n = new Random().nextInt(300);//生成随机数的范围[0,300)
System.out.println(n);
}while(n>100);
}
拓展
三种循环的区别
- for:知道循环次数
- while/do while:当循环次数不确定时
- while:先判断,不符合规则,不执行代码
- do while:代码最少被执行一次,再去判断,符合规则,再次执行代码
- 循环之间都可以互相替代,但是一般最好选择合适的循环结构来完成代码哦~
打印半三角形
*
**
***
****
*****
package day999;
public class a {
public static void main(String[] args) {
//输出5行
for(int i=1;i<=5;i++){
//空格三角
for(int x=5;x>i;x--){
System.out.print(" ");
}
//*号三角
for(int j=1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
}
}
打印全三角形
*
***
*****
*******
*********
package day999;
public class a {
public static void main(String[] args) {
//打印5行
for(int i=1;i<=5;i++){
//打印空格的倒三角
for(int j=5;j>=i;j--){
System.out.print(" ");
}
//打印*号的正三角
for(int k=1;k<=i*2-1;k++){
System.out.print("*");
}
System.out.println();
}
}
}