Java年薪计算器

要求: 薪水计算器
(1)通过键盘输入用户月薪,每年是几个月的月薪
(2)输出用户的年薪
(3)输出一行字:如果年薪超过10万,输出“恭喜你超越90%的国人”,如果年薪超过20万,输出“恭喜你超越98%的国人”
(4)直到键盘键盘输入“exit”,则退出程序(使用break退出循环)
(5)输入中途,键盘输入next,则这个用户退出计算不显示“恭喜…”,算下一个用户的年薪

  • 本文包括四个部分
    1、问题版(问题+原因+解决方案)
    2、最终版
    3、完成效果
    4、问题总结
  • 问题版
/*
 * 薪水计算器
 * (1)通过键盘输入用户月薪,每年是几个月的月薪
 * (2)输出用户的年薪
 * (3)输出一行字:如果年薪超过10万,输出“恭喜你超越90%的国人”,如果年薪超过20万,输出“恭喜你超越98%的国人”
 * (4)直到键盘键盘输入“exit”,则退出程序(使用break退出循环)
 * (5)输入中途,键盘输入next,则这个用户退出计算不显示“恭喜...”,算下一个用户的年薪
 * */


package test;
import java.util.Scanner;


public class Test15 {
	public static void main(String[]args) {
		
		while(true) {
		
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入月薪");
		double monthSalary=scanner.nextDouble();//输入月薪
		System.out.println("请输入每年是几个月的月薪");
		int months=scanner.nextInt();//输入每年是几个月的月薪
		System.out.println("用户年薪为:"+(monthSalary*months));//输出用户年薪
		
		//直到键盘键盘输入“exit”,则退出程序(使用break退出循环)
		//输入中途,键盘输入next,则这个用户退出计算不显示“恭喜...”,算下一个用户的年薪
		System.out.println("是否继续?(输入exit退出计算器,输入next进行下一个用户的计算,输入其他字符可继续显示当前用户信息...");
		String input=scanner.nextLine();			//问题1:不停顿来获取字符串? 原因:nextInt()只读走了数字,留下了回车  解决方式1:在本行前加"scanner.nextLine();"读取缓冲区留有的回车  解决方式2:用"String input=scanner.next();"代替"String input=scanner.nextLine();"				
		

		if(input=="next")//问题3:未正常执行判断。 解决方式:input=="字符串"改为"字符串".equals(input)
			continue;
		if(input=="exit")
			break;
		/*   
		 * equals()方法 比较的是两个值(只针对String类型)
		 * ==操作对于基本数据类型比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同
		 * 
		 * 基本数据类型只有8种,可按照如下分类
			①整数类型:long、int、short、byte
			②浮点类型:float、double
			③字符类型:char
			④布尔类型:boolean
		
		 * 引用数据类型:
			引用数据类型非常多,大致包括:
				类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型

		 * String类型不属于基本数据类型,属于引用型变量
		 * */
		
		
		//输出一行字:如果年薪超过10万,输出“恭喜你超越90%的国人”,如果年薪超过20万,输出“恭喜你超越98%的国人”
		if(monthSalary*months>100000)                                                        //问题2:需要小于20w的条件
			System.out.println("恭喜你超越90%的国人");
		if(monthSalary*months>200000)
			System.out.println("恭喜你超越98%的国人");
		}
		
	}
}

  • 最终版
/*
 * 薪水计算器
 * (1)通过键盘输入用户月薪,每年是几个月的月薪
 * (2)输出用户的年薪
 * (3)输出一行字:如果年薪超过10万,输出“恭喜你超越90%的国人”,如果年薪超过20万,输出“恭喜你超越98%的国人”
 * (4)直到键盘键盘输入“exit”,则退出程序(使用break退出循环)
 * (5)输入中途,键盘输入next,则这个用户退出计算不显示“恭喜...”,算下一个用户的年薪
 * */


package test;
import java.util.Scanner;


public class test {
	public static void main(String[]args) {
		
		while(true) {
		
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入月薪");
		double monthSalary=scanner.nextDouble();//输入月薪
		System.out.println("请输入每年是几个月的月薪");
		int months=scanner.nextInt();//输入每年是几个月的月薪
		System.out.println("用户年薪为:"+(monthSalary*months));//输出用户年薪
		
		//直到键盘键盘输入“exit”,则退出程序(使用break退出循环)
		//输入中途,键盘输入next,则这个用户退出计算不显示“恭喜...”,算下一个用户的年薪
		System.out.println("是否继续?(输入exit退出计算器,输入next进行下一个用户的计算,输入其他字符可继续显示当前用户信息...");
		scanner.nextLine();							
		String input=scanner.nextLine();			
		//String input=scanner.next(); 				//可替代Line30、31
		if("next".equals(input)) {
			System.out.println("进行下一个用户年薪计算");
			continue;
		}
			
		if("exit".equals(input)) {
			System.out.print("程序终止");
			break;
		}
		
		//输出一行字:如果年薪超过10万,输出“恭喜你超越90%的国人”,如果年薪超过20万,输出“恭喜你超越98%的国人”
		if(monthSalary*months>100000 && monthSalary*months<200000)                                                        //问题2:需要小于20w的条件
			System.out.println("恭喜你超越90%的国人");
		if(monthSalary*months>200000)
			System.out.println("恭喜你超越98%的国人");
		}
		
	}
}

  • 完成效果
    在这里插入图片描述
  • 问题总结:

1、在Scanner类中的nextInt()后使用nextLine()无法获取键盘字符:
原因:nextInt()只读取了数字,留下了回车,回车存于缓冲区,会被下一个nextLine()直接读取。
解决方案:
①在输入字符串之前先将缓冲区的换行符都去掉(即在“String input=scanner.nextLine();”前一行添加“scanner.nextLine();”
②用next()取代nextLine()
2、进行String的比较时应使用"字符串".equals(变量名)。
equals()方法 比较的是两个值(只针对String类型),而==操作对于基本数据类型比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同。
3、使用if语句判断时,注意判断区间的上下限

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值