Missing Return Statement?

后端 未结 6 1147
半阙折子戏
半阙折子戏 2021-01-25 20:52

This is my code. when I compile using bluej it highlights the last } and says missing return statement. I cant put void because it is a boolean. ANy ideas?

 p         


        
相关标签:
6条回答
  • 2021-01-25 21:07

    You just forgot to put return jobsFinished; after the end of the System.out.print line. When you do, it should run and compile successfully, which I am sure of because I made the same mistake today :P

    Good luck.

    -Keelen

    0 讨论(0)
  • 2021-01-25 21:13

    In Java, as in C-like languages, require a return statement based on the return type of the method / function.

    In your case:

    public boolean runAJob() { ... }
    

    Requires that a boolean be returned. As such, when you try to compile the code, and there isn't a return statement in your method body, the compiler will complain.

    So, what you have to do is determine what information you wish to return(a boolean in this case). As others have pointed out, you should return jobsFinished since that is a boolean type whose value you wish to determine upon the method call.

     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 讨论(0)
  • 2021-01-25 21:13

    Change your function definition/prototype... Use this public void runAJob() instead of what you have used...

    Replace boolean with void in the prototype.. And then try

    0 讨论(0)
  • 2021-01-25 21:22

    You should simply return jobsFinished.

    To be clear:

    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;
            } 
    
    0 讨论(0)
  • 2021-01-25 21:29

    You have specified a boolean return type but your function doesn't return any value.

    The jobsFinished variable is redundant, as is your else branch:

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

    If the conditions are satisfied, the function will return before the last two statements anyway, so an else isn't necessary. I also moved the String jobName = firstJob.getName(); inside the if branch because you're not using it otherwise.

    If you prefer to use a boolean variable, and return it at the end of the function, then you could do:

    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;
    }
    
    0 讨论(0)
  • 2021-01-25 21:30

    return Statement must be always the last statement in the method

    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;
        } 
    
    0 讨论(0)
提交回复
热议问题