- 程序流程控制
- 顺序结构
- 分支结构
- 循环结构
- 顺序结构
- 分支结构
- 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'); } //输出结果:abcbcbcfor循环应用实例
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+" 是水仙花数"); } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)