Java语言的流程控制包括 : 1.顺序(sequence) 2.选择(selection) 3.循环(loop)
1 顺序结构
张三在一家互联网公司上班,公司有严格的考勤制度。早上8:00到公司打卡。中午工作到12:00打下班卡。中午休息,下午13:30打下午上班卡,下午工作到17:30打下班卡。
这是张三一天上班为了完成考勤记录所遵守的程序。也就是顺序结构程序。
顺序结构是最简单的结构,也是程序设计最基本的结构,顺序结构是安扎语句出现的先后顺序来执行的。
- 求三角形面积的顺序结构程序
//SeqControlDemo.java 目的:输入三角形三边求面积
package example;
import java.lang.Math; //导入需要的math库
import java.text.DecimalFormat; //导入需要的DecimalFormat库
public class SeqControlDemo {
public static void main(String[] args) {
//定义三角形三边的值
int a = 12; //声明并初始化int数据类型a
int b = 15; //声明并初始化int数据类型b
int c = 20; //声明并初始化int类型数据c
double s = 1.0/2 *(a+b+c);//求取三边之和的一半
double area = Math.sqrt(s*(s-a)*(s-b)*(s-c));//求面积
DecimalFormat df = new DecimalFormat(".##");//定义保留两位小数的格式
String st = df.format(area);//
System.out.println("三条边的长度是:\n"+"a="+a+"\nb="+b+"\nc="+c);
System.out.println("面积为"+area); //输出提示信息
System.out.println("保留两位小数的面积为"+st);//保留两位小数的面积输出
}
}
求解上面的考勤管理打卡,可以使用顺序结构。但是很多时候,解决问题的逻辑并不是按照顺序执行的,往往会出现分支**,需要根据现不同的情况,选择执行不同的路径.**
比如,如果从北京出发去东京旅行,有多条线路。时间充足,可以从北京坐飞机去大连,再从大连坐船去东京。如果世家紧张,则可以坐飞机直接从北京飞东京。
这种根据条件选择某个执行路径的结构称为选择结构。
除了循环结构外,还有一种情况是根据控制条件选择是否重复执行某个处理过程,这种结构称为循环结构
- List item
- 条件语句:if 语句、 switch 语句
- 循环语句:do-while 语句 、 while 语句 、for 语句
- 转向语句:break 语句 、 continue语句、标签 语句
- 返回语句:return 语句
2 条件语句
在日常生活中,我们常常需要根据不同的条件来决定采用什么样的方法。比如,在购买机票时,按照民航部门的规定,不满2周岁的婴儿乘机按照成人票价的10%购买婴儿票。已满2周岁未满12周岁的儿童,按同一航班成人普通票价的50%付费,12周岁基于上需要购买成人票。
在java中,使用if语句和switch语句来实现条件控制。
1. if语句
if语句,在条件成立的时候,进入到程序块内执行接下来的语句。
但当条件不成立的时候,会跳过程序块内的语句,执行接下来的语句
- 使用if语句判断儿童购买火车票打折程序
//ifBuyTicketDemo.java 解释:根据儿童身高判断是否打折
package example;
public class IfBuyTicketDemo {
public static void main(String[] args) {
double childHeight = Double.parseDouble(args[0]);
if(childHeight>110)
{
System.out.println("该儿童身高为:"+childHeight);
System.out.println("国家免票标准:110");
System.out.println("需要买票");
}
if(childHeight>110)
{
System.out.println("该儿童身高超过了车票免票标准,需要买票!");
}
if(childHeight<110)
{
System.out.println("该儿童身高为"+childHeight);
System.out.println("国家免票标准:110");
System.out.println("不需要买票");
}
if(childHeight<110)
{
System.out.println("该儿童身高没有超过车票免票标准,不需要买票!");
}
}
}
2. if - else 语句
if语句仅仅判断了布尔表达式的值为真(true)的情况,但是这种处理方式是不严谨的。因为没有考虑到布尔表达式为假(false)的情况。
使用 if - else 语句操作比if语句多处理了一步,如果布尔表达式的值为假(false),则程序进入else部分进行语句块处理
使用 if - else 语句 比 if语句多了一步。即可以在布尔表达式为假的时候,让程序进入else部分进行语句块的处理。
- 使用If-Else语句判断是否应该买票
//IfElseByTicketDemo 说明:使用If-Else语句判断是否应该买票
package example;
public class IfElseByTicketDemo {
public static void main(String[] args) {
double childheight = Double.parseDouble(args[0]); //获得参数的值
if(childheight > 110)
{
System.out.println("if-else{if块}例子:"+childheight);
System.out.println("该儿童身高为:"+childheight);
System.out.println("国家免费标准:1.1米");
System.out.println("需要购买火车票");
}
else
{
System.out.println("if-else{else块}例子:"+childheight);
System.out.println("该儿童身高为:"+childheight);
System.out.println("国家免费标准:1.1米");
System.out.println("不需要购买火车票");
}
}
}
3. if - else-if 语句
在 if - else 语句里面又嵌入了一层或者多层 if - else语句 。
使用if -else语句,只能处理儿童身高大于1.1米时需要购票的情况,但是如果儿童身高在1.1 ~ 1.4 米的时候,需要买半价票。这个时候就需要使用阶梯式的if - else - if 语句来解决这个问题。
- 使用阶梯式的if - else - if 结构,实现不同身高的儿童购票功能
package example;
public class IfElseIfDemo {
public static void main(String[] args) {
double childHeight = Double.parseDouble(args[0]);
System.out.println("儿童购买火车票免票标准1.1米");
System.out.println("儿童的身高为"+childHeight+"厘米");
if(childHeight>140)
{
System.out.println("需要全价购买火车票");
}
else if(childHeight>110)
{
System.out.println("需要半价购买火车票");
}
else
{
System.out.println("不需要购买火车票,免费");
}
}
}
4.if语句的嵌套
嵌套可以理解为镶嵌、套用。例如,在已有的表格、图像里加入一个或多个表格或函数。这种方法叫做嵌套。当if语句的分支语句中又出现if语句时,就构成了if语句嵌套。
这种嵌套一般适用于比较复杂的嵌套关系
if语句的嵌套可以是无限级的,else总是与最近的if配对。
- 计算三角形的面积,并要求能对输入的边长进行合理性的检查。
//IfTriangleAreaDemo 输入三角形的三边判断是否合理,并输出面积
package example;
import java.text.DecimalFormat;
public class IfTriangleAreaDemo {
public static void main(String[] args) {
double a = Double.parseDouble(args[0]);
double b = Double.parseDouble(args[1]);
double c = Double.parseDouble(args[2]);
if((a>0)&&(b>0)&&(c>0))
{
if((a+b>c)&&(b+c>a)&&(a+c>b))
{
double s = 1.0/2*(a+b+c);
double triarea = Math.sqrt(s*(s-a)*(s-b)*(s-c));
DecimalFormat df = new DecimalFormat(".##");
; String st = df.format(triarea);
System.out.println("三边长分别是\n"+"a="+a +"\nb="+b+"\nc="+c);
System.out.println("三角形的面积为"+st);
}
else
{
System.out.println("三个边长有误不能构成三角形");
}
}
else
{
System.out.println("三个边长有误不能构成三角形");
}
}
}
5. 布尔表达式
在生活中,面对他人提出来的问题,我们通常会回答“是”或“否”,在一些考试的判断题中,通常会使用“T” 或 “F”来判断题目是否正确。这些就是我们说的布尔变量。
java中,=表示赋值,==表示判断
- && : 和(and),只有两个布尔值表达式均为真时,整个布尔表达式才为真,否则为假。
- || : 或(or),只有两个布尔表达式中其中一个为真时,整个布尔表达式的值就为真。
- ! :非(not),可以否定任何一个布尔表达式。使其具有相反的含义。
- 要求判断的信息是否是字符,然后打印输出对应的信息
package example;
public class DecideIfIsLetter {
public static void main(String[] args) {
char varsym = 'z';
varsym = args[0].charAt(0); //获取字符串的首字符
if(varsym<='z'){ //布尔表达式判断varsym的ASCII值是否小于等于z
if(varsym>='a') { //如果varsym的ASCII码值大于"a"
//输出字符串信息
System.out.println("输入的字符是小写字符");
}
else {
if(varsym>='A'){ //布尔表达式判断varsym的值是否大于等于'A'
if(varsym<='Z'){
System.out.println("输入的字符是大写字符");
}
else {
System.out.println("参数不是字符");
}
}
System.out.println("参数不是字符");
}
}
else { //如果varsym的ASCII码大于z
System.out.println("参数不是字符");//输出字符串的信息
}
}
}
6.开关语句
家里使用的吊灯或者台灯开关有两个按键。按下去打开灯,相反方向按下去则关闭,处理电灯打开和关闭的开关从逻辑上走了开和关两个分支。
除了灯具,热水壶、手机、空调灯电器也是有开关的,可以使用物理按钮或者遥控器进行开关的操作。
java中的switch也被称为开关语句
- switch表达式 依次与每个case子句的值进行比较。哪个匹配就执行对应case后面的语句块。
- default子句为可选项。当表达式结果与任何case子句都不匹配时,程序执行default子句。若没有default子句且与case值都不匹配时,则程序直接跳出switch语句。
- case语句和switch语句的前后顺序可以变动,但不影响程序执行的结果。
- 使用switch语句实现输出某年某月的天数。
package example;
import java.lang.Math;
import java.util.*;
public class SwitchgetDays {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
int year = myScanner.nextInt(); //获得年的信息
Scanner mymonth = new Scanner(System.in);
int month = myScanner.nextInt(); //获得月的信息
boolean flag = false; //是否是闰年的信息
int days = -1; //声明月的天数
//switch月的天数
switch(month) {
//当month值为1,3,5,7,8,12时
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
//当month的值为4,6,9,11时
case 4:
case 6:
case 9:
case 11:
days = 30;
//根据二月的天数,判断是不是闰年
//闰年判断:四年一闰。百年不闰,四百年一闰
case 2:
if(((year%4==0)&&(year%100!=0))||(year%400==0)) {
flag = true;
days = 29;
}
else {
flag = false;
days = 28;
}
}
if(flag) { //如果flag为真,则执行下面的语句
System.out.println("year"+"年是闰年");
}
else {
System.out.println("year"+"年不是闰年");
}
System.out.println(year+"年"+month+"月"+"共"+days+"天");
}
}
1.break语句的作用是当执行完一个case分支后,终止执行下面的switch结构。
2.如果没有break语句,则程序执行完匹配的case字句块后,还会往下继续执行。
3.所以应该在每一个case分支后用break语句终止后面的子句块执行。
3.循环语句
每当夜幕降临,华灯初上,我们发现街道两边的商家的霓虹灯广告牌上的图案周而复始的运转,只要不停电,这些图案就会永远的运行下去。
有些时候有些循环会在经历了一定的次数后停下来,例如,在操场上举行3000米比赛,操场一圈为400米,那么运动员需要跑7.5圈。
那么,如何用java来实现这些循环功能呢?
3.1 while循环语句
- 使用while循环语句来计算1~100的值
package example;
public class WhileSumDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int sumvalue = 0;
int i =1;
while(i<=100) {
sumvalue = sumvalue + i;
i++;
}
System.out.println("1到100相加的值为"+sumvalue);
}
}
- 在执行while语句时,布尔表达式的值是很重要的,如果布尔表达式的值为false,那么永不执行循环体。
3.2 do - while 循环语句
while循环语句 和 do-while循环语句的区别:
while语句在循环前先判断布尔表达式的真假。while 在执行循环体前判断,do - while 在循环体之后进行判断。
while后面有一个";" 不能忘记
- 使用 do - while 循环语句来计算 1 ~ 100 的值
package example;
public class DoWhileSumDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int sumvalue = 0; //定义变量并赋初始值为0
int i = 1; //定义整形变量并且赋初始值为1
do { //do-while循环语句
sumvalue = sumvalue + i; //sunvalue值+1
i ++; //i的值+1
}while(i<=100); //判断条件i小于100
System.out.println("使用do-while计算1到100相加的值为:"+sumvalue);
}
}
3.for循环语句
和 while 、 do - while 语句比,for循环语句更加灵活。for循环语句是最常用的循环语句
在说到循环的不同形式时,可以和吃饭对比一下。我们每天都要吃饭,可以说吃饭本身就是一个循环。他有两种方式:
- 第一种是要减肥,每天给自己规定只吃20勺就不吃了。
- 第二种是一直吃,直到吃饱了或者自己吃不下为止。
第一种我们知道要循环20次,那么 可以使用for循环。
第二种是不知道要吃多少次,但知道什么时候结束。则可以使用do-while循环。
可以将for循环看作是我们生活中走楼梯的过程,一半情况下是每次跨一步,有时候为了锻炼或者赶时间可以每次跨几步。我们走楼梯可以向上走(上楼),也可以是下楼(向下走);每跨完一步,都需要我们做点什么,否则仅走完楼梯就没意思了(例如,可以看看手机上的计步器上走了多少步),最后肯定是走完了楼梯。
这个比喻可以帮助我们理解for循环。包括Step步长(每次走一步或者每次跨几步)、循环的初值(从1楼开始)、终值(走到五楼)、循环体(每走一层楼梯完成一次循环,走完5楼,完成5次循环)灯概念和问题
- 使用for循环语句来计算1 ~ 10相乘的值
package example;
public class Multiplyresuly {
public static void main(String[] args) {
// TODO Auto-generated method stub
int Multiplyresult = 1; //声明Multiplyresult变量,并赋初始值为1
for(int i=1;i<=10;i++) {
Multiplyresult*=i;
}
System.out.println("1到10相乘的结果为:"+Multiplyresult);
}
}
-for循环语句中的 初始表达式(循环变量初始化)、布尔表达式(循环条件)、步进表达式(循环变量增量)都是可选项,即可以是空语句。但必须有分号。
for( ; ; )
4.循环的嵌套
在for、while 、 do - while 循环语句的循环体中又出现循环语句,则称出现了循环嵌套。
- 使用循环嵌套完成数学里的九九乘法表
package example;
public class MathjiujiuTable {
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i =1;i<=9;i++) {//循环控制变量从1遍历到9
for(int j =1;j<=i;j++) { //第二层循环变量与第一层最大索引相等
System.out.print(j+"*"+i+"="+j*i+"\t");
if(i==j)
System.out.println();//在外层新欢中换行
}
}
}
}
- 使用for循环语句和if条件语句,判断一个数是不是素数
素数是指一个大于1的自然数。除了1和它本身外,不能被其他自然数整除的数
搜索范围是 2 ~ (int)Math.sqrt(n)。因为如果在这个范围里能找到可以整除n的数,那么在(int)Math.sqrt(n) ~ n 中也可以找到另一个数。反之同理
package example;
public class CheckIfPrimenum {
public static void main(String[] args) {
// TODO Auto-generated method stub
int n = Integer.parseInt(args[0]); //定义变量n,并将n转换成整数类型
int k = (int)Math.sqrt(n); //定义整数变量k,对整数n开平方,并强制转换成整形,赋值给k
int i = 2;
for(;i<=k;i++) { //for循环,初始化变量i为2,循环条件i<-k,步长表达式i++
if(n%i==0) { //if语句,n可以被i整除
break; //如果n可以被i
}
}
if(i>k) {
System.out.println(n+"是素数");
}else {
System.out.println(n+"不是素数");
}
}
}
4.转向语句
张三是一名程序员,每天早上起床吃早饭,然后乘地铁或者公交车去公司,上班打卡。上班期间在单位完成编写代码和做其他的工作,下班打卡,周而复始。从周一到周五就是一个循环。但是昨天张三突然接到领导的通知,明天要去另一座城市参加培训会议(会议持续三天)。于是张三就从每天的产品开发工作循环中跳出来去参加培训会议。
想要从循环中跳出来,就需要用到转向语句。这类语句用来直接控制程序的执行流程,可以改变语句的正常执行方向。(例如,张三每天到公司就是一个正常的执行方向)。
Java语言中的转向语句有:break、continue、label
break中的中断语句
- 在多层循环中,一个break向外跳一层。
- 可以使用多个break语句,但是不要用太多。因为会影响程序阅读
1.使用for嵌套语句输出九九乘法表。使用break终止循环。
package example;
public class NestedLoopBreakDemo {
public static void main(String[] args) {
for(int i = 1;;i++) {
for(int j=1;;j++) {
if(j>i) {
break;
}
System.out.printf("%2d*%2d=%2d",j,i,i*j);
}
System.out.println();
if(i>9) {
break;
}
}
}
}
2.continue条件语句
在国际谈判中,各国会根据自己的利益进行多轮谈判(for 、 while、do-while)。这时候为了将谈判进行下去,通常的做法是将一些难以在短时间内达成共识的议题跳过(continue),直接讨论能够在短期内能够达成共识的议题。
continue语句用来跳过循环体中剩余的语句,强制执行下一次循环。continue语句使得流程能够直接跳出循环控制条件的测试部分,再次判断循环是否执行。
- 求 100 ~ 500 之间能够被3 和 7 整除的数字
package example;
public class ForUseContinueDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int n = 100; //声明循环变量n,并赋值为100
System.out.println("100~500能够被3和7整除的数有");
for(;n<=500;n++) { //for循环语句,无循环变量
if(n%3==0&&n%7==0) { //输出整数
System.out.print(n+" "); //输出整数
}
else
{
continue; //跳过,继续循环
}
}
}
}
3.标签语句
一家大型企业有成千上万名员工。中国人的名字又很容易重复。所以,在大型企业里重名的概率很大。怎样区分这些员工呢?有些人想到可以使用身份证号码。但是身份证号码很长,用起来很不方便。可以使用工号。因为工号在企业里面是不会重复的。也就是说给员工贴上了能够进行区分的标签。此外,我们在商场或者超市里面购物时会发现,每件商品都有一个条形码。这个条形码就是商品的标签。
在Java中,标签语句主要是和循环语句结合使用,是为了让程序能够跳出循环护着跳转到其他循环中,是java在取消了goto跳转语句后为解决问题而设计的。
java中的goto语句没有任何功能。即不能通过goto语句来实现跳转,在结构化程序设计中完全不需要goto语句就可以实现各种功能,而且goto语句的使用往往是程序控制结构变得更加复杂混乱、流程不清晰、代码可读性差。所以java取消了goto语句
goto语句并非一无是处。有时也是组织控制流程的最佳手段。比如,程序需要从嵌套很深的循环中跳出时,就可以发挥goto语句的优势
Java标签只能在 for(){} while(){} do…while(){} 三种循环开始的位置
- 带标签的break语句演示顺序
package example;
public class BreakLabelDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Label1:{
System.out.println("Label1块内被执行语句");
Label2:{
System.out.println("Label2块内被执行语句");
Label3:
for(int i=0;i<100;i++) {
if(i==0) {
System.out.println("Label3内被执行语句");
break Label1;
}
}
System.out.println("Label2块内不被执行语句");
}
}
System.out.println("带标签的break语句演示程序,执行结束");
}
}
- continue标签语句的使用实例程序
//通过定义两个标签outLabel和innerlabel1,通过if语句判断跳转的标签位置
package example;
public class ContinueLabelDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
outlabel1: // 创建标签outlabel
//for循环,初始化循环变量,循环条件j<3,步进表达式为i++;
for(int i =0 ;i<5;i++) {
System.out.println("i="+i); //输出i
innerlabel1:
//for循环,初始化变量,循环条件为j<3,步进表达式为j++
for(int j=0;j<3;j++) {
System.out.println("j="+j);
if(j%2==0) {
System.out.println("continue innerlabel");
continue innerlabel1;
}
if(i%2==1) {
System.out.println("continue outlabel");
continue outlabel1;
}
}
}
System.out.println("cntinue标签语句使用示例程序,运行结束!");
}
}
与带标签的break语句一样,当带标签的continue语句从第n层跳转到第n-1层时,其效果与不带标签的continue语句是相同的
5.返回语句
当前,我们所在的城市日新月异。每年都在大张旗鼓的修路。可能某一天你开车去一个不熟悉的地方办事,等车开到录得尽头才发现道路已经被堵死了(导航软件并不知道路已经被堵死了)。没办法,只好原路返回(Java中的返回语句),重新规划路线。
- 返回语句(return语句)通常在一个方法的最后,目的是退出当前方法。
- return语句用在非void返回值类型的方法中,不但能返回基本类型,还能返回对象。
- return 语句使用实例
package example;
public class ReturnDemo {
public static void main(String [] args) {
// TODO Auto-generated method stub
ReturnDemo t = new ReturnDemo();
t.returnfuc1();
t.returnfuc2();
}
//无返回类型的return语句实验
public void returnfuc1() {
for(int i = 1; ;i++) {
if(i==3) return;
System.out.println("i="+i);
}
}
//有返回类型的return语句实验
public String returnfuc2() {
//输出字符串信息
System.out.println("-----有返回值类型的return语句实验--------");
return "返回一个字符串";
}
}
- 一个方法中可以有多个return语句,但每次该方法只有一条return语句被执行。方法的执行结果具有唯一性。
- return语句中返回值的类型和方法声明中定义的类型应该保持一致。如果两者不一致,则以方法声明中定义的类型为准,自动进行类型转换。如果没有强制转换则会报错。
- 如果方法不要求返回值,且其定义的返回值类型为void,则在方法中可以省略return语句。
- finally区段中存在return语句实例
package example;
public class FinallyReturnDemo {
public int methodA() {
//调用try-catch语句块
try { //try区段开始于关键字try
return 10; //返回10
}finally{ //finally区段开始于finally关键字
return 20; //返回20
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建并初始化FinallyRetrnDemo的对象ft
FinallyReturnDemo ft = new FinallyReturnDemo();
int x = ft.methodA(); //调用method方法
System.out.println("x的值是"+x); //输出字符串信息
}
}
- 该程序循行得到的返回值是finally区段中的20,而不是try区段中的10。
- 尽量不要从try区段中返回。因为只要有finally区段的存在,finally就一定会被执行,在finally区段中调用return语句,则try中的返回值将会被遮掩。此时方法调用的是finally中的返回值。
6 拓展训练
- 水仙花数
水仙花数指的是一个三位数,其各位数字的立方和等于本身。编写一个程序输出所有的三位数水仙花数。
package example;
public class DaffadillyFlower {
public static void main(String[] args) {
// TODO Auto-generated method stub
int m,a,b,c; //声明变量
for(m=100;m<=999;m++) { //for循环,循环条件为m<=999
a = m/100; //求m/100,并赋值给a
b = m/10%10; //求m/10%10,并赋值给c
c = m%10;
//if语句,成立条件为a*a*a + b*b*b + c*c*c = m
if(m == a*a*a + b*b*b + c*c*c ) {
System.out.printf("%d ",m);
}
}
}
}
水仙花数又称阿姆斯特朗数。三位数的水仙花数有三个。另外,四位数中还存在着四叶玫瑰数(即4位数各位数字的4次方之和等于该数本身的数)
- 判断某一年是否为闰年
一年有平年和闰年之分。地球绕太阳一圈称为一年,所用时为365天5小时48分46秒,取365天为1年。4年将多出23小时15分6秒。将近1天,所以4年设一个闰日(2月29日),这年称为闰年。
请输入一个年份,判断输入的年份是否是闰年。
package example;
import java.util.Scanner;
public class JudgeLeapYear {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个年份");
int year;
try {
year = scan.nextShort();
if(year%4==0 && year%100!=0||year%400==0) {
System.out.println(year + "是闰年!");
}else {
System.out.println(year+"不是闰年");
}
}catch(Exception e) {
System.out.println("您输入的年份不是闰年!");
}
}
}
- java.util包中的Scanner类是一个用于扫描输入文本的简单文本扫描器。可以用这个类从控制台写入数据。该类的nextShort()方法可将输入信息扫描为一个short类型的数据,如果输入的信息不能被转换成short类型的数据,则会抛出java.util.InputMatchException异常。
- 根据收入情况计算个人所得税
我国从2012年开始实行的7级超额累进个人所得税税率表如图所示。个税免征金额为3500元。个税的计算公式为:应缴税额=(工资所得-五险一金-扣除数)X 适用税率 - 速算扣除数。编写一个计算器实现上述功能
package example;
import java.util.Scanner;
public class PersonalIncmeTax {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
System.out.println("请输入您的工资余额(去除五险一金后)");
int i = scan.nextInt();
if(i<=3500)
System.out.println("您不需要纳税");
else if(0<i-3500&&i-3500<=1500)
System.out.println("你的纳税金额为"+((i-3500)*0.03));
else if(1500<i-3500&&i-3500<=4500)
System.out.println("你的纳税金额为"+((i-3500)*0.1-105));
else if(4500<i-3500&&i-3500<=9000)
System.out.println("你的纳税金额为"+((i-3500)*0.2-555));
else if(9000<i-3500&&i-3500<=35000)
System.out.println("你的纳税金额为"+((i-3500)*0.25-1005));
else if(35000<i-3500&&i-3500<=55000)
System.out.println("你的纳税金额为"+((i-3500)*0.3-2755));
else if(55000<i-3500&&i-3500<=55000)
System.out.println("你的纳税金额为"+((i-3500)*0.35-5505));
else
System.out.println("你的纳税金额为"+((i-3500)*0.45-13505));
}
-如果需要判定的条件不能用特定的数字来表示,那就不能用switch语句实现。可以使用if-else 语句。
循环语句既可以用于完成复杂的运算,也可以用于控制程序的递归流程。而多层循环可以实现更为复杂的业务逻辑。在处理有规则的大量数据时,应该考虑使用多层循环来优化程序代码。在使用多层循环时一定要添加注释,便于以后开展维护工作。
7.技术解惑
1.break和continue的区别
在java中,break和continue都可以跳出当前循环。
当执行到break时,跳出整个循环,然后执行循环外的语句。
当执行到continue时,当此循环结束。重新执行下一次循环,
如果已经是最后一轮循环的话,则break和continue效果是一样的。
2.while 和 do-while区别
在Java中,while和do-while都能完成循环的功能
while是先判断再执行,如果判断不成立,则不会执行。
do-while是先判断再执行。不管判断成不成立,都会执行一次。