Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理if和else if的税级_Java - Fatal编程技术网

Java 处理if和else if的税级

Java 处理if和else if的税级,java,Java,我有一个问题,试图得到正确的价值观出来的这个程序。该计划的目的是计算总所得税,我认为这可能是一个舍入误差,但我不确定。我已经运行了多个测试用例,数量越大,错误越大 测试用例: 1.单一的 A.税款:10240 B正确输出1118.5 实际产出1118 二,。 共同填充 对70000人征税 正确输出9875 实际产出9665 import java.util.Scanner; public class Tax { public static void main(String args[]) {

我有一个问题,试图得到正确的价值观出来的这个程序。该计划的目的是计算总所得税,我认为这可能是一个舍入误差,但我不确定。我已经运行了多个测试用例,数量越大,错误越大

测试用例: 1.单一的 A.税款:10240 B正确输出1118.5 实际产出1118

二,。 共同填充 对70000人征税 正确输出9875 实际产出9665

import java.util.Scanner;

public class Tax
{

public static void main(String args[])
{
    Scanner scan=new Scanner(System.in);
    int repeats=0;
    System.out.println("How many people are you filing for?");
    repeats=scan.nextInt();
    for(int i=0;i<repeats;i++)
        calculate();
}
public static void calculate()
{
    Scanner scan=new Scanner(System.in);
    boolean isGood=false;
    int bracket=0;
    while(isGood==false)
    {
    System.out.println("Please choose your Filing Status:\n1: Single\n2: Married Filed Jointly\n3: Married Filling Separately\n4: Head of Household");
    bracket=scan.nextInt();
    if(bracket>0&&bracket<5)
        isGood=true;
    }
    System.out.println("Please enter your income (Round to the nearest dollar)");
    double income=scan.nextDouble();
    double [] sBracket={8350,33950,82250,171550,372950};
    double [] fjBracket={16700,67900,137050,208850,372950};
    double [] fsBracket ={8350,33950,68525,104425,186475};
    double [] hhBracket={11950,45500,117450,190200,372950};
    double [] myBracket;
    double [] percents={.1,.15,.25,.28,.33,.35};
    myBracket=sBracket;
    if(bracket==2)
        myBracket=fjBracket;
    if(bracket==3)
        myBracket=fsBracket;
    if(bracket==4)
        myBracket=hhBracket;
    int sum=0;





    if(income<myBracket[0])
        {
        sum+=income*percents[0];
        }       
    else
        {
            sum+=(myBracket[0]*percents[0]);
            income-=myBracket[0];


            if(income>myBracket[1])
                {
                    sum+=(myBracket[1]*percents[1]);
                    income-=myBracket[1];
                    System.out.println("If Ran");
                }
            else if(income<myBracket[1]&&income>0)
                {
                    System.out.println("Else IF ran");
                    sum+=(income*percents[1]);
                    income-=myBracket[1];
                }

            if(income>myBracket[2])
                {
                    sum+=(myBracket[2]*percents[2]);
                    income-=myBracket[2];
                }
            else if(income<myBracket[2]&&income>0)
                {
                    sum+=(income*percents[2]);
                    income-=myBracket[2];
                }

            if(income>myBracket[3])
                {
                    sum+=(myBracket[3]*percents[3]);
                    income-=myBracket[3];
                }
            else if(income<myBracket[3]&&income>0)
                {
                    sum+=(income*percents[3]);
                    income-=myBracket[3];
                }
            if(income>myBracket[4])
                {
                    sum+=(income*percents[5]);
                    income-=myBracket[4];
                }

        }
    System.out.println("Your Tax is :"+sum);    
}
}
import java.util.Scanner;
公共类税
{
公共静态void main(字符串参数[])
{
扫描仪扫描=新扫描仪(System.in);
int repeats=0;
System.out.println(“你申请了多少人?”);
repeats=scan.nextInt();
对于(int i=0;i0&&bracketmyBracket[2])
{
总和+=(我的括号[2]*百分比[2]);
收入-=我的括号[2];
}
否则,如果(收入0)
{
总和+=(收入*百分比[2]);
收入-=我的括号[2];
}
如果(收入>我的括号[3])
{
总和+=(我的括号[3]*百分比[3]);
收入-=我的括号[3];
}
否则,如果(收入0)
{
总和+=(收入*百分比[3]);
收入-=我的括号[3];
}
如果(收入>我的括号[4])
{
总和+=(收入*百分比[5]);
收入-=我的括号[4];
}
}
System.out.println(“您的税款为:“+金额”);
}
}

您已将sum用作int。请将sum用作double,并查看其神奇之处。它是对总和中的值进行四舍五入,所以结果中的值是错误的

import java.util.Scanner;

public class Tax
{

    public static void main(String args[])
    {
        Scanner scan=new Scanner(System.in);
        int repeats=0;
        System.out.println("How many people are you filing for?");
        repeats=scan.nextInt();
        for(int i=0;i<repeats;i++)
            calculate();
    }
    public static void calculate()
    {
        Scanner scan=new Scanner(System.in);
        boolean isGood=false;
        int bracket=0;
        while(isGood==false)
        {
        System.out.println("Please choose your Filing Status:\n1: Single\n2: Married Filed Jointly\n3: Married Filling Separately\n4: Head of Household");
        bracket=scan.nextInt();
        if(bracket>0&&bracket<5)
            isGood=true;
        }
        System.out.println("Please enter your income (Round to the nearest dollar)");
        double income=scan.nextDouble();
        double [] sBracket={8350,33950,82250,171550,372950};
        double [] fjBracket={16700,67900,137050,208850,372950};
        double [] fsBracket ={8350,33950,68525,104425,186475};
        double [] hhBracket={11950,45500,117450,190200,372950};
        double [] myBracket;
        double [] percents={.1,.15,.25,.28,.33,.35};
        myBracket=sBracket;
        if(bracket==2)
            myBracket=fjBracket;
        if(bracket==3)
            myBracket=fsBracket;
        if(bracket==4)
            myBracket=hhBracket;
        double sum=0;





        if(income<myBracket[0])
            {
            sum+=income*percents[0];
            }       
        else
            {
                sum+=(myBracket[0]*percents[0]);
                income-=myBracket[0];


                if(income>myBracket[1])
                    {
                        sum+=(myBracket[1]*percents[1]);
                        income-=myBracket[1];
                        System.out.println("If Ran");
                    }
                else if(income<myBracket[1]&&income>0)
                    {
                        System.out.println("Else IF ran");
                        sum+=(income*percents[1]);
                        income-=myBracket[1];
                    }

                if(income>myBracket[2])
                    {
                        sum+=(myBracket[2]*percents[2]);
                        income-=myBracket[2];
                    }
                else if(income<myBracket[2]&&income>0)
                    {
                        sum+=(income*percents[2]);
                        income-=myBracket[2];
                    }

                if(income>myBracket[3])
                    {
                        sum+=(myBracket[3]*percents[3]);
                        income-=myBracket[3];
                    }
                else if(income<myBracket[3]&&income>0)
                    {
                        sum+=(income*percents[3]);
                        income-=myBracket[3];
                    }
                if(income>myBracket[4])
                    {
                        sum+=(income*percents[5]);
                        income-=myBracket[4];
                    }

            }
        System.out.println("Your Tax is :"+sum);    
    }
}
import java.util.Scanner;
公共类税
{
公共静态void main(字符串参数[])
{
扫描仪扫描=新扫描仪(System.in);
int repeats=0;
System.out.println(“你申请了多少人?”);
repeats=scan.nextInt();
对于(int i=0;i0&&bracketmyBracket[2])
{
总和+=(我的括号[2]*百分比[2]);
收入-=我的括号[2];
}
否则,如果(收入0)
{
总和+=(收入*百分比[2]);
收入-=我的括号[2];
}
如果(收入>我的括号[3])
{
总和+=(我的括号[3]*百分比[3]);
收入-=我的括号[3];
}
否则,如果(收入0)
{
总和+=(收入*百分比[3]);
收入-=我的括号[3];
}
如果(收入>我的括号[4])
{
总和+=(收入*百分比[5]);
收入-=我的括号[4];
}
}
System.out.println(“您的税款为:“+金额”);
}
}

如何将sum变量从
int
更改为
double

我之所以这么说,是因为你会得到最终总和的小数精度,特别是当你说:

正确输出1118.5实际输出1118

实际输出为1118.5

double sum = 0.0; // rest of code
System.out.println("Your tax is: " + sum);