目录
流程控制语句
顺序结构
分支语句
if语句
switch语句
循环语句
for循环语句
while
do...while
三种循环的区别
跳转控制语句
循环嵌套
练习
流程控制语句
顺序结构
程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行
分支语句
if语句
- 格式1:
if (关系表达式) {
语句体;
}
执行流程:
1.首先计算关系表达式的值
2.如果关系表达式的值为true就执行语句体
3.如果关系表达式的值为false就不执行语句体
4.继续执行后面的语句内容
- 格式2:
if (关系表达式) {
语句体1;
} else {
语句体2;
}
执行流程:
1.首先计算关系表达式的值
2.如果关系表达式的值为true就执行语句体1
3.如果关系表达式的值为false就执行语句体2
4.继续执行后面的语句内容
- 格式3:
if (关系表达式1) {
语句体1;
} else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
执行流程:
1.首先计算关系表达式1的值
2.如果值为true就执行语句体1;如果值为false就计算关系表达式2的值
3.如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
4.…
5.如果没有任何关系表达式为true,就执行语句体n+1。
switch语句
- 格式:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
[break;]
}
格式说明:
表达式:取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以是String。
case:后面跟的是要和表达式进行比较的值。
break:表示中断,结束的意思,用来结束switch语句。
default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
执行流程:
1.首先计算表达式的值。
2.依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
3.如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后程序结束掉。
循环语句
for循环语句
格式:
for (初始化语句;条件判断语句;条件控制语句) {
循环体语句;
}执行流程:
1.执行初始化语句
2.执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
3.执行循环体语句
4.执行条件控制语句
5.回到②继续while
基本格式:
while (条件判断语句) {
循环体语句;
}完整格式:
初始化语句;
while (条件判断语句) {
循环体语句;
条件控制语句;
}
执行流程:
1.执行初始化语句
2.执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
3.执行循环体语句
4.执行条件控制语句
5.回到②继续
do...while
基本格式:
do {
循环体语句;
}while(条件判断语句);
完整格式:
初始化语句;
do {
循环体语句;
条件控制语句;
}while(条件判断语句);
执行流程:
1.执行初始化语句
2.执行循环体语句
3.执行条件控制语句
4.执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
5.回到②继续
三种循环的区别
- 三种循环的区别
for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
do...while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
- for和while的区别
条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
跳转控制语句
- continue
用在循环中,基于条件控制,跳过某次循环体内容的执行,继续下一次的执行
- break
用在循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的整个循环
循环嵌套
- 任何语句对外都可以看成是一句话,一句代码
- 分支语句中包含分支语句称为分支嵌套
- 循环语句中包含循环语句称为循环嵌套
练习
1、某银行推出了整存整取定期储蓄业务,其存期分为一年、两年、三年、五年,到期凭存单支取本息。存款年利率表如下:
存期 年利率(%)
一年 2.25
两年 2.7
三年 3.25
五年 3.6
请存入一定金额(1000起存),存一定年限(四选一),计算到期后得到的本息总额。
提示:
存入金额和存入年限均由键盘录入
本息计算方式:本金+本金×年利率×年限
import java.util.Scanner;
public class Demo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入存储的金额:");
int money = sc.nextInt();
System.out.println("请输入存储年限");
int year = sc.nextInt();
double outMoney = 0;
if (year == 1) {
outMoney = money + money * 2.25 / 100 * 1;
} else if (year == 2) {
outMoney = money + money * 2.7 / 100 * 2;
} else if (year == 3) {
outMoney = money + money * 3.25 / 100 * 3;
} else if (year == 5) {
outMoney = money + money * 3.6 / 100 * 5;
} else {
System.out.println("输入的年限有误");
}
System.out.println("存款" + year + "年后的本息是:" + outMoney);
}
}
2、某商场购物可以打折,具体规则如下:
普通顾客购不满100元不打折,满100元打9折;
会员购物不满200元打8折,满200元打7.5折;
不同打折规则不累加计算。
请根据此优惠计划进行购物结算,键盘录入顾客的类别(0表示普通顾客,1表示会员)和购物的折前金额(整数即可),输出应付金额(小数类型)。
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
// 2.创建键盘录入对象
Scanner sc = new Scanner(System.in);
// 3.调用方法获取键盘录入的顾客类别和购物金额
System.out.println("请输入顾客类别(0表示普通顾客,1表示会员顾客):");
int type = sc.nextInt();
System.out.println("请输入购物金额:");
int money = sc.nextInt();
// 4.先判断顾客类别
if (type == 0) {
// 4.1.普通顾客,再判断购物金额
if (money > 0 && money < 100) {
System.out.println("您的应付金额为:" + money);
} else if (money >= 100) {
System.out.println("您的应付金额为:" + money * 0.9);
} else {
System.out.println("您输入的金额有误");
}
} else if (type == 1) {
// 4.2.会员顾客,再判断购物金额
if (money > 0 && money < 200) {
System.out.println("您的应付金额为:" + money * 0.8);
} else if (money >= 200) {
System.out.println("您的应付金额为:" + money * 0.75);
} else {
System.out.println("您输入的金额有误");
}
} else {
System.out.println("您输入的顾客类别有误");
}
}
}
3、2019年1月1日起,国家推出新的个人所得税政策,起征点上调值5000元。也就是说税前工资扣除三险一金(三险一金数额假设是税前工资的10%)后如果不足5000元,则不交税。如果大于5000元,那么大于5000元的部分按梯度交税,具体梯度比例如下:
0 ~ 3000元的部分,交税3%
3000 ~ 12000元的部分,交税10%
12000 ~ 25000的部分 , 交税20%
25000 ~ 35000的部分,交税25%
35000 ~ 55000的部分,交税30%
55000 ~ 80000的部分,交税35%
超过80000的部分,交税45%
请完成一个个税计算程序,在用户输入税前工资后,计算出他对应的纳税数额,以及税后工资为多少?
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的税前工资:");
//2.键盘录入税前工资
int money = sc.nextInt();
//3.计算应纳税部分的工资
double before = money - (money*0.1) - 5000;
//4.定义个税变量
double shui = 0;
//5.按照梯度范围计算个税数值
if(before > 0 && before <=3000){
shui = before * 0.03;
}else if(before > 3000 && before <=12000){
shui = 3000*0.03 + (before-3000) * 0.1;
}else if(before > 12000 && before <=25000){
shui = 3000*0.03 + 9000*0.1 + (before-12000)*0.2;
}else if(before > 25000 && before <=35000){
shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + (before-25000)*0.25;
}else if(before > 35000 && before <=55000){
shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + 10000*0.25 + (before-35000)*0.3;
}else if(before > 55000 && before <=80000){
shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + 10000*0.25 + 20000*0.3 + (before-55000)*0.35;
}else if(before > 80000){
shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + 10000*0.25 + 20000*0.3 + 25000*0.35 + (before-80000)*0.45;
}
//6.计算税后工资
double after = money - (money*0.1) - shui;
//7.打印个税和税后工资
System.out.println("个人所得税" + shui + "元");
System.out.println("税后工资" + after + "元");
}
}
4、编写程序:由键盘输入三个整数分别存入变量num1、num2、num3, 对它们进行排序(使用 if-else if-else),并且从小到大输出。
import java.util.Scanner;
public class LianXi02{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("num1");
int num1 = sc.nextInt();
System.out.println("num2");
int num2 = sc.nextInt();
System.out.println("num3");
int num3 = sc.nextInt();
if(num1 < num2 && num1 < num3){
if(num2 < num3){
System.out.println("num1" + "num2" + "num3");
}else{
System.out.println("num1" + "num3" + "num2");
}
}else if(num2 < num1 && num2 < num3){
if(num1 < num3){
System.out.println("num2" + "num1" + "num3");
}else{
System.out.println("num2" + "num3" + "num1");
}
}else{
if(num1 < num2){
System.out.println("num3" + "num1" + "num2");
}else{
System.out.println("num3" + "num2" + "num1");
}
}
}
}
5、大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出 一定的条件:高:180cm以上;富:财富1千万以上;帅:是。(注意:不用管单位) 如果这三个条件同时满足,则:“我一定要嫁给他!!!” 如果三个条件有为真的情况,则:“嫁吧,将就过日子。” 如果三个条件都不满足,则:“不嫁!”
import java.util.Scanner;
public class LianXi02{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("高");
int Gao = sc.nextInt();
System.out.println("富/千万");
double Fu = sc.nextDouble();
System.out.println("帅");
Boolean Shuai = sc.nextBoolean();
if(Gao > 180 && Fu > 1 && Shuai == true){
System.out.println("我一定要嫁给他!!!");
}else if(Gao > 180 | Fu > 1 | Shuai == true){
System.out.println("嫁吧,将就过日子。");
}else{
System.out.println("不嫁!");
}
}
}
6、模拟计算器功能,对键盘录入的两个int类型的数据进行加、减、乘、除的运算,并打印运算结果。
要求:
键盘录入三个整数,其中前两个整数代表参加运算的数据,第三个整数为要进行的运算(1:表示加法运算,2:表示减法运算,3:表示乘法运算,4:表示除法运算),演示效果如下:
请输入第一个整数: 30
请输入第二个整数: 40
请输入您要进行的运算(1:表示加法,2:表示减法,3:表示乘法,4:表示除法): 1
控制台输出:30+40=70
// 1.导包
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args) {
// 2.创建键盘录入对象
Scanner sc = new Scanner(System.in);
// 3.提示需要输入的数据,并调用方法获取输入的数据
System.out.println("请输入第一个整数:");
int num1 = sc.nextInt();
System.out.println("请输入第二个整数:");
int num2 = sc.nextInt();
System.out.println("请输入您要进行的运算(1:表示加法,2:表示减法,3:表示乘法,4:表示除法)");
int type = sc.nextInt();
// 4.使用switch语句判断计算类型,并输出相应的结果
switch (type) {
case 1:
System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
break;
case 2:
System.out.println(num1 + " - " + num2 + " = " + (num1 - num2));
break;
case 3:
System.out.println(num1 + " * " + num2 + " = " + (num1 * num2));
break;
case 4:
System.out.println(num1 + " / " + num2 + " = " + (num1 * 1.0 / num2));
break;
default:
System.out.println("您输入的运算类别有误");
break;
}
}
}
7、从键盘上输入2019年的“month”和“day”,要求通过程序 输出输入的日期为2019年的第几天。
import java.util.Scanner;
public class LianXi04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入当前月份:");
int month = sc.nextInt();
System.out.println("请输入当前是月中的第几天:");
int day = sc.nextInt();
int sumDay = 0;
switch(month){
case 12:
sumDay += 30;
case 11:
sumDay += 31;
case 10:
sumDay += 30;
case 9:
sumDay += 31;
case 8:
sumDay += 31;
case 7:
sumDay += 30;
case 6:
sumDay += 31;
case 5:
sumDay += 30;
case 4:
sumDay += 31;
case 3:
sumDay += 28;
case 2:
sumDay += 31;
case 1:
sumDay += day;
break;
default :
System.out.println("输入有误");
break;
}
System.out.println("当前是2019年的第"+sumDay+"天。");
}
}
8、对于题7的升级版: 从键盘分别输入年、月、日,判断这一天是当年的第几天
注:判断一年是否是闰年的标准: 1)可以被4整除,但不可被100整除 或 2)可以被400整除
import java.util.Scanner;
public class LianXi04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入当前年份:");
int year = sc.nextInt();
System.out.println("请输入当前月份:");
int month = sc.nextInt();
System.out.println("请输入当前日期:");
int day = sc.nextInt();
int sumDay = 0;
Boolean LeapYear;
if(year % 4 == 0 && year % 4 != 0 || year % 400 == 0){
LeapYear = true;
}else{
LeapYear = false;
}
if(year < 0 || month < 1 || month > 12 || day > 31){
System.out.println("你输入的日期有误");
}else if((LeapYear == true && day > 29) || (LeapYear == false && day > 28)){
System.out.println("你输入的日期有误");
}else{
switch(month){
case 12:
sumDay += 30;
case 11:
sumDay += 31;
case 10:
sumDay += 30;
case 9:
sumDay += 31;
case 8:
sumDay += 31;
case 7:
sumDay += 30;
case 6:
sumDay += 31;
case 5:
sumDay += 30;
case 4:
sumDay += 31;
case 3:
if(LeapYear){
sumDay += 29;
}else{
sumDay += 28;
}
case 2:
sumDay += 31;
case 1:
sumDay+=day;
break;
}
if(LeapYear){
System.out.println(year + "年" + month + "月" + day + "这一天是当年的第" + sumDay + "天," + "该年为闰年。");
}else{
System.out.println(year + "年" + month + "月" + day + "这一天是当年的第" + sumDay + "天," + "该年不是闰年。");
}
}
}
}
9、编写一个程序,为一个给定的年份找出其对应的中国生肖。中国的生肖基于12年一个周期, 每年用一个动物代表:rat、ox、tiger、rabbit、dragon、snake、horse、sheep、monkey、 rooster、dog、pig。 提示:2019年:猪 2019 % 12 == 3
import java.util.Scanner;
public class LianXi04{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份:");
int year = sc.nextInt();
switch(year % 12){
case 0:
System.out.println("对应生肖是monkey");
break;
case 1:
System.out.println("对应生肖是rooster");
break;
case 2:
System.out.println("对应生肖是dog");
break;
case 3:
System.out.println("对应生肖是pig");
break;
case 4:
System.out.println("对应生肖是rat");
break;
case 5:
System.out.println("对应生肖是ox");
break;
case 6:
System.out.println("对应生肖是tiger");
break;
case 7:
System.out.println("对应生肖是rabbit");
break;
case 8:
System.out.println("对应生肖是dragon");
break;
case 9:
System.out.println("对应生肖是snake");
break;
case 10:
System.out.println("对应生肖是horse");
break;
case 11:
System.out.println("对应生肖是sheep");
}
}
}
10、打印1~100之间所有是7的倍数的整数的个数及总和
public class LianXi05{
public static void main(String[] args){
int sum = 0;
int count = 0;
for(int i = 1;i <=100;i++){
if(i % 7 == 0){
sum += i;
count++;
}
}System.out.println("个数" + count);
System.out.println("总和" + sum);
}
}
11、用do_while循环语句实现,打印出3的倍数,如果这个数是7的倍数则结束程序。
public class LianXi06{
public static void main(String[] args){
int i = 3;
do{
if(i % 3 == 0){
System.out.println(i);
}
i+=3;
}while(i % 7 != 0);
}
}
12、输入高度,输出直角三角形。
import java.util.Scanner;
public class LianXi07{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入高度:");
int h = sc.nextInt();
for (int i = 1;i <= h;i++){
for (int j = 1;j <= i; j++){
System.out.print("#");
}
System.out.println();
}
}
}
13、输入高度,输出倒直角三角形。
import java.util.Scanner;
public class LianXi07{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入高度:");
int h = sc.nextInt();
for (int i = 1;i <= h;i++){
for (int j = h - i;j >= 0; j--){
System.out.print("*");
}
System.out.println();
}
}
}
14、打印1-100之间非13的倍数,使用continue语句
public class LianXi07{
public static void main(String[] args) {
for(int i = 1;i <= 100;i++){
if(i % 13 == 0){
continue;
}else{
System.out.println(i);
}
}
}
}
15、求出1~100之间,既是3又是7的倍数的自然数出现的次数?
public class LianXi07{
public static void main(String[] args){
int count = 0;
for(int i = 1;i <= 100;i++){
if(i % 3 == 0 && i % 7 == 0){
count++;
}
}System.out.println(count);
}
}
16、
import java.util.Scanner;
public class LingXing {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入高度:");
int h = sc.nextInt();
for (int i = 1;i <= h;i++){
for (int j = h-i; j > 0;j--){
System.out.print(" ");
}
for (int k = 1;k <= i;k++){
System.out.print("* ");
}
System.out.println();
}
for (int i = 1;i <= h;i++){
for (int k = 1;k <= i;k++){
System.out.print(" ");
}
for (int j = h-i-1; j >= 0;j--){
System.out.print("* ");
}
System.out.println();
}
}
}