【问题标题】:Missing Return Statement?缺少退货声明?
【发布时间】:2012-10-04 11:13:05
【问题描述】:

这是我的代码。当我使用 bluej 编译时,它会突出显示最后一个 } 并说缺少 return 语句。我不能放 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");
    }
} 

【问题讨论】:

  • 放回jobsFinished有什么问题;

标签: bluej


【解决方案1】:

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

在你的情况下:

public boolean runAJob() { ... }

要求返回一个 boolean因此,当您尝试编译代码时,如果您的方法体中没有 return 语句,编译器会报错。

因此,您要做的是确定您希望返回的信息(在这种情况下为布尔值)。正如其他人指出的那样,您应该返回 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;
             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;
    }

【讨论】:

    【解决方案2】:

    你应该简单地返回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;
            } 
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        你只是忘了放 返回工作完成; 在 System.out.print 行结束之后。 当你这样做时,它应该可以成功运行并编译,我确信这一点,因为我今天犯了同样的错误:P

        祝你好运。

        -基伦

        【讨论】:

          【解决方案5】:

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

          将原型中的boolean替换为void..然后试试

          【讨论】:

            【解决方案6】:

            您指定了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。我还将String jobName = firstJob.getName(); 移动到if 分支内,因为您没有在其他情况下使用它。

            如果您更喜欢使用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;
            }
            

            【讨论】:

              猜你喜欢
              • 2013-07-11
              • 2016-06-23
              • 1970-01-01
              • 2011-03-30
              • 1970-01-01
              • 2020-09-15
              • 1970-01-01
              • 2012-03-23
              • 1970-01-01
              相关资源
              最近更新 更多