2012-10-14 126 views
0

这是我的代码。当我使用bluej进行编译时,它突出显示了最后一个}并且缺少返回语句。我不能把void作为布尔值。有任何想法吗?缺少退货声明?

public boolean runAJob() { 
    boolean jobsFinished = false; 
    Job firstJob = getCurrentJob(); 
    String jobName = firstJob.getName(); 
    int jobDuration = firstJob.getDuration(); 
    if (!myJob.isEmpty()&& jobDuration > 0 && jobDuration <= myTotalDuration) { 
     myTotalDuration -= jobDuration; 
     myFinishedJobs.add(myJob.get(0)); 
     myJob.remove(0); 
     System.out.println("'"+jobName+"'" +" is completed. "+ myTotalDuration+ " seconds remaining on the clock"); 
     jobsFinished = true; 
    } else { 
      System.out.println("JobQueue is empty"); 
    } 
} 
+0

是什么把回报jobsFinished的问题; –

回答

0

您应该简单地返回jobsFinished。

要明确:

public boolean runAJob() 
     { 
      boolean jobsFinished = false; 
      Job firstJob = getCurrentJob(); 
      String jobName = firstJob.getName(); 
      int jobDuration = firstJob.getDuration(); 
      if (!myJob.isEmpty()&& jobDuration > 0 && jobDuration <= myTotalDuration) 
      { 
       myTotalDuration -= jobDuration; 
       myFinishedJobs.add(myJob.get(0)); 
       myJob.remove(0); 
       System.out.println("'"+jobName+"'" +" is completed. "+ myTotalDuration+ " seconds remaining on the clock"); 
       jobsFinished = true; 
      } 
      else 
      { 
       System.out.println("JobQueue is empty"); 
      } 
      return jobsFinished; 
     } 
1

在Java中,在C类语言,需要基于方法/函数的返回类型return语句。

你的情况:

public boolean runAJob() { ... } 

需要一个布尔返回。 因此,当您尝试编译代码并且在方法体中没有返回语句时,编译器会发出抱怨。

所以,你要做的是确定你想返回什么信息(在这种情况下是一个布尔值)。正如其他人指出的那样,您应该返回作业已完成,因为这是一个布尔类型,其值希望通过方法调用确定。

public boolean runAJob() 
    { 
     boolean jobsFinished = false; 
     Job firstJob = getCurrentJob(); 
     String jobName = firstJob.getName(); 
     int jobDuration = firstJob.getDuration(); 
     if (!myJob.isEmpty()&& jobDuration > 0 && jobDuration <= myTotalDuration) 
     { 
      myTotalDuration -= jobDuration; 
      myFinishedJobs.add(myJob.get(0)); 
      myJob.remove(0); 
      System.out.println("'"+jobName+"'" +" is completed. "+ myTotalDuration+ " seconds remaining on the clock"); 
      jobsFinished = true; 
      return jobsFinished; //this is one possible place 

     } 
     else 
     { 
      System.out.println("JobQueue is empty"); 
     } 
     //here is another possible place where you could have put the return 
     //return jobsFinished; 
    } 
0

return语句必须总是最后声明的方法

public boolean runAJob() 
    { 
     boolean jobsFinished = false; 

     Job firstJob = getCurrentJob(); 

     String jobName = firstJob.getName(); 

     int jobDuration = firstJob.getDuration(); 

     if (!myJob.isEmpty()&& jobDuration > 0 && jobDuration <= myTotalDuration) 

     { 

      myTotalDuration -= jobDuration; 

      myFinishedJobs.add(myJob.get(0)); 

      myJob.remove(0); 

      System.out.println("'"+jobName+"'" +" is completed. "+ myTotalDuration+ " 

留在时钟“)秒;

   jobsFinished = true; 

     } 

     else 

     { 

      System.out.println("JobQueue is empty"); 

     } 

     return jobsFinished; 
    } 
0

你刚才忘了把 回报jobsFinished ;在System.out.print行结束后的 。 当你这样做时,它应该运行和编译成功,我相信,因为我今天犯了同样的错误:P

祝你好运。

-Keelen

0

更改你的函数定义/原型...使用此public void runAJob(),而不是你用什么...

与原型void更换boolean ..然后尝试

0

您已指定boolean返回类型,但您的函数不返回任何值。

jobsFinished变量是多余的,因为是你else分支:

public boolean runAJob() { 
    Job firstJob = getCurrentJob();  
    int jobDuration = firstJob.getDuration(); 

    if (!myJob.isEmpty() && jobDuration > 0 && jobDuration <= myTotalDuration) { 
     String jobName = firstJob.getName(); 
     myTotalDuration -= jobDuration; 
     myFinishedJobs.add(myJob.get(0)); 
     myJob.remove(0); 
     System.out.println("'"+jobName+"'" +" is completed. "+ myTotalDuration+ " seconds remaining on the clock"); 
     return true; 
    } 

    System.out.println("JobQueue is empty"); 
    return false; 
} 

如果条件得到满足,该函数将return反正最后两个语句之前,这样的else是没有必要的。我还在if分支内移动了String jobName = firstJob.getName();,因为您没有使用它。

如果你喜欢使用boolean变量,return它在函数的末尾,那么你可以做:

public boolean runAJob() { 
    Job firstJob = getCurrentJob();  
    int jobDuration = firstJob.getDuration(); 
    boolean jobsFinished = !myJob.isEmpty() && jobDuration > 0 && jobDuration <= myTotalDuration; 
    if (jobsFinished) { 
     String jobName = firstJob.getName(); 
     myTotalDuration -= jobDuration; 
     myFinishedJobs.add(myJob.get(0)); 
     myJob.remove(0); 
     System.out.println("'"+jobName+"'" +" is completed. "+ myTotalDuration+ " seconds remaining on the clock");    
    } 
    else { 
     System.out.println("JobQueue is empty"); 
    } 
    return jobsFinished; 
}