编译错误:缺少return语句

时间:2010-08-12 19:27:03

标签: java

class Employee
{
int emp_no;
String emp_name;
double emp_sal;

public Employee(int e_no,String e_name,double e_sal)
{
emp_no=e_no;
emp_name=e_name;
emp_sal=e_sal;
}

public double calBonus()
{
return (emp_sal/10);
}

public void display()
{
System.out.println("Employee No: "+this.emp_no);
System.out.println("Employee Name: "+this.emp_name);
System.out.println("Employee Gross Salary: "+ (emp_sal+calBonus()));
}

}

class Clerk extends Employee
{
String Grade;

public Clerk(int e_no,String e_name,double e_sal,String e_Grade)
{
super(e_no,e_name,e_sal); 
Grade=e_Grade;
this.set_Grade(e_Grade);
}
String set_Grade(String e_Grade)
{
**this.Grade=e_Grade;
}
String get_Grade()
{
return this.Grade;
}**

public void display()
{
super.display();
System.out.println("Grade: " + this.Grade);
}

}

class PaySlip
{
public static void main(String args[])
{
Employee c1;

c1=new Clerk(76,"Saman",12000.50,"Grade1");

c1.display();
}
}

**

Bolded系列中出了点问题。但是我无法弄明白。当我编译它时会显示错误,显示“缺少返回语句'}'。

**

6 个答案:

答案 0 :(得分:6)

String set_Grade(String e_Grade)
{
    this.Grade=e_Grade;
}

应该是

void set_Grade(String e_Grade)
{
    this.Grade=e_Grade;
}

你已经声明了返回类型为String它应该是void,因为你没有return语句它是一个setter。

答案 1 :(得分:1)

String set_Grade(String e_Grade)
{
this.Grade=e_Grade;
}

您宣布set_Grade返回String,但没有return声明。您可能希望该方法“返回”void代替:

void set_Grade(String e_Grade)
{
this.Grade=e_Grade;
}

顺便说一句,在Java中命名getter和setter的常用方法是没有下划线:setGrade

答案 2 :(得分:0)

set_Grade上的方法签名指定应该返回一个String,但是你没有返回任何东西。

另外,请查看http://www.oracle.com/technetwork/java/codeconvtoc-136057.htmlhttp://www.oracle.com/technetwork/java/codeconvtoc-136057.html,了解在java中命名事物和格式化代码的方法。

代码越易读,就越容易修复。

答案 3 :(得分:0)

String set_Grade(String e_Grade)
{
**this.Grade=e_Grade;
}
String get_Grade()
{
return this.Grade;
}**

您有一个应返回String的默认方法。

public void set_Grade(String e_Grade)
{
  this.Grade=e_Grade;
}
public String get_Grade()
{
   return this.Grade;
}
  

在实例方法或   构造函数,这是一个引用   当前对象 - 其对象   正在调用方法或构造函数。   你可以参考任何一个成员   实例中的当前对象   使用此方法或构造函数

   private String grade;

   public void setGrade(String grade) {
     this.grade = grade
   }

   public String getGrade() {
     return this.grade; 
    }

您也可以使用它来设置方法的通用参数

   public <T> T doStaf(T t) {
      //method body
      return t;
   }

   public void doStaff2() {

      String s =  this.<String>doStaff("STRING");

   }

ps格式化在代码块中不起作用

答案 4 :(得分:0)

我会解决的事情数量。

  1. 更改

    String set_Grade(String e_Grade) {    this.Grade = e_Grade; }

  2. public void set_Grade(String e_Grade)
    {
     this.Grade=e_Grade; //also fix the variable name to start with lower case like grade.. followed by convention
    }
    
    1. 在以下构造函数中应用它以防止歧义。

      public Employee(int e_no,String e_name,double e_sal) {

      this.emp_no = e_no;

      this.emp_name = e_name;

      this.emp_sal = e_sal;

      }

答案 5 :(得分:0)

“set_Grade”方法没有返回“String”,因此编译器不喜欢它。

这种方法被称为“setter”或“mutator”(与“getter”或“accessor”相对)。大多数setter方法都不返回值,因此返回类型应为“void”。因此,将“String”替换为“void”将允许您的代码进行编译。

另一方面,Java编码约定规定了如何命名方法的最佳实践规则。所以你的方法应该真的命名为:

void setGrade(....)

SP