感受Java魅力——基于Java二维数组和If语句编制的税后工资计算方法

  • 1. 致谢
  • 2. 分享的内容与意义
  • 3. 本次编程实践要解决的问题
  • 4. 实现过程中的挑战与对策
  • 5 实现过程
  • 6. 一起来互动
  • 7. 关于我本人

1. 致谢

这是我的第一篇CSDN博客。作为Java小白,首先要感谢达内程序媛泡泡老师的带领:幽默、风趣而又通俗易懂,能够把Java这么一门非常理性的课程讲的这么生动,非常让人敬佩,这让我的Java学习有了一个很好的开始。

2. 分享的内容与意义

本次Java实践,借助新个人所得税政策中的薪资计算案例,理解如何使用二维数组、If语句和for循环解决累加型数据计算问题。欢迎各位前辈指导,并愿与伙伴们共同进步。

3. 本次编程实践要解决的问题

问题名称:求税后工资问题

2019年1月1日起,国家推出新的个人所得税政策,起征点上调值5000元。也就是说税前工资扣除三险一金(三险一金数额假设是税前工资的10%)后如果不足5000元,则不交税。如果大于5000元,那么大于5000元的部分按梯度交税,具体梯度比例如下:第1档:0 ~ 3000元的部分,交税3%第2档:3000 ~ 12000元的部分,交税10%第3档:12000 ~ 25000的部分,交税20%第4档:25000 ~ 35000的部分,交税25%第5档:35000 ~ 55000的部分,交税30%第6档:55000 ~ 80000的部分,交税35%第7档:超过80000的部分,交税45%
比如:小蓝入职一家企业后,税前工资是18000,则他每月该交个税的部分是18000-1800-5000=11200元,个税缴纳数额是3000×3%+8200×10%=910元。税后工资15290元。
请完成一个个税计算程序,在用户输入税前工资后,计算出他对应的纳税数额,以及税后工资为多少?

4. 实现过程中的挑战与对策

这个问题的解决通常会使用第一种方式,如下文的taxCal1(),通过if语句和单纯的数字运算方式来实现:简单也相对容易实现。但缺点是可延展性弱,如果再增加工资档位,需要另外增加冗长的代码。另外,内部实现依赖手工计算,代码可读性弱。

有哪些机会可以进一步优化程序,以简化我们的工作,减少对手工计算的依赖?待解决的问题中呈现了几个特征:

  • 6个档位的工资有着共同的属性,比如都有最低工资、最高工资和税率,所以for循环会有机会
  • 6个档位的计算都是在前面的基础上累加起来的,依然通过for循环解决和If判断语句
  • 6个档位的工资差距不一样,所以不能是单纯的循环,可能要用到数组。

上述特征带来了构建taxCal2()的计算机会,详情见如下实现过程。

5 实现过程

如下代码提供了2种计算方式,第一种是常见的计算方式taxCal1(),第二种是基于问题特征构建的taxCal2().

package ZVC.Varaible;import java.util.Scanner;
public class TestTax {public static void main(String[] args) {System.out.println("请输入您的税前工资(元):");double s = new Scanner(System.in).nextDouble();System.out.println("根据第1种计算方式:");taxCal1(s);System.out.println("根据第2种计算方式:");taxCal2(s);}public static void taxCal1(double s){if((s*0.9-5000) < 0){System.out.println("您的税后工资为:"+(s*0.9));}else if((s*0.9-5000) <= 3000){System.out.println("您的税后工资为:"+(s*0.9-(s*0.9-5000)*0.03));}else if((s*0.9-5000) <= 12000){System.out.println("您的税后工资为:"+(s*0.9-(s*0.9-8000)*0.1-3000*0.03));}else if((s*0.9-5000) <= 25000){System.out.println("您的税后工资为:"+(s*0.9-(s*0.9-17000)*0.2-9000*0.1-3000*0.03));}else if((s*0.9-5000) <= 35000){System.out.println("您的税后工资为:"+(s*0.9-(s*0.9-30000)*0.25-13000*0.2-9000*0.1-3000*0.03));}else if((s*0.9-5000) <= 55000){System.out.println("您的税后工资为:"+(s*0.9-(s*0.9-40000)*0.3-10000*0.25-13000*0.2-9000*0.1-3000*0.03));}else if((s*0.9-5000) <= 80000){System.out.println("您的税后工资为:"+(s*0.9-(s*0.9-60000)*0.35-20000*0.3-10000*0.25-13000*0.2-9000*0.1-3000*0.03));}else {System.out.println("您的税后工资为:"+(s*0.9-(s*0.9-85000)*0.45-25000*0.35-20000*0.3-10000*0.25-13000*0.2-9000*0.1-3000*0.03));}}public static void taxCal2(double sBt){double[][] sc = {{0,3000,12000,25000,35000,55000,80000},{3000,9000,13000,10000,20000,25000,80000},{0.03,0.10,0.20,0.25,0.30,0.35,0.45}};int n = 0;//初始化档位while((n<sc[0].length) && ((sBt*0.9-5000) > (sc[0][n]))){n=n + 1;};double sp = 0;//交税的中间档位(不含最后交税的档位)double sAt = 0;//税后薪资if (n==0 || ((sBt*0.9-5000)<=0)){sAt = sBt * 0.9; //计算0档位的税后工资}else if((sBt*0.9-5000)>0) //计算1档位以后的税后工资{for (int i = 0; i < n-1; i++){sp = sp + sc[1][i] * sc[2][i];}sAt = sBt * 0.9 - sp - (sBt * 0.9 - 5000 - sc[0][n-1]) * sc[2][n-1];}System.out.println("所在档位为第" + n + "档。");System.out.println("您的税后工资为"+sAt+"元");}
}

6. 一起来互动

以上的代码是我本人对于二位数组使用的初次尝试,不当之处,敬请批评指正。关于本文过程的实现和其中方法的使用,您有些什么样的看法呢?

7. 关于我本人

我叫海之归子。我不是海归,起这个名字希望自己能够回归到如大海一般的博大与包容中。我是一名企业管理顾问,从事卓越运营管理咨询,志在支持组织与人突破系统限制,绽放生命光华。我热爱编程,它让我将管理经验模块化,让我有机会更好地去简化人们的工作,帮助人们更好地创造内在和外在价值。
一起共创未来:kevin.yuan@zenithvue.com

感受Java的魅力——基于Java二维数组和if语句编制的税后工资计算方法相关推荐

  1. java读取图片成rgb二维数组

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java读取图片成rgb二维数组 测试代码 public static void main(String[] args) {Color[][] a ...

  2. python画二维散点图-基于python 二维数组及画图的实例详解

    1.二维数组取值 注:不管是二维数组,还是一维数组,数组里的数据类型要一模一样,即若是数值型,全为数值型 #二维数组 import numpy as np list1=[[1.73,1.68,1.71 ...

  3. python画二维数组散点图_基于python二维数组及画图的实例详解

    基于python二维数组及画图的实例详解 下面小编就为大家分享一篇基于python 二维数组及画图的实例详解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 1.二维数组取值 注:不管 ...

  4. Java IDEA Debug进制二维数组

    1.Debug模式 1.1 什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序. 1.2 Debug介绍与操作流程 如何加断点 选择 ...

  5. 1.22 实例:Java输出杨辉三角形(使用二维数组)

    利用 Java 的二维数组来输出指定行数的杨辉三角形. 杨辉三角形由数字进行排列,可以把它看作是一个数字表,其基本特性是两侧数值均为 1,其他位置的数值是其左上方数值与右上角数值之和.打印杨辉三角形时 ...

  6. Java中Arrays.toString ()打印二维数组及Array数组的常用操作

    1.Java中Arrays.toString () 已知打印一维数组的API为System.out.println ( Arrays.toString ();,其参数为数组名或数组指针,其支持的数据类 ...

  7. JAVA进阶开发之(二维数组)

    1.二维数组其实是一个特殊的一维数组,特殊在这个二维数组中每一个元素是一个一维数组 2.就是一维数组里面都是一样的元素,二维数组就是把元素换成了一维数组 3.实际开发中,使用最多的就是一维数组,二维数 ...

  8. java 使用 lamba 表达式处理二维数组

    编写数学优化算法时遇到一个问题:如何将一个二维数组满足一定条件的行,筛选出来并组成一个新的数组. 传统思路: 编写一个专门的方法,这个方法返回满足条件的新数组,但数组必须首选确定满足条件的行数,有点麻 ...

  9. 【Java】 杨辉三角 二维数组打印杨辉三角

    Tips 打印三角的操作 : 每行打印前预留空格 打印指定数量的星号后换行 重复循环打印直至完成所有打印结果 杨辉三角: 三角规律空格最大对称值为 5 大于 5 则会变形 三角规律为当前值为上一个值加 ...

  10. java语言:创建一个二维数组,将古诗《春晓》的内容赋值于二维数组,然后分别用横版和竖版两种方式输出。

    问题:创建一个二维数组,将古诗<春晓>的内容赋值于二维数组,然后分别用横版和竖版两种方式输出. 前两天上java课的时候老师,给我们出了这道题.要求:要用java语言来写. 根据要求创建的 ...

最新文章

  1. Zebra斑马打印机编程C#--入门级别打印
  2. Win7 PPTP/L2TP设置详细图解教程
  3. 苏州outlook的方向分析
  4. C#经典名著:《C#入门经典》(第4版)
  5. 欧拉项目第三题之最大质数因子
  6. 一代上网人的记忆!百度浏览器将不再更新
  7. upnp协议和dlna源码理解与修改
  8. Java中函数参数不固定的问题
  9. 怎么增加C盘空间大小,教你如何调整C盘容量【图文教程 无损数据】分区助手如何给磁盘分区 分区助手使用方法教程
  10. 美洽SDK通过广播结束消息提示
  11. max3232ese_【MAX3232ESE+ PDF数据手册】_中文资料_引脚图及功能_(美信 Maxim Integrated)-采芯网...
  12. Mac读写ntfs磁盘工具:Paragon NTFS for Mac
  13. 如何利用Tempo BI大数据分析工具快速完成数据同环比分析?
  14. 傻码农嘚瑟啥,HR才是国内公司真正的中流砥柱!
  15. 计算机应用基础2207,山东省高等教育自学考试2012年4月份考试专业科目一览表
  16. 基于NRF24L01的CAN数据透传
  17. 大道至简----多示例学习与注意力机制的巧妙结合
  18. 中南大学杰出校友_杰出客户服务的10个要点。
  19. 第二章 离散时间信号和系统的时域描述分析 2.2.2 线性时不变系统
  20. GDUFS 2018信息学院程序设计新手赛(正式赛)Java版题解

热门文章

  1. 前段时间 qq大战 360..
  2. 琢磨事琢磨人琢磨钱,成大事也!
  3. leetcode LCP 03. 机器人大冒险
  4. ZZULIOJ-1035,分段函数求值(Python)
  5. 为什么计算机无法访问u盘,打开U盘后为什么提示拒绝访问 打开U盘后提示拒绝访问原因...
  6. 基于P5.js的动态绘板
  7. AWS EFS vs EBS vs S3(差异和何时使用?)
  8. efs android 分区 img,选择别人efs文件包都是.img格式的,怎么添加你们的.efs文? 爱问知识人...
  9. 程序员的自我修养有哪些途径
  10. 编译linux搭建vs2015,使用Vs2015开发linux(centos7)程序