1、顺序结构
2、分支结构
(1)if语句
package com.laogao.practice;
public class ControlPractice {
public static void main(String[] args) {
System.out.println("控制语句练习");
// 1、分支结构
// 格式1:if(条件){……}
int apples=18;
if (apples>20){//括号内只有一行代码时,可以去掉大括号
System.out.println("苹果数量大于20");
}
// 格式2:if(条件){……}else{……}
int age=10;
if(age>=18){
System.out.println("成年");
}else{
System.out.println("未成年");
}
// 格式3:if(条件1){……}else if(条件2){……}else if(条件3){……}else{……}
int score=188;
if(score<=100&&score>=90){
System.out.println("优秀");
}else if(score<90&&score>=80){
System.out.println("良好");
}else if(score<80&&score>=60){
System.out.println("及格");
}else if(score<60){
System.out.println("不及格");
}else{
System.out.println("有误");
}
}
}
(2)switch语句,结构清晰,格式良好
package com.laogao.practice;
import java.util.Scanner;
public class ControlPractice {
public static void main(String[] args) {
System.out.println("控制语句练习");
// 2、switch分支结构
Scanner scanner=new Scanner(System.in);
System.out.println("你想知道什么食材的做法");
String food=scanner.next();
switch (food){
case "兔子":
System.out.println("红烧兔头");
break;
case "鱼":
System.out.println("松鼠桂鱼");
break;
case "牛":
System.out.println("酱牛肉");
break;
default:
System.out.println("没有");
}
}
}
注意:case的值不能是变量,需要是明确的字面量,字面量值不能重复;break不要忘记,丢了会穿透;不支持double、float、long,因为底层运算中不是很精确。
switch的穿透性:也就是不写case,可以解决代码冗余的问题
使用场景:多个分支中功能代码一样时候
package com.laogao.practice;
public class ControlPractice {
public static void main(String[] args) {
System.out.println("控制语句练习");
// switch穿透性
String classroom="1班";
switch (classroom){
case "1班":
System.out.println("35人");
break;
case "2班":
System.out.println("35人");
break;
case "3班":
System.out.println("35人");
break;
case "4班":
System.out.println("40人");
break;
case "5班":
System.out.println("40人");
break;
case "6班":
System.out.println("40人");
break;
case "7班":
System.out.println("30人");
break;
case "8班":
System.out.println("30人");
break;
}
}
}
上述代码冗余,修改代码如下:
package com.laogao.practice;
public class ControlPractice {
public static void main(String[] args) {
System.out.println("控制语句练习");
// switch穿透性
String classroom="1班";
switch (classroom){
case "1班":
case "2班":
case "3班":
System.out.println("35人");
break;
case "4班":
case "5班":
case "6班":
System.out.println("40人");
break;
case "7班":
case "8班":
System.out.println("30人");
break;
}
}
}
总结:if功能比switch强大,if适合做区间匹配;switch适合做:值匹配的分支选择。
3、循环结构(代码反复执行多次)
(1)for
package com.laogao.practice;
public class JavaPractice {
public static void main(String[] args) {
//for(初始化语句;循环语句;迭代语句){……}循环格式
for (int i=0;i<5;i++){
System.out.println("第"+(i+1)+"次循环");
}
}
}
案例1:前n项和,(for循环快捷键fori)
package com.laogao.practice;
public class JavaPractice {
public static void main(String[] args) {
// 案例1:前n项和
int n=6;
int sum1=0;
for (int i=0;i<=n;i++){
sum1+=i;
}
System.out.println(sum1);
// 案例2:奇数和
int sum2=0;
int sum3=0;
for (int i = 0; i <= n; i++) {
if (i%2==1){
sum2+=i;
}
}
// 求奇数和法2,修改初始语句和迭代语句
for (int i = 1; i <= n; i+=2) {
sum3+=i;
}
System.out.println(sum2);
System.out.println(sum3);
}
}
案例2:水仙花数(三位数,每一位上的数的立方和等于原数)
package com.laogao.practice;
public class JavaPractice {
public static void main(String[] args) {
// 案例2:水仙花数
int ge,shi,bai;
for (int i = 100; i <= 999; i++) {
ge=i%10;
shi=i/10%10;
bai=i/100;
if((ge*ge*ge+shi*shi*shi+bai*bai*bai)==i){
System.out.print(i+"\t");
}
}
}
}
(2)while
package com.laogao.practice;
public class JavaPractice {
public static void main(String[] args) {
// while循环
int i=0;
while (i<3){
System.out.println("hhh");
i++;
}
}
}
while和for什么时候用:
知道循环几次用for,不知道建议用while
案例1:用纸折出珠穆拉玛峰高度,不确定循环几次
package com.laogao.practice;
public class JavaPractice {
public static void main(String[] args) {
// 案例1:珠穆朗玛峰
double peakHeight=8848860;//山高
double paperThickness=0.1;//纸高
int count=0;//记录折叠了几次
while (paperThickness<peakHeight){
paperThickness*=2;
count++;
}
System.out.println(count);
System.out.println(paperThickness);
}
}
运行结果如下:
(3)do-while,先循环,在判断条件
使用场景:抢票
package com.laogao.practice;
public class JavaPractice {
public static void main(String[] args) {
// do-while
// 学习目标:学会使用,并理解执行流程
int i=0;
do {
System.out.println("hhh");
}while(i<3);
}
}
注意:for中控制循环的变量i,只在循环中可以使用;while中,控制循环的变量循环语句后还可以用
(4)其他循环形式
1、死循环
package com.laogao.practice;
public class JavaPractice {
public static void main(String[] args) {
// 死循环
// 学习目标:学会定义死循环
for (; ; ) {
System.out.println("hhh");
}
// 经典死循环写法
while (true){
//当该循环前边还有死循环时,会报错,因为一直执行不到
//解决办法:隐藏上边的死循环
System.out.println("hhh");
}
do {
System.out.println("hhh");
}while (true);
}
}
案例1:密码验证
package com.laogao.practice;
import java.util.Scanner;
public class JavaPractice {
public static void main(String[] args) {
// 案例:密码验证
int rightPsw=123;//正确密码
Scanner scanner=new Scanner(System.in);//键盘输入
while(true){
System.out.println("请输入正确密码:");
int content=scanner.nextInt();
if (content==rightPsw){
System.out.println("密码正确");
break;//跳出循环
}else {
System.out.println("密码错误");
}
}
}
}
2、嵌套循环,五行三列
package com.laogao.practice;
public class JavaPractice {
public static void main(String[] args) {
// 嵌套循环
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
运行结果如下:
(5)跳转关键字:break、continue
break:跳出循环,只能用于循环/switch
continue:结束本次循环(continue后的语句不执行了),进入下一次循环,只能用于循环
(6)随机数:Random
1、导包(不用自己写)
2、创建随机对象
3、调用方法
package com.laogao.practice;
import java.util.Random;
public class JavaPractice {
public static void main(String[] args) {
// 随机数
Random random = new Random();
for (int i=0;i<10;i++) {
int data = random.nextInt(10);//0~9的随机数
System.out.println(data);//将选中的代码快速放进循环中,快捷键ctrl+alt+t,再5
}
}
}
案例1:猜数字
package com.laogao.practice;
import com.sun.org.apache.xerces.internal.impl.xs.SchemaNamespaceSupport;
import java.util.Random;
import java.util.Scanner;
public class JavaPractice {
public static void main(String[] args) {
// 随机数
Random random = new Random();
Scanner scanner=new Scanner(System.in);
int data = random.nextInt(100)+1;//1-100的随机数
while (true){
System.out.println("请输入:");
int content=scanner.nextInt();
if (data==content){
System.out.println("成功了");
break;
}
else if(content>data){
System.out.println("大了");
}
else if(content<data){
System.out.println("小了");
}
}
}
}