分支控制
/*
基本语法
if (条件表达式) {
if语句块
}
*/
int a = 10;
if ( a > 8 ) {
System.out.println("进入了if语句块");
}
/*
基本语法
if (条件表达式) {
if语句块
} else {
else语句块
}
*/
int a = 10;
if ( a > 8 ) {
System.out.println("进入了if语句块");
} else {
System.out.println("进入了else语句块");
}
/*
基本语法
if (条件表达式) {
if语句块
} else if {
else if 语句块
} else {
else语句块
}
*/
int a = 10;
if ( a > 8 && a <= 10) {
System.out.println("进入了if语句块");
} else if (a >= 10 && a <= 12) {
System.out.println("进入了else if 语句块");
} else {
System.out.println('进入了else语句块');
}
/*
基本语法
if (条件表达式) {
if () {
} else {
}
} else {
else语句块
}
*/
int a = 10;
int b = 100;
if ( a > 8 && a <= 10) {
if( b > 77 ) {
System.out.println('b大于77');
} else {
System.out.println('b小于77');
}
} else {
System.out.println('进入了else语句块');
}
/*switch(表达式){
case 表达式常量1:
语句1;
[ break;] // [ ] 表示可选
case 表达式常量2:
语句2;
[ break;]
......
case 表达式常量n:
语句n;
[ break;]
[default:语句n+1;]
}
*/
// 输出今天是今年的第几天
import java.util.Scanner;
public class test_3 {
public static void main(String[] args) {
int sumDays = 0;
Scanner scan = new Scanner(System.in);
System.out.println("请输入年份:");
int year = scan.nextInt();
System.out.println("请输入月:(1-12)");
int mouth = scan.nextInt();
System.out.println("请输入日:(1-31)");
// 输入一个整型天数
int day = scan.nextInt();
switch (mouth){
case 12:
sumDays += 30;
case 11:
sumDays += 31;
case 10:
sumDays += 30;
case 9:
sumDays += 31;
case 8:
sumDays += 31;
case 7:
sumDays += 30;
case 6:
sumDays += 31;//6月24日 31+29+31+30+31+24
case 5:
sumDays += 30;
case 4:
sumDays += 31;
case 3:
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
sumDays += 29;
}else {
sumDays += 28;
}
//sumDays += 29;
case 2:
sumDays += 31;
case 1:
sumDays += day;
System.out.println(year + "年" + mouth + "月" + day + "日是" + year +"年的第" +sumDays + "天");
}
}
}
注意细节
练习
import java.util.Scanner;
public class SwitchExercise{
public static void main(String[] args) {
// 判断季节 (采用穿透的性质)
System.out.println("请输入1-12月:");
Scanner myScanner = new Scanner(System.in);
int month = myScanner.nextInt();
switch(month){
case 3:
case 4:
case 5:
System.out.println(month + "月是春季");
break;//必须要有一个break来终止穿刺
case 6:
case 7:
case 8:
System.out.println(month + "月是夏季");
break;
case 9:
case 10:
case 11:
System.out.println(month + "月是秋季");
break;
case 1:
case 2:
case 12:
System.out.println(month + "月是冬季");
break;
default:
System.out.println("请输入正确的月份");
break;
}
}
}
循环控制
public class forExercise {
public static void main(String[] args) {
/*
基本语法
for(初始化语句;循环条件语句;控制条件语句) {
循环体语句
}
*/
for(int i = 1; i <= 3; i++ ) {
System.out.println("我爱写代码");
}
}
}
public class forExercise {
public static void main(String[] args) {
/*
基本语法
for(初始化语句;循环条件语句;控制条件语句) {
循环体语句
}
*/
for(int i = 1; i <= 3; i++ ) {
for(int j = 1; j <= 2; j++) {
System.out.println("我爱写代码");
}
}
}
}
```
* **练习题**
```java
import java.util.Scanner; // 导入类
public class MulForExercise {
public static void main(String[] args) {
/* 1.统计2个班的情况,每个班有3个同学
- 求出各班的平均分和所有班级的平均分
- 统计及格人数
*/
Scanner myScanner = new Scanner(System.in);
int classNum = 2;
int stuNum = 3;
double allScore = 0; // 所有总分
int passNum = 0; // 统计及格人数
for(int i = 1; i <= classNum; i++) {
double totalScore = 0; // 统计每个班的总分
for(int j = 1; j <= stuNum; j++) {
System.out.print("请输入" + i + "班" + j + "个同学的成绩:");
int socre = myScanner.nextInt();
totalScore += socre;
allScore += socre;
if( socre >= 60 ) {
passNum += 1;
}
}
System.out.println(i + "班的平均分为:" + (int)(totalScore/stuNum));
}
System.out.println("总分数为:" + allScore + "总平均分为" + (allScore/(stuNum*classNum)));
// 2.打印九九乘法表
for(int i = 1; i <= 9; i++) {
for(int j = 1; j <= i; j++) {
System.out.print(i + "x" + j + "\t");
}
System.out.println(""); // 换行
}
}
}
/*
while(条件表达式){
循环体语句z
条件控制语句
}
*/
int num = 1;
while(num < 10) {
System.out.println("num=" + num);
num ++;
}
```
* 注意细节
- 条件表达式必须要能够返回一个boolean类型的值
- while必须要有条件控制语句,不然会形成死循环
+ **dowhile循环**
* 基本语法
```java
/*
do {
循环体语句
条件控制语句
} while(条件表达式)
*/
int num = 1;
do {
System.out.println("num=" + num);
num ++;
} while(num < 10);
```
* 注意事项
- 条件表达式必须要能够返回一个boolean类型的值
- dowhile语句,循环体一定会被执行一次
+ **braek、continue、return控制语句**
* **break**
- break 用于中断此次的循环,直接跳循环,但是不退出程序
- 一般用于 while、for、dowhile、switch
* **continue**
- continue 用于跳过此次循环,直接进入下一循环,也不退出程序
- 一般用于 while、for、dowhile、switch
* **return**
- return 用于退出程序,直接结束程序的执行,循环后的代码不再执行
* 三者的异同点
- continue、break 两者都不会退出程序,循环后的代码仍可以执行
- continue、break 可以通过标签 label 来指定跳出哪一级循环
```java
public class forExercise {
public static void main(String[] args) {
/*
基本语法
for(初始化语句;循环条件语句;控制条件语句) {
循环体语句
}
*/
label1:
for(int i = 1; i <= 3; i++ ) {
label2:
for(int j = 1; j <= 2; j++) {
System.out.println("我爱写代码");
if(j == 2) {
// break; // 默认是跳出内层循环
break label1 // 跳出外层循环
}
}
}
}
}
public class ControlProcessExercise {
public static void main(String[] args) {
/*
某人有100000元,经过一个路口,需要缴费:
1.当现金>50000元时,每次交5%
2.当现金<=50000元时,每次交1000
可以经过多少次路口?
*/
int money = 100000;
int times = 0;
while(money > 0) {
if( money >50000 ) {
money -= money * 0.05;
times +=1;
} else if (money <= 50000 && money >= 1000) {
money -=1000;
times +=1;
} else{
break;
}
}
System.out.println("可以经过" + times + "次路口");
// 二、判断一个整数是不是水鲜花数
System.out.print("请输入一个整数:");
int num = myScanner.nextInt();
int verification = num;//保存num 后面用来验证是否想的
int total = 0;
while(num >0) {
int remainder = num % 10;
total += remainder*remainder*remainder;
num = num / 10;
}
if( total == verification) {
System.out.println(verification + "这个数是水仙花数");
} else {
System.out.println(verification + "这个数不是水仙花数");
}
// 三、输出1-100之间的不能被5整除的数,每五行一个
int count = 0; // 用来控制换行
for (int i =1; i<=100; i++) {
if(i % 5 == 0) {
continue;
} else {
System.out.print(i + "\t");
count ++;
if(count == 5){
System.out.println("");
count = 0;
}
}
}
// 四、 1-1/2+1/3+1/4....1/100 的和
double total = 0;
// 注意初始化定义,1/(double)i
for(double i = 1; i <= 100; i++) {
if(i % 2 == 0) {
total -= (1 / i);
} else {
total += (1 / i);
}
}
System.out.println(total); // 0.688172179310195
// 五、计算 1 + (1+2) + (1+2+3) + ... + (1+...+100)
int total = 0;
for (int i = 1; i <= 100; i++) {
for(int j = 1; j <= i; j++) {
total += j;
}
}
System.out.println(total);// 171700
/*
六、打印空心等腰三角形
*
* *
* *
* *
*********
*/
int starLevel = 10;
// 控制打印行数
for(int i = 1; i <= starLevel; i++) {
for(int k = starLevel-i; k >0; k--) {
System.out.print(" ");
}
// 控制打印个数
for(int j = 1; j <= 2*i - 1; j++) {
// 如果是 第一个或是最后一个打印星星,或者最后一行打印星星
if(j == 1 || j == 2*i - 1 || i == starLevel) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println(""); // 换行
}
}
}