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

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

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

感受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][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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/5481203.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存