第3章 流程控制语句
3.1 if条件语句
单分支if语句
...CodeA
if (布尔表达式) {
语句组;
}
...CodeB
判断一个点是否在圆里面Demo26
import java.util.Scanner;
public class Demo26{
/*
数据:点坐标x y 圆心坐标0 0 半径10 点到圆心距离distanc
*/
public static void main(String[] args){
//1.提示用户输入一个点坐标
Scanner input = new Scanner(System.in);
System.out.print("Enter a point:");
double x = input.nextDouble();
double y = input.nextDouble();
double ox = 0;
double oy = 0;
double rad = 10;
//2.计算点到圆心距离
double distance = Math.sqrt(Math.pow(x - ox, 2) + Math.pow(y - oy , 2));
//3.计算距离与半径的大小关系
if(distance > rad) {
System.out.println("Point ("+ x + "," + y + ") is not");
}else{
System.out.println("Point ("+ x + "," + y + ") is in ");
}
System.out.println("not");
}
}
多分支if-else-if语句
...CodeA
if (布尔表达式1) {
语句组A;
} else if (布尔表达式2) {
语句组B;
} else if (布尔表达式3) {
语句组C;
} else {
语句组D;
}
...CodeB
Demo17BMI指数计算
import java.util.Scanner;
public class Demo17{
public static void main(String[] args){
//1.输入以千克为单位的体重 以米为单位的身高
Scanner input = new Scanner(System.in);
System.out.print("Enter weight(kg) and height(m):");
double weight = input.nextDouble();
double height = input.nextDouble();
//2.计算BMI
double BMI = weight / height / height;
//3.对BMI进行分类
if (BMI < 18.5) {
System.out.println("偏瘦");
} else if (BMI < 25.0) {
System.out.println("正常");
} else if (BMI < 30.0) {
System.out.println("超重");
} else {
System.out.println("过胖");
}
}
}
3.2 switch分支语句
与if分支语句一样,都是对条件的判断。switch一般用在条件较多的情况下,但是有一个重要的细节
及时,if语言可以对区间值或固定值进行判断,switch只能对固定值进行判断。
switch (变量) {
case 值1: //if (变量==值1) {语句组A;}
语句组A;
break;
case 值2:
语句组B;
break;
...
case 值n: //if (变量==值n) {语句组N;}
语句组N;
default: // else {语句组N+1;}
语句组N+1;
break;
}
switch的一些使用细节
- switch所传入的变量,char,byte,short,int,String或者枚举类型
- 值1,值2,一直到值n,这几个值必须是同一个数据类型的
- 当变量匹配的相关case的值的时候,执行case中的语句,直到遇到break结束;如果该case语句中没有break,则继续向下执行,直到遇到另外一个break结束
public class Sample {
public static void main(String[] args) {
int a = 3;
switch (a) {
case 1:
System.out.println("case 1");
break;
case 2:
System.out.println("case 2");
break;
case 3:
System.out.println("case 3");
case 4:
System.out.println("case 4");
case 5:
System.out.println("case 5");
break;
default :
System.out.println("default");
break;
}
}
}
输入一个年份,来判断该年的属相是什么?
import java.util.Scanner;
public class Sample {
public static void main(String[] args) {
/*
2020 % 12 = 4 鼠年
2021 % 12 = 5 牛年
2032 % 12 = 4 鼠年
0 1 2 3 4 5 6 7 8 9 10 11
猴 鸡 狗 猪 鼠 牛 虎 兔 龙 蛇 马 羊
*/
Scanner input = new Scanner(System.in);
System.out.print("请输入年份:");
int year = input.nextInt();
int choice = year % 12;
switch (choice) {
case 0:
System.out.println("猴年");
break;
case 1:
System.out.println("鸡年");
break;
case 2:
System.out.println("狗年");
break;
case 3:
System.out.println("猪年");
break;
case 4:
System.out.println("鼠年");
break;
case 5:
System.out.println("牛年");
break;
case 6:
System.out.println("虎年");
break;
case 7:
System.out.println("兔年");
break;
case 8:
System.out.println("龙年");
break;
case 9:
System.out.println("蛇年");
break;
case 10:
System.out.println("马年");
break;
case 11:
System.out.println("羊年");
break;
}
}
}
3.3 for循环语句
循环主要解决具有规律性的且具有重复性的代码问题,避免程序冗余
//将一个数字所有位数拆开 相加
//number = 123
number % 10 = 3
number /= 10 12
number % 10 = 2
number /= 10 1
number % 10 = 1
number /=10 0
循环四要素
- 1循环的初始化:循环的第1次执行从哪里开始
- 2循环的继续条件:循环从当前轮是否向后执行下一轮
- 3循环体:需要被循环执行的部分
- 4循环的步长、周期:当前循环到下一轮循环之间的变化
我们常见的循环问题可以分为两大类:
- 已知循环次数的 一般用for语句做
- 未知循环次数但是已知循环结束条件 一般用while语句做
for (1循环的初始化;2.循环的继续条件;4.循环的步长) {
3.循环体
}
1-2-3-4-2-3-4-2-3-4-2不满足则结束循环
for循环演示
public class homework {
public static void main(String[] args) {
/*
*****
*/
for (int i = 1; i <= 5; i++) {
System.out.print("*");
}
System.out.println();
System.out.println("=============================");
/*
*****
*****
*****
*****
*/
for (int j = 1; j <= 4; j++) {
for (int i = 1; i <= 5; i++) {
System.out.print("*");
}
System.out.println();
}
System.out.println("=============================");
/*
*
**
***
****
*****
******
*******
*/
for (int line = 1; line <= 7; line++) {
for (int i = 1; i <= line; i++) {
System.out.print("*");
}
System.out.println();
}
System.out.println("=============================");
/*
******
*****
****
***
**
*
*/
for (int line = 6; line >= 1; line--) {
for (int i = 1; i <= line; i++) {
System.out.print("*");
}
System.out.println();
}
System.out.println("=============================");
/* i j
* 1 1
** 2 1 2
*** 3 1 2 3
**** 4 1 2 3 4
***** 5 1 2 3 4 5
****** 6 1 2 3 4 5 6 j <= i
***** 7 1 2 3 4 5
**** 8 1 2 3 4
*** 9 1 2 3
** 10 1 2
* 11 1 j <= 12 - i
j <= i && j <= 12 - i
*/
for (int i = 1; i <= 11; i++) {
for (int j = 1; j <= i && j <= 12 - i; j++) {
System.out.print("*");
}
System.out.println();
}
System.out.println("=============================");
/* i |i - 6|
* 1 -5
** 2 -4
*** 3 -3
**** 4 -2
***** 5 -1
****** 6 0
***** 7 1
**** 8 2
*** 9 3
** 10 4
* 11 5
*/
for (int i = 1; i <= 11; i++) {
for (int k = 1; k <= Math.abs(i - 6); k++) {
System.out.print(" ");
}
for (int j = 1; j <= i && j <= 12 - i; j++) {
System.out.print("* ");
}
System.out.println();
}
System.out.println("=============================");
/* j
* 1
* * 1 2
* * 1 2 3
* * 1 2 3 4
* * 1 2 3 4 5
* * 1 2 3 4 5 6
* * 1 2 3 4 5
* * 1 2 3 4
* * 1 2 3
* * 1 2
* 1
j == 1 j == i j + i == 12
*/
for (int i = 1; i <= 11; i++) {
for (int k = 1; k <= Math.abs(i - 6); k++) {
System.out.print(" ");
}
for (int j = 1; j <= i && j <= 12 - i; j++) {
if (j == 1 || j == i || j + i == 12) {
System.out.print("* ");
} else {
System.out.print(" ");
}
}
System.out.println();
}
}
}
3.4 while循环语句
while循环主要用于解决循环次数未知,但循环结束条件已知的情况。
while其实和for循环是可以相互转换的,是因为都逃不开循环四要素:
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
可以转换为while循环
int i = 1;
while (i <= 5) {
System.out.println(i);
i++;
}
while的语法格式
1.循环的初始化
while (2.循环继续条件) {
3.循环体
4.循环的步长、周期
}
数字拆分求和
import java.util.Scanner;
public class Sample {
public static void main(String[] args) {
//1.输入一个未知长度的数字
Scanner input = new Scanner(System.in);
System.out.print("Enter a number:");
int number = input.nextInt();
//先获取到的是字符串 然后将字符串的内容进行解析 解析为数字
int sum = 0;
//2.拆分数字 将每次拆出来的数字进行累加->sum
while (number != 0) {
sum += number % 10;
number /= 10;
}
System.out.println(sum);
}
/*
Enter a number:12345678999
Exception in thread "main" java.util.InputMismatchException: For input string: "12345678999"
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at Sample.main(Sample.java:7)
*/
}
将上述代码,改为for循环
import java.util.Scanner;
public class Sample {
public static void main(String[] args) {
int sum = 0;
Scanner input = new Scanner(System.in);
System.out.print("Enter a number:");
for (int number = input.nextInt();number != 0;number /= 10) {
sum += number % 10;
}
System.out.println(sum);
}
}
猜数字的游戏 Demo32
import java.util.Scanner;
public class Demo32{
public static void main(String[] args){
//1.先产生一个随机数
/*
Math.random(); 产生一个[0,1)的小数
(int)[0,1) * 101 = [0,101)
*/
int com = (int) (Math.random() * 101);
System.out.println(com);
//2.让用户输入一个数字,来判断是否猜中
Scanner input = new Scanner(System.in);
System.out.print("Enter a number:");
while(true){
int usr = input.nextInt();
if (usr > com){
System.out.println("high");
}else if (usr < com) {
System.out.println("low");
}else {
System.out.println("niubility!");
break;
}
}
}
}
3.5 break、continue跳转语句
break在循环语句中叫做终止语句,终止的是break最近的一层循环
continue在循环语句中叫做跳过语句,跳过本次循环开启下一轮循环
import java.util.Scanner;
public class Sample {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
if (i == 3) {
break;
} else {
System.out.println(i);
}
}
//结果 1 2
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue;
} else {
System.out.println(i);
}
}
//结果 1 2 4 5
}
}
跳转标签