在java中使用if语句方法的麻烦

时间:2013-10-16 16:38:18

标签: java if-statement methods

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

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

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;
}

但是,使用此版本时,&#34;方法不会返回double类型的结果&#34;

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;
    }
  } 
}

我无法为此项目定义单独的税收字段 - 我应该在哪里提交退税?谢谢:))

6 个答案:

答案 0 :(得分:7)

在第一种情况下,tax位于ifelse块内,因此在其外部不可见。因此返回语句中的错误。

在第二种情况下,return位于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应该与第一种情况一样。在任何ifelse块之外,因为您的方法在所有情况下都需要return一个双精度值(非条件)。

答案 1 :(得分:0)

您需要在方法的开头定义它。

double tax = 0;

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

tax = newSalary*0.2;

而不是

double tax = newSalary*0.2;

答案 2 :(得分:0)

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

public double calculateTax() {
    double tax = 0;

    //Other codes here (if else etc)

    return tax;

}

答案 3 :(得分:0)

您需要在if:

之外申报税
double tax;
if (salary < 9440){
   tax = 0;
}
else {

答案 4 :(得分: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常量。

答案 5 :(得分:0)

您的代码令人困惑,格式错误,并且充斥着神奇的数字。风格很重要:更注重编写代码的方式。邋style的风格使您的代码更难阅读和理解。

我可能这样写:

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;
}

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