【问题标题】:trouble with an if statement method in javajava中if语句方法的问题
【发布时间】:2013-10-24 21:28:39
【问题描述】:

想办法解决这个方法

在这个版本中,最终的“税不能解析为变量”

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

我无法为该项目定义单独的税金字段 - 我应该将退税放在哪里?谢谢你:)

【问题讨论】:

  • 你应该查找variable scope
  • 请检查您的大括号并相应地重新缩进您的代码。
  • 始终小心匹配你的大括号!

标签: java if-statement methods


【解决方案1】:

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

在第二种情况下,returnelse 内,这使它成为有条件的返回。因此第二个错误。

所有这些都归结为一个名为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 一个双精度值(不是有条件的)。

【讨论】:

  • @Nelly - 如果对您有帮助,请回答 accept!:)
【解决方案2】:

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

double tax = 0;

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

tax = newSalary*0.2;

而不是

double tax = newSalary*0.2;

【讨论】:

    【解决方案3】:

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

    public double calculateTax() {
        double tax = 0;
    
        //Other codes here (if else etc)
    
        return tax;
    

    }

    【讨论】:

      【解决方案4】:

      你需要在 if 之外报税:

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

      【讨论】:

        【解决方案5】:

        只需在方法的开头声明 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 常量。

        【讨论】:

          【解决方案6】:

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

          我可以这样写:

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

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

          【讨论】:

            猜你喜欢
            • 2021-12-17
            • 1970-01-01
            • 2011-12-01
            • 1970-01-01
            • 2010-12-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多