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

Stu*_*t94 2 java methods if-statement

试图找出如何完成这个方法

有了这个版本,最终的"税收无法解决为变量"

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;
}
Run Code Online (Sandbox Code Playgroud)

但是,使用此版本的"方法不会返回double类型的结果"

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;
    }
  } 
}
Run Code Online (Sandbox Code Playgroud)

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

Sud*_*hul 7

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

在第二种情况下,return它位于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.
}
Run Code Online (Sandbox Code Playgroud)

最后,你return应该像第一种情况一样.在任何一个if或多个else块之外,因为您的方法return在所有情况下都需要一个double值(不是有条件的).