最後のメソッドを実行(使用)しようとすると、実行が開始され、停止することはありません。また、aJob を印刷しようとすると、要素が正しく印刷されません。変な文字で出てきます。runJod および runAll メソッド以外のどこかで間違いを犯していると推測しているため、クラス全体を投稿しています。これを修正するために何をする必要があるか誰か教えてください。
import java.util.ArrayList;
/** */
パブリック クラス JobQueue
{ プライベート ArrayListmyJobInQueue; // 実行するジョブのリスト
private ArrayList<Job>myFinishedJobs;// a list of compleated job
private int myJobDuration; //duration if one job
private int myTimeLeft;//total time left
/**
* Constructor for objects of class JobQueue
*/
public JobQueue()
{
myJobInQueue = new ArrayList<Job>();
myFinishedJobs = new ArrayList<Job>();
myJobDuration =0;
myTimeLeft=0;
}
/**
* Return the list of jobs that have not been completed (including the current job).
*/
public ArrayList<Job> getPendingJobs()
{
return myJobInQueue;
}
/**
* Return the list of jobs that have been completed.
*/
public ArrayList<Job> getCometedJobs()
{
return myFinishedJobs;
}
/**
* Return the job at the front of the pending queue, or null if the queue is empty.
*/
public Job getCurrentJob()
{
if(myJobInQueue!=null)
{
Job FirstJobInTheQueue = myJobInQueue.get(0);
return FirstJobInTheQueue;
}
else
{
return null;
}
}
/**
* Return the amount of time left on the clock (as an integer)
*/
public int getTimeLeft()//Ok
{
return myTimeLeft;
}
/**
* Return the total duration of all the pending jobs(as an integer).
*/
public int getTotalDuration()
{
int myTimeLeft= 0;
for(int i = 0; i<myJobInQueue.size();i++)
{
int num = myJobInQueue.getDuration(i); //I think this line is wrong.
myTimeLeft = myTimeLeft + num ;
}
return myTimeLeft;
}
/**
* Add a Job to the end of the Queue
*/
public void addJob(Job job)
{
if(job!=null)
{
myJobInQueue.add(job);
}
}
/**
* Add the specified number of seconds to the clock.
*/
public void addTime(int seconds)
{
if(seconds>0)
{
myTimeLeft = myTimeLeft + seconds;
}
}
/**
* Run the first job on the queue if there is enough time on the clock and the job queue list is not empty.
* And move the job to the finished jobs list.
*/
public void runAJob(){
if(!myJobInQueue.isEmpty())
{
myJobDuration = myJobInQueue.get(0).getDuration();
if (myJobDuration < myTimeLeft)
{
myTimeLeft = myTimeLeft - myJobDuration;
myFinishedJobs.add(myJobInQueue.get(0));
System.out.println("A job is running: " + myJobInQueue.get(0).getName());
myJobInQueue.remove(0);
}
else
{
System.out.println("Not enogth running time left, please add time on the clock.");
}
}
else
{
System.out.println("No pending job on the list.");
}
}
/**
* Run all the jobs on the queue in order until it runs out of time.
*/
public void runAll()
{
for(int i = 0; myTimeLeft > 0 && myTimeLeft > myJobDuration;i++);
{
runJob();
}
System.out.println("Job can not be run, not enough time left." );
}
}