1)顺序控制
程序从上到下逐行执行,中间没有任何判断和跳转。
2)分支控制
(1)单分支
if(条件表达式){
执行代码;
}
条件表达式为true则执行代码,如果为false则不执行。
(2)双分支
if(条件表达式){
执行代码1;
}
else{
执行代码2;
}
练习题
import java.util.Scanner;
public class Hello{
public static void main(String args[]){
//第一题
Scanner myScanner = new Scanner(System.in);
System.out.println("输入第一个数");
double num1 = myScanner.nextDouble();
System.out.println("输入第二个数");
double num2 = myScanner.nextDouble();
if ((num1>10.0)&&(num2<20.0)){
System.out.println(num1 + num2);
}
//第二题
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入一个数");
int num1 = myScanner.nextInt();
if ((num1%3==0)&&(num1%5==0)){
System.out.println("既能被3整除又能被5整除");
}
// 第三题
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入一个年份:");
int year = myScanner.nextInt();
if (((year%4==0)&&(year%100!=0))||(year%400==0)){
System.out.println("这一年是闰年");
}
}
}
(3)多分支
if(条件表达式){
执行代码1;
}
else if(条件表达式2) {
执行代码2;
}
……
else{
执行代码块n;
}
多分支可以没有else,即上面的绿色部分。如果所有的条件表达式都不成立,则一个执行入口都没有,如果有else,如果所有的条件表达式都不成立,则执行默认模块n
import java.util.Scanner;
public class Hello{
public static void main(String args[]){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入芝麻信用分");
int score = myScanner.nextInt();
if (score == 100){
System.out.println("信用极好");
}
else if((score > 80)&&(score <= 99)){
System.out.println("信用优秀");
}
else if((score >= 60)&&(score <= 80)){
System.out.println("信用一般");
}
else {
System.out.println("信用不及格");
}
}
}
(4)嵌套分支
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支,外面的分支结构称为外层分支。一般不要超过3层(可读性不好)
if(){
if(){
//if else
}else{
//if else
}
}
import java.util.Scanner;
public class Hello{
public static void main(String args[]){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入月份");
int jan = myScanner.nextInt();
if ((jan>0)&&(jan<13))
{
System.out.println("请输入年龄");
int age = myScanner.nextInt();
if ((jan>3)&&(jan<11)){
if ((age>=18)&&(age<=60)){
System.out.println("票价为60");
} else if (age<18){
System.out.println("票价为30");
} else {
System.out.println("票价为20");
}
}else{
if ((age>=18)&&(age<=60)){
System.out.println("票价为40");
}else{
System.out.println("票价为20");
}
}
}else{
System.out.println("输入月份错误,请重新输入");
}
}
}
switch(表达式){
case 常量1://当…
语句块1;
break;//跳出switch结构
case 常量2://如果1没有break则执行2
语句块2;
break;
…
case 常量n://当…
语句块n;
break;
default;//没有匹配上则执行default
default语句块;
break;
}
import java.util.Scanner;
public class Hello{
public static void main(String args[]){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入一个字符");
char day = myScanner.next().charAt(0);
switch (day){
case 'a':
System.out.println("星期一");
break;
case 'b':
System.out.println("星期二");
break;
case 'c':
System.out.println("星期三");
break;
case 'd':
System.out.println("星期四");
break;
case 'e':
System.out.println("星期五");
break;
case 'f':
System.out.println("星期六");
break;
case 'g':
System.out.println("星期日");
break;
default:
System.out.println("无对应");
break;
}
}
}
switch中只允许使用byte,int,short,char,enum(枚举),String
case语句中的值只能是常量或常量表达式,不能是变量
default可以有也可以没有
如果case1里没有break;则不判断case2,执行case2的语句
import java.util.Scanner;
public class Hello{
public static void main(String args[]){
Scanner myScanner = new Scanner(System.in);
// System.out.println("请输入一个字符");
// char cha = myScanner.next().charAt(0);
// switch (cha){
// case 'a':
// System.out.println("A");
// break;
// case 'b':
// System.out.println("B");
// break;
// case 'c':
// System.out.println("C");
// break;
// case 'd':
// System.out.println("D");
// break;
// case 'e':
// System.out.println("E");
// break;
// default:
// System.out.println("other");
// break;
// }
// 取整来表示是否合格
// System.out.println("输入成绩");
// int score = myScanner.nextInt();
// score = score/60;
// switch (score){
// case 1 :
// System.out.println("及格");
// break;
// case 0 :
// System.out.println("不及格");
// break;
// }
// 3、使用穿透比较简洁
System.out.println("请输入月份:");
int y = myScanner.nextInt();
switch (y){
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
}
}
}
switch和if的比较
1、如果判断的具体数值不多,而且都符合byt short int char enum String这6种类型。虽然两个语句都可以使用,建议使用switch语句。
2、其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
3)循环控制
for(循环变量初始化;循环条件;循环变量迭代){
循环操作(可以多条语句);
}
运行程序之后循环变量会迭代
可以改写为:
循环变量初始化;
for(;循环条件;){
循环操作(可以多条语句);
循环变量迭代;
}
while循环控制
while(循环条件){
循环体(语句);
循环变量迭代;
}
while也有四要素,只是四要素放的位置,不一样。while返回的是一个布尔类型的值
for 一般用在确定循环次数 while 用在不确定循环次数使用 比如按某个按键退出程序
public class Hello{
public static void main(String args[]){
int i = 40;
while (i<=200){
if(i%2==0){
System.out.println(i);
}
i++;
}
}
}
do…while循环控制
do{
循环体(语句);
循环变量迭代;
}while(循环条件);
1、do while是关键字
也有循环四要素,只是位置不一样
先执行再判断
最后有一个分号