0

これは私のコードです。bluejを使用してコンパイルすると、最後の}が強調表示され、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+ " seconds remaining on the clock");
         jobsFinished = true;
    } else {
          System.out.println("JobQueue is empty");
    }
} 
4

6 に答える 6

1

Javaでは、Cのような言語と同様に、メソッド/関数のreturn型に基づいたreturnステートメントが必要です。

あなたの場合:

public boolean runAJob() { ... }

ブール値を返す必要があります。そのため、コードをコンパイルしようとして、メソッド本体に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;
    }
于 2012-10-14T04:46:59.193 に答える
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;
        } 
于 2012-10-14T04:43:09.647 に答える
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とにかく最後の 2 つのステートメントの前に実行されるため、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;
}
于 2014-05-18T17:00:10.173 に答える
0

関数定義/プロトタイプを変更してください...使用しpublic void runAJob()たものの代わりにこれを使用してください...

booleanプロトタイプで置き換えvoidます..そして試してください

于 2014-05-18T16:36:13.033 に答える
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;
    } 
于 2013-03-24T21:04:51.163 に答える
0

return jobsFinished; を入れるのを忘れただけです。System.out.print 行の終わりの後。実行すると、正常に実行およびコンパイルされるはずです。これは、今日同じ間違いを犯したためです。:P

幸運を。

-キーレン

于 2013-12-13T22:02:38.510 に答える