对于从此代码获取输出时出现问题的新编码

时间:2017-03-02 22:20:03

标签: java

我持续获得0作为taxRate的输出和我需要获得价值时支付的税额。税率是毛利的15%,这使得税收支付的毛利润超过税率。

import java.util.*;

public class ProfitProjection{

    double totalSales;
    double profitMargin;
    double projectedtotalSales;
    double grossProfit;
    double taxRate;
    double taxPaid;
    double netProfit;

    Scanner dataIn=new Scanner (System.in);

    public ProfitProjection(){

        System.out.print("Enter projected amount of total sales:");
        totalSales=dataIn.nextDouble();
        System.out.print("Enter the profit margin:");
        profitMargin=dataIn.nextDouble();

        taxRate = grossProfit * .15f;       
        grossProfit = totalSales * profitMargin;
        netProfit = grossProfit - taxRate;
        taxPaid = grossProfit * taxRate;



        System.out.println("Projected total sales:" + totalSales);
        System.out.println("Profit margin:" + profitMargin);
        System.out.println("Estimated gross profit:" + grossProfit);
        System.out.println("Tax rate:" + taxRate);
        System.out.println("Amount of tax paid:" + taxPaid);
        System.out.println("Estimated net profit:" + netProfit);

    }

    public static void main(String args[]){

        new ProfitProjection();
    }

}

4 个答案:

答案 0 :(得分:3)

您正在以错误的顺序进行计算。

  1. 您使用grossProfit的值来计算taxRate
  2. 您计算grossProfit
  3. 的值

    问题是,在第一步中,您尚未计算实际grossProfit值,其值将为0.0。这是由于Java的默认初始化规则适用于类的所有字段。

      

    如果某个字段没有显式初始化,或者你可以(某种方式)看到它   显式初始化之前的值发生,然后你会看到   默认的初始值。

         
        
    • false代表boolean
    •   对于任何其他原始类型,
    • 为零,
    •   
    • null适用于任何参考类型。
    •   

    简而言之,您按错误的顺序进行了计算。

    解决方案:更改这两个陈述的顺序......并检查您是否在其他地方犯过同样的错误。

    事实上,还有另一个重要的错误(可能)......导致这个错误未被发现。

    您将这些变量声明为实例字段。鉴于到目前为止编写的代码,它们可能已被声明为局部变量。如果您已经这样做,那么编译器会告诉您grossProfit在初始化之前正在使用。

    我说这是可能错误,因为它取决于是否有更多的代码/功能需要稍后添加。

    还有其他一些错误:

    • taxRate变量名称错误。税率为0.015f。该变量包含的是实际应纳税额,而不是税率。

    • 您应该尽可能准确地指定税率。使用0.015,而不是0.015f。 eff表单是float字面值而不是double字面值。

答案 1 :(得分:2)

您只声明grossProfit而没有为其指定任何值,默认为0.0

public ProfitProjection(){
    grossProfit = 1.0; // assign value to it in your constructor
    taxRate = grossProfit * .15f;       
}

答案 2 :(得分:2)

在这一行:

taxRate = grossProfit * .15f;

您从未初始化grossProfit,但仅声明了它。因此,该值被视为0,因此taxRate被设置为0.

答案 3 :(得分:0)

您的问题是您在设置taxRate之前没有设置毛利。所以上面的答案说的是略微正确的,但不是100%我会告诉你:

public class ProfitProjection{

double totalSales;
double profitMargin;
double projectedtotalSales;
double grossProfit;
double taxRate;
double taxPaid;
double netProfit;

Scanner dataIn=new Scanner (System.in);

public ProfitProjection(){

System.out.print("Enter projected amount of total sales:");
totalSales=dataIn.nextDouble();
System.out.print("Enter the profit margin:");
profitMargin=dataIn.nextDouble();

grossProfit = totalSales * profitMargin; //Swapped this line
taxRate = grossProfit * .15f;       //With this line to have grossProfit set at a value before multiplication.
netProfit = grossProfit - taxRate;
taxPaid = grossProfit * taxRate;



    System.out.println("Projected total sales:" + totalSales);
    System.out.println("Profit margin:" + profitMargin);
    System.out.println("Estimated gross profit:" + grossProfit);
    System.out.println("Tax rate:" + taxRate);
    System.out.println("Amount of tax paid:" + taxPaid);
    System.out.println("Estimated net profit:" + netProfit);

}
public static void main(String args[]){

    new ProfitProjection();
    }
}

希望这有帮助!

编辑: 我在上面的代码中所做的更改是我交换了grossProfit的设置和taxRate的设置。我还在这些行上添加了评论。