【java学习笔记】 4流程控制

Java语言的流程控制包括 : 1.顺序(sequence) 2.选择(selection) 3.循环(loop)

1 顺序结构

张三在一家互联网公司上班,公司有严格的考勤制度。早上8:00到公司打卡。中午工作到12:00打下班卡。中午休息,下午13:30打下午上班卡,下午工作到17:30打下班卡。
这是张三一天上班为了完成考勤记录所遵守的程序。也就是顺序结构程序。
顺序结构是最简单的结构,也是程序设计最基本的结构,顺序结构是安扎语句出现的先后顺序来执行的。

  1. 求三角形面积的顺序结构程序
//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语句,在条件成立的时候,进入到程序块内执行接下来的语句。
但当条件不成立的时候,会跳过程序块内的语句,执行接下来的语句

  1. 使用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("该儿童身高没有超过车票免票标准,不需要买票!");
  	}

  }
}

情况1
情况2

2. if - else 语句

if语句仅仅判断了布尔表达式的值为真(true)的情况,但是这种处理方式是不严谨的。因为没有考虑到布尔表达式为假(false)的情况。

使用 if - else 语句操作比if语句多处理了一步,如果布尔表达式的值为假(false),则程序进入else部分进行语句块处理

使用 if - else 语句 比 if语句多了一步。即可以在布尔表达式为假的时候,让程序进入else部分进行语句块的处理。

  1. 使用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 语句来解决这个问题。

  1. 使用阶梯式的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配对。

  1. 计算三角形的面积,并要求能对输入的边长进行合理性的检查。
//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),可以否定任何一个布尔表达式。使其具有相反的含义。
  1. 要求判断的信息是否是字符,然后打印输出对应的信息
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语句的前后顺序可以变动,但不影响程序执行的结果。
  1. 使用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循环语句

  1. 使用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后面有一个";" 不能忘记

  1. 使用 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次循环)灯概念和问题

  1. 使用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 循环语句的循环体中又出现循环语句,则称出现了循环嵌套。

  1. 使用循环嵌套完成数学里的九九乘法表
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();//在外层新欢中换行
		}
	  }
	}
}

在这里插入图片描述

  1. 使用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语句使得流程能够直接跳出循环控制条件的测试部分,再次判断循环是否执行。

  1. 求 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(){} 三种循环开始的位置

  1. 带标签的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语句演示程序,执行结束");
		}
	}

在这里插入图片描述

  1. 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返回值类型的方法中,不但能返回基本类型,还能返回对象。
  1. 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语句。
  1. 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 拓展训练

  1. 水仙花数
    水仙花数指的是一个三位数,其各位数字的立方和等于本身。编写一个程序输出所有的三位数水仙花数。
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次方之和等于该数本身的数)

  1. 判断某一年是否为闰年
    一年有平年和闰年之分。地球绕太阳一圈称为一年,所用时为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异常。
  1. 根据收入情况计算个人所得税
    我国从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是先判断再执行。不管判断成不成立,都会执行一次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值