- 程序流程控制
- 顺序结构
- 分支结构
- 循环结构
- 顺序结构
- 分支结构
- if-else结构
- 分支结构:if-else使用说明
- Scanner
- if-else语句应用举例
- 练习
- switch-case
- 例题:
- 练习题
- switch和if语句的对比
- 循环结构
- 循环的分类
- 循环语句的四个组成部分
- for循环
- for循环应用实例
- for语句练习
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块
其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:
- 顺序结构
- 分支结构
- 循环结构
程序从上到下逐行执行,中间没有任何判断和跳转。
分支结构根据条件,选择性地执行某段代码。
有if…else和switch…case两种分支语句
根据循环条件,重复性执行某段代码。
有while、do…while、for三种循环语句
注意:jdk1.5提供了foreach循环,方便的变量集合、数组元素
JAVA中定义成员变量时采用合法的向前引用:
如:
public class Test{
int num1 = 12;
int num2 = num1 + 2;
}
错误形式:
public class Test{
int num2 = num1 + 2;
int num1 = 12;
}
分支结构
if-else结构
if语句的暗中形式:
- 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量
- 语句块只有一条执行语句时,一对{ }可以省略,但建议保留
- if-else语句结构,根据需要可以嵌套使用
- 当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略
- 当多个条件是“互斥”是,条件判断语句及执行语句间顺序无所谓
- 当多个条件是“包含”关系时,“范围小上范围大下/子上父下”
1:导包
import java.util.Scanner;
2.scanner的实例化
Scanner [对象名] = new Scanner(System.in);
3.调用Scanner类的相关方法,来获取指定类型的变量
int num = 对象名.nextInt();
public static void main(String args[]){
int age = 75;
if (age< 0) {
System.out.println("不可能!");
} else if (age>250) {
System.out.println("是个妖怪!");
} else {
System.out.println(“人家芳龄 " + age +" ,马马乎乎啦!");
}
}
岳小鹏参加Java考试,他和父亲岳不群达成承诺: 如果: 成绩为100分时,奖励一辆BMW; 成绩为(80,99]时,奖励一台iphone xs max; 当成绩为[60,80]时,奖励一个 iPad; 其它时,什么奖励也没有。
请从键盘输入岳小鹏的期末成绩,并加以判断
import java.util.Scanner;
public class SignTest{
public static void main(String[] args){
System.out.print("请输入岳小鹏的成绩:");
Scanner s = new Scanner(System.in);
int grade = s.nextInt();
if (grade == 100) {
System.out.println("BMW");
}else if (grade >= 80) {
System.out.println("iphone xs max");
}else if (grade >= 60) {
System.out.println("Ipad");
}else {
System.out.println("无");
}
}
}
练习
1)编写程序,声明2个int型变量并赋值。判断两数之和,如果大于等 于50,打印“hello world!”
import java.util.Scanner;
public class SignTest{
public static void main(String[] args){
Scanner s = new Scanner(System.in);
System.out.println("请输入第一个值");
int num1 = s.nextInt();
System.out.println("请输入第二个值");
int num2 = s.nextInt();
if(num1 + num2 >=50)
{
System.out.println("hello world!");
}
}
}
- 编写程序,声明2个double型变量并赋值。判断第一个数大于10.0, 且第2个数小于20.0,打印两数之和。否则,打印两数的乘积。
import java.util.Scanner;
public class SignTest {
public static void main(String[] args) {
double num1, num2;
Scanner s = new Scanner(System.in);
num1 = s.nextDouble();
num2 = s.nextDouble();
if (num1 > 10 && num2 < 20) {
System.out.println(num1 + num2);
} else {
System.out.println(num1 * num2);
}
}
}
- 我家的狗5岁了,5岁的狗相当于人类多大呢?其实,狗的前两年每 一年相当于人类的10.5岁,之后每增加一年就增加四岁。那么5岁的狗 相当于人类多少年龄呢?应该是:10.5 + 10.5 + 4 + 4 + 4 = 33岁。
编写一个程序,获取用户输入的狗的年龄,通过程序显示其相当于人
类的年龄。如果用户输入负数,请显示一个提示信息。
import java.util.Scanner;
public class SignTest {
public static void main(String[] args) {
int year;
Scanner s = new Scanner(System.in);
year = s.nextInt();
if (year < 0) {
System.out.println("你家狗还没投胎?");
} else if (year <= 2) {
System.out.println(year * 10.5);
} else {
System.out.println(21 + (year - 2) * 4);
}
}
}
大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出 一定的条件:高:180cm以上;富:财富1千万以上;帅:是。
- 如果这三个条件同时满足,则:“我一定要嫁给他!!!”
- 如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”
- 如果三个条件都不满足,则:“不嫁!”
import java.util.Scanner;
public class SignTest {
public static void main(String[] args) {
int height;
double wealth;
boolean cool;
Scanner s = new Scanner (System.in);
System.out.println("请输入身高");
height = s.nextInt();
System.out.println("请输入财富:(千万)");
wealth = s.nextDouble();
System.out.println("帅否(true/false)");
cool = s.nextBoolean();
if(height > 180 && wealth > 1 && cool) {
System.out.println("我一定要嫁给他!!!");
}else if(height > 180 || wealth > 1 || cool){
System.out.println("嫁吧,比上不足,比下有余。");
}else {
System.out.println("不嫁!");
}
}
}
switch-case
注意:
-
switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举(jdk5.0),String(jdk7.0);
-
case子句中的值必须是常量,不能是变量名或不确定的表达式值;
-
同一个switch语句,所有case子句中的常量值互不相同;
-
break语句用来执行完一个case分支后使程序跳出swich语句块;如果没有break,程序会顺序执行到switch结尾
-
default子句是可任选的。同时,位置也是灵活的。当没有匹配的case时,执行default
-
如果switch-case语句中执行语句相同,可以考虑合并,如下面第二题
1.使用switch把小写类型的char型转为大写。只转换a,b,c,d,e,其它的输出“other”。
提示:String word = scan.next(); char c = word.charAt(0);switch©{}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String word = scan.next();
char c = word.charAt(0);
switch (c) {
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;
}
}
2.对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int grade = scan.nextInt();
switch (grade/10) {
case 0:
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;
default:
System.out.println("other");
break;
}
}
}
其实还有更优解,上面那段代码,单纯是为了展示省略的功能
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int grade = scan.nextInt();
switch (grade/60) {
case 0:
System.out.println("不及格");
break;
case 1:
System.out.println("及格");
break;
default:
System.out.println("other");
break;
}
}
}
3.根据用于指定月份,打印该月份所属的季节。 3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int month = scan.nextInt();
switch (month) {
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;
default:
System.out.println("输入非法数值");
break;
}
}
}
4 . 编写程序:从键盘上输入2019年的“month”和“day”,要求通过程序 输出输入的日期为2019年的第几天。
import java.util.Scanner;
public class Main {
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 + "天");
}
}
练习题
练习1:
从键盘分别输入年、月、日,判断这一天是当年的第几天 注:判断一年是否是闰年的标准:
1)可以被4整除,但不可被100整除 或
2)可以被400整除
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入年份");
int year = scan.nextInt();
if(year % 4 ==0 && year % 100 != 0)
{
System.out.println("闰年");
}
else {
System.out.println("平年");
}
System.out.println("请输入月份");
int month = scan.nextInt();
System.out.println("请输入天");
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:
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("2019年" + month + "月" + day + "日是当年的第" + sumDays + "天");
}
}
练习2:
使用swich语句改写下列if语句:
int a = 3; int x = 100; if(a==1) x+=5; else if(a==2) x+=10; else if(a==3) x+=16; else x+=34;
改写:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int a = 3;
int x = 100;
switch(a)
{
case 1:
x += 5;
break;
case 2:
x += 10;
break;
case 3:
x += 16;
break;
default:
x += 34;
break;
}
}
}
练习3:
编写程序:从键盘上读入一个学生成绩,存放在变量score中,根据score的 值输出其对应的成绩等级:
score>=90 等级: A
70<=score<90 等级: B
60<=score<70 等级: C
score<60 等级: D
方式一:使用if-else
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int score = scan.nextInt();
if(score >= 90)
{
System.out.println("A");
}
else if(score >= 70)
{
System.out.println("B");
}
else if(score >= 60)
{
System.out.println("C");
}
else {
System.out.println("D");
}
}
方式二:使用switch-case: score / 10: 0 - 10
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int score = scan.nextInt();
switch(score / 10)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("D");
break;
case 6:
System.out.println("C");
break;
case 7:
case 8:
System.out.println("B");
break;
case 9:
case 10:
System.out.println("A");
break;
default:
System.out.println("非法输入");
}
}
switch和if语句的对比
- 如果判断的具体数值不多,而且符号byte/short/char/int/String/枚举等几种类型。虽然两个语句都可以使用,建议使用switch语句。因为效率稍高。
- 其他情况:对区间判读,对结果为boolean类型判读,使用if,if的使用范围更广。也就说,使用switch-case的,都可以改写为if-else。反之不成立
练习:
编写一个程序,为一个给定的年份找出其对应的中国生肖。中国的生肖基于12年一个周期, 每年用一个动物代表:rat、ox、tiger、rabbit、dragon、snake、horse、sheep、monkey、rooster、dog、pig。
提示:2019年:猪 2019 % 12 == 3
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入年份:");
int year = scan.nextInt();
switch(year % 12)
{
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;
}
}
}
循环结构
在某些条件满足的情况下,反复执行特定代码的功能
循环的分类- for循环
- while循环
- do-while循环
- 初始化部分
- 循环条件部分
- 循环体部分
- 迭代部分
- 语法格式
for(①初始化部分;②循环条件部分;④迭达部分){
③循环体部分;
} - 执行过程:
1-2-3-4-2-3-4-2-3-4-……-2 - 说明
循环条件部分为boolean类型表达式,当值为false时,退出循环
初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔
迭代步伐可以有多个变量更新,用逗号分隔
练习:
int num = 1;
for(System.out.print('a');num <= 3;System.out.print('c'),num++){
System.out.print('b');
}
//输出结果:abcbcbc
for循环应用实例
public class ForLoop {
public static void main(String args[]) {
int result = 0;
for (int i = 1; i <= 100; i++) {
result += i;
}
System.out.println("result=" + result);
}
}
例题1:
编写程序从1循环到150,并在每行打印一个值,另外在每个3的倍数行 上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。
public static void main(String[] args) {
for(int i = 1;i <= 150;i++){
System.out.print(i + " ");
if(i % 3 == 0){
System.out.print("foo ");
}
if(i % 5 == 0){
System.out.print("biz ");
}
if(i % 7 == 0){
System.out.print("baz ");
}
//换行
System.out.println();
}
}
for语句练习
1.打印1~100之间所有奇数的和
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int i;
int sum = 0;
for (i = 1; i <= 100; i++) {
if (i % 2 != 0) {
sum += i;
}
}
System.out.println(sum);
}
}
2.打印1~100之间所有是7的倍数的整数的个数及总和(体会设置计数 器的思想)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int i;
int sum = 0;
int count = 0;
for (i = 1; i <= 100; i++) {
if (i % 7 == 0) {
sum += i;
count++;
}
}
System.out.println("7的整数和:" + sum);
System.out.println("7的倍数的个数" + count);
}
}
3.输出所有的水仙花数,所谓水仙花数是指一个3位数,其各个位上数 字立方和等于其本身。
例如: 153 = 111 + 333 + 555
public static void main(String[] args){
for(int i=100;i<=999;i++){
int a=i/100; //存放百位
int b=i%100/10; //存放十位
int c=i%10; //存放个位
if(i==(a*a*a+b*b*b+c*c*c)){
System.out.println(i+" 是水仙花数");
}
}
}



