2

试图弄清楚如何完成这个方法

使用此版本,最终的“税无法解析为变量”

public double calculateTax() {

  if (salary < 9440){
    double tax = 0;
  }
  else {
    double newSalary = salary - 9440;


    if (newSalary <= 32010) {
      double tax = newSalary*0.2;
    } else {
      double tax1 = 32010*0.2;
      double tax2 = (newSalary - 32010)*0.4;
      double tax = tax1 + tax2;
    }
  } 
  return tax;
}

然而,在这个版本中,“方法不返回双精度类型的结果”

public double calculateTax() {

  if (salary < 9440){
    double tax = 0;
  } else {
    double newSalary = salary - 9440;


    if (newSalary <= 32010) {
      double tax = newSalary*0.2;
    } else {
      double tax1 = 32010*0.2;
      double tax2 = (newSalary - 32010)*0.4;
      double tax = tax1 + tax2;

      return tax;
    }
  } 
}

我不能为这个项目定义一个单独的税收字段——我应该把退税放在哪里?谢谢 :)

4

6 回答 6

7

在第一种情况下, thetax位于ifandelse块内,因此在它们之外不可见。因此返回语句中的错误。

在第二种情况下, thereturn位于 an 内部else,这使其成为有条件的返回。因此第二个错误。

所有这些都归结为一个名为scope. 变量的范围在它定义的块内。不能在其声明范围之外访问它。范围可以是方法级别、块级别、实例级别等。

在方法的开头声明tax变量,在任何块之外,它将起作用。

public double calculateTax() {
    double tax; // Declare here
    ..
    // Now remove double keyword from every other place where you've used tax
    // Use the tax created at the beginning of the method all around.
}

最后,你return应该和第一种情况一样。在任何iforelse块之外,因为您的方法在所有情况下都需要return双精度值(不是有条件的)。

于 2013-10-16T16:40:05.833 回答
0

您需要在方法开始时定义它。

double tax = 0;

然后在别处引用它(不重新定义它)。例如

tax = newSalary*0.2;

代替

double tax = newSalary*0.2;
于 2013-10-16T16:40:13.660 回答
0

就这样做,而不是tax多次声明,这是不必要的。

public double calculateTax() {
    double tax = 0;

    //Other codes here (if else etc)

    return tax;

}

于 2013-10-16T16:40:13.960 回答
0

您需要在以下情况之外申报税款:

double tax;
if (salary < 9440){
   tax = 0;
}
else {
于 2013-10-16T16:40:24.007 回答
0

只需tax在方法的开头声明变量(即不在任何if块内),并在最后返回它:

public double calculateTax() {
    double tax = 0;
    double newSalary = salary;

    if (newSalary >= 9440) {
      double newSalary -= 9440;
    }

    if (newSalary <= 32010) {
      double tax = newSalary*0.2;
    }
    else {
      double tax1 = 32010*0.2;
      double tax2 = (newSalary - 32010)*0.4;
      tax = tax1 + tax2;
    }

    return tax;
}

注意:我尽量保留您的变量名称和流程,以使答案更易于理解。但是,您可能应该使用double文字而不是int文字(例如,32010.0代替32010) - 或者更好的是,使用double常量。

于 2013-10-16T16:41:57.060 回答
0

您的代码令人困惑,格式错误,并且到处都是幻数。风格很重要:更多地关注你如何编写代码。邋遢的风格使你的代码更难阅读和理解。

我可以这样写:

public double calculateTax() {
    double tax = 0.0;
    if (salary < 9440) {
       tax = 0.0;
    } else {
       double newSalary = salary - 9440;
       if (newSalary <= 32010) {
           tax = newSalary*0.2;
       } else {
           double tax1 = 32010*0.2;
           double tax2 = (newSalary - 32010)*0.4;
           tax = tax1 + tax2;
       }
    } 
    return tax;
}

或者我可能不会。坏的东西。

于 2013-10-16T16:43:14.217 回答