名词解释
- 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
- 其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:
- 顺序结构
- 程序从上到下逐行地执行,中间没有任何判断和跳转。
- 分支结构
- 根据条件,选择性地执行某段代码。
- 有if…else和switch-case两种分支语句。
- 循环结构
- 根据循环条件,重复性的执行某段代码。
- 有while、do…while、for三种循环语句。
- 注:JDK1.5提供了foreach循环,方便的遍历集合、数组元素
- 顺序结构
顺序结构
分支结构
if-else(条件判断)
if语句三种格式:
eg:
class IfTest{
public static void main(String[] args) {
//System.out.println("Hello World!");
//举例1
int heartBeats = 79;
if(heartBeats < 60 || heartBeats > 100){
System.out.println("需要进一步检查");
}
System.out.println("检查结束");
//举例2
int age = 23;
if(age < 19){
System.out.println("你还可以看动画片");
}else{
System.out.println("你可以看成人电影");
}
//举例3
age = 135;
if (age < 0){
System.out.println("您输入的数据非法");
}else if(age < 18){
System.out.println("青少年时期");
}else if(age < 35){
System.out.println("青状年时期");
}else if(age < 60){
System.out.println("中年时期");
}else if(age < 120){
System.out.println("老年时期");
}else{
System.out.println("你是要成仙啊!");
}
}
}
if语句例题1
岳小鹏参加Java考试,他和父亲岳不群达成承诺:
如果:
成绩为100分时,奖励一辆BMW;
成绩为(80,99]时,奖励一台iphone xs max;
当成绩为[60,80]时,奖励一个 iPad;
其它时,什么奖励也没有。
请从键盘输入岳小鹏的期末成绩,并加以判断
eg:
import java.util.Scanner;
class IfTest2{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入岳小鹏期末成绩");
int score = scan.nextInt();
if(score == 100){
System.out.println("奖励一辆BMW");
}else if(score > 80 && score <= 99){
System.out.println("奖励一台iPhone XS MAX");
}else if(score >= 60 && score <= 80){
System.out.println("奖励一个ipad");
}else{//这一步没有也可以编译。
System.out.println("什么奖励也没有");
}
}
}
总结:
- else结构是可选的。
- 针对条件表达式:
-如果多个条件表达式之间是互斥关系(或没有交集的关系),哪个判断和执行语句声明在上面还是在相面,无所谓。
-如果多个条件表达式之间是有交集的关系,需要根据实际情况考虑清楚应该将哪个结构声明在上面。
-如果多个条件表达式之间是有包含的关系,通常情况下,需要将范围小的声明在范围大的上面,否则,范围小的就没有机会执行了。
if语句例题2
编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。
eg:
import java.util.Scanner;
class IfTest3{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个整数:");
int num1 = scan.nextInt();
System.out.println("请输入一个整数:");
int num2 = scan.nextInt();
System.out.println("请输入一个整数:");
int num3 = scan.nextInt();
if (num1 > num2){
if (num1 < num3 )
System.out.println(num2 + "," + num1 + "," + num3);
else if(num2 > num3)
System.out.println(num3 + "," + num2 + "," + num1);
else
System.out.println(num2 + "," + num3 + "," + num1);
}else{
if (num2 < num3 )
System.out.println(num1 + "," + num2 + "," + num3);
else if(num1 > num3)
System.out.println(num3 + "," + num1 + "," + num2);
else
System.out.println(num1 + "," + num3 + "," + num2);
}
}
}
总结:
- if-else可以相互嵌套。
- 当执行语句只有一行,对应的“{}”可以省略。(但不建议省略)
if语句练习1——若有输出,指出输出结果
【1】
1)对下列代码,若有输出,指出输出结果。
int x = 4;
int y = 1;
if (x > 2) {
if (y > 2)
System.out.println(x + y);
System.out.println("atguigu");
} else
System.out.println("x is " + x)
【1改】
class IfExer{
public static void main(String[] args){
int x = 4;
int y = 1;
if (x > 2)
if (y > 2)
System.out.println(x + y);
else
System.out.println("x is " + x);
}
}
【2】
boolean b = true;
if(b == false)
System.out.println("a");
else if(b)
System.out.println("b");
else if(!b)
System.out.println("c");
else
System.out.println("d");
【2改】
boolean b = true;
if(b = false)
System.out.println("a");
else if(b)
System.out.println("b");
else if(!b)
System.out.println("c");
else
System.out.println("d");
答案:
【1】输出:atguigu
【1改】 输出:x is 4(else/就近原则,与if (y > 2)配对)
【2】 输出:b (else if(b)执行这一条。因为b=true)
【2改】输出:c (else if(!b)执行这条。因为!b=true)
if语句练习2
我家的狗5岁了,5岁的狗相当于人类多大呢?其实,狗的前两年每一年相当于人类的10.5岁,之后每增加一年就增加四岁。那么5岁的狗相当于人类多少年龄呢?应该是:10.5 + 10.5 + 4 + 4 + 4 = 33岁。
编写一个程序,获取用户输入的狗的年龄,通过程序显示其相当于人类的年龄。如果用户输入负数,请显示一个提示信息。
int dogAge = 6;
if (dogAge >= 0 && dogAge <= 2){
System.out.println("相当于人类:" + (dogAge * 10.5));
}else if (dogAge >2){
System.out.println("相当于人类:" + ((dogAge - 2) * 4 + 21));
}else{
System.out.println("狗狗还没出生呢!");
}
if语句练习3
假设你想开发一个玩彩票的游戏,程序随机地产生一个两位数的彩票,提示用户输入
一个两位数,然后按照下面的规则判定用户是否能赢。
1)如果用户输入的数匹配彩票的实际顺序,奖金10 000美元。
2)如果用户输入的所有数字匹配彩票的所有数字,但顺序不一致,奖金 3 000美元。
3)如果用户输入的一个数字仅满足顺序情况下匹配彩票的一个数字,奖金1 000美元。
4)如果用户输入的一个数字仅满足非顺序情况下匹配彩票的一个数字,奖金500美元。
5)如果用户输入的数字没有匹配任何一个数字,则彩票作废。
提示:使用(int)(Math.random() * 90 + 10)产生随机数。
import java.util.Scanner;
class TestCaiPiao{
public static void main(String[] args) {
//1、随机产生一个两位数
//System.out.println(Math.random());//产生[0,1)
int number = (int)(Math.random()*90 + 10);//[0.0,1.0)-->[0.0,90.0)-->[10.0,100.0)-->[10,99]
//System.out.println(number);
int numberShi = number/10;
int numberGe = number%10;
//2、用户输入一个两位数
Scanner input = new Scanner(System.in);
System.out.print("请输入一个两位数:");
int guess = input.nextInt();
int guessShi = guess/10;
int guessGe = guess%10;
if(number == guess){
System.out.println("奖金10 000美元");
}else if(numberShi == guessGe && numberGe == guessShi){
System.out.println("奖金3 000美元");
}else if(numberShi==guessShi || numberGe == guessGe){
System.out.println("奖金1 000美元");
}else if(numberShi==guessGe || numberGe == guessShi){
System.out.println("奖金500美元");
}else{
System.out.println("没中奖");
}
System.out.println("中奖号码是:" + number);
}
}
if语句练习4
大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:高:180cm以上;富:财富1千万以上;帅:是。
如果这三个条件同时满足,则:“我一定要嫁给他!!!”
如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”
如果三个条件都不满足,则:“不嫁!”
import java.util.Scanner;
class IfExer1{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入你的身高:(CM)");
int height = scan.nextInt();
System.out.println("请输入你的财富:(千万)");
double wealth = scan.nextDouble();
/*方式一:
System.out.println("请输入你是否帅:(true/false)");
boolean isHandsome = scan.nextBoolean();
if (height >= 180 && wealth >= 1 && isHandsome){
System.out.println("我一定要嫁给他!!!");
}else if (height >= 180 || wealth >= 1 || isHandsome){
System.out.println("嫁吧,比上不足,比下有余。");
}else{
System.out.println("不嫁!");
}
*/
//方式二:
System.out.println("请输入你是否帅:(是/否)");
String isHandsome = scan.next();
if (height >= 180 && wealth >= 1 && isHandsome.equals("是")){
System.out.println("我一定要嫁给他!!!");
}else if (height >= 180 || wealth >= 1 || isHandsome.equals("是")){
System.out.println("嫁吧,比上不足,比下有余。");
}else{
System.out.println("不嫁!");
}
}
}
switch-case结构
- 1.根据switch表达式中的值,依次匹配各个case中的常量,一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句后,则仍然继续向下执行其他case结构中的执行语句。直到遇到break关键字或此switch-case结构末尾结束为止。
- 2.break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构。
- 3.switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举 ,String
- 4.case之后只能声明常量,不能是声明范围。
- 5.break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾
- 6.default类似if-else结构中的else。default结构是可选的,位置是灵活的。
eg:
class SwitchCaseTest{
public static void main(String[] args) {
int number = 2;
switch(number){
case 0:
System.out.println("zero");
break;
case 1:
System.out.println("one");
break;
case 2:
System.out.println("two");
break;
case 3:
System.out.println("three");
break;
default:
System.out.println("other");
}
}
}
switch-case练习1
对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。
class SwitchCaseTest1{
public static void main(String[] args) {
int score = 78;
/*
//方式一:
switch(score/10){
case 0://无执行语句,无break,执行下一个case。
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("不及格");
break;
case 6:
case 7:
case 8:
case 9:
case 10:
System.out.println("及格");
break;
}
*/
//方式二:(优)
switch(score/60){
case 0:
System.out.println("不及格");
break;
case 1:
System.out.println("及格");
break;
}
}
}
switch-case练习2
编写程序:从键盘上输入2019年的“month”和“day”,要求通过程序输出输入的日期为2019年的第几天。
import java.util.Scanner;
class SwitchCaseTest2{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入2019年的month");
int month =scan.nextInt();
System.out.println("请输入2019年的day");
int day =scan.nextInt();
//定义一个变量来保存总天数
int sumDays = 0;
switch (month){
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;
case 5:
sumDays += 30;
case 4:
sumDays += 31;
case 3:
sumDays += 28;
case 2:
sumDays += 31;
case 1:
sumDays += day;
}
System.out.println("2019年" + month + "月" + day + "日是当年的第" + sumDays + "天");
/*使用if-else冗余
if (month == 1){
sumDay = day;
}else if (month == 2){
sumDay = 31+ day;
}
......
*/
}
}
说明:break是可选的。
switch-case练习2变题
从键盘分别输入年、月、日,判断这一天是当年的第几天
注:判断一年是否是闰年的标准:
1)可以被4整除,但不可被100整除。或 2)可以被400整除
import java.util.Scanner;
class SwitchCaseExer {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入year");
int year =scan.nextInt();
System.out.println("请输入month");
int month =scan.nextInt();
System.out.println("请输入day");
int day =scan.nextInt();
//定义一个变量来保存总天数
int sumDays = 0;
switch (month){
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;
case 5:
sumDays += 30;
case 4:
sumDays += 31;
case 3:
//sumDays += 28;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
sumDays += 29;
}else{
sumDays += 28;
}
case 2:
sumDays += 31;
case 1:
sumDays += day;
}
System.out.println(year + "年" + month + "月" + day + "日是当年的第" + sumDays + "天");
}
}
说明:执行语句可以嵌套if-else结构。
switch和if语句的对比
if和switch语句很像,具体什么场景下,应用哪个语句呢?
- 如果判断的具体数值不多,而且符合byte、short 、char、int、String、枚举等几种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。
- 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。也就是说,使用switch-case的,都可以改写为if-else。反之不成立。