I am working on a project where I would like to print out the start and end times of flight departures. Currently, I feel something is wrong with my logic since some times are being outputted correctly but most are not. Specifically, I am not sure if something is wrong with the if statements in the startTime and endTime methods. Additionally, my return statements are not working as I wish them to.
Please see my code below -- it is long, but I thought all of it would be useful. Thanks!
Note that departures is a queue object
public double assign()
{
return departures.peek(); // returns first departure time from queue
}
// starttime is some designated minutes before departure
public double startTime(double minBeforeOp)
{
double time = assign() - minBeforeOp;
// logic beneath in order to format number into correct hours:minutes
// checks multiple conditions
int hour = (int) time;
int minute = (int) ((time - hour) * 100);
int minBeforeOp100 = (int) (minBeforeOp * 100);
if (minute >= 60)
{
if (hour == 0)
hour = 23;
// tested some conditions, and obtained logic beneath
if (minBeforeOp100 > minute)
{
int minuteTemp = minBeforeOp100 - minute;
minute = 60 - minuteTemp;
}
else if (minBeforeOp100 < minute)
{
minute = 60 - minBeforeOp100;
}
}
// in order to avoid printing 1:5 and print the actual value of 1:05, for example
// returns double (1.05) for easy calculation in other methods (endTime method)
//HOWEVER, time STILL PRINTS LIKE 1:5**
if (minute > 0 && minute < 10)
{
String str = String.format("%d.%02d", hour, minute);
return Double.parseDouble(str);
}
return Double.parseDouble(hour + "." + minute);
}
// returns a hours:minutes representation of time
public String toStringStart(double minBeforeOp)
{
double number = startTime(minBeforeOp);
int hour = (int) number;
int minute = (int) ((number - hour) * 100);
return hour + ":" + minute;
}
public double endTime(double avgTaxiOut, double minBeforeOp)
{
// ending time
double time = avgTaxiOut + startTime(minBeforeOp) + minBeforeOp;
// logic beneath in order to format number into HOURS:MINUTES
// checks multiple conditions
int hour = (int) time;
int minute = (int) ((time - hour) * 100);
if (minute >= 60)
{
if (hour == 23)
{
hour = 1;
minute = minute - 60;
}
else
{
hour++;
minute = minute - 60;
}
}
departures.dequeue(); // take flight off queue (operation successful)
// in order to avoid printing 1:5 and print the actual value of 1:05, for example
// returns double (1.05) for easy calculation in other methods
if (minute > 0 && minute < 10)
{
String str = String.format("%d.%02d", hour, minute);
return Double.parseDouble(str);
}
else
return Double.parseDouble(hour + "." + minute);
}
// returns a hours:minutes representation of time
public String toStringEnd(double avgTaxiOut, double minBeforeOp)
{
double number = endTime(avgTaxiOut, minBeforeOp);
int hour = (int) number;
int minute = (int) ((number - hour) * 100);
return hour + ":" + minute;
}
// test client
public static void main (String[] args)
{
// fills in queue entries
// NOTE: The StdIn class provides static methods for reading strings and numbers from standard input.
while (!StdIn.isEmpty())
{
// user inputs hours:minutes, ex. 2:30
String arrivalTime = StdIn.readString();
// queue still needs double entries for calculations
double arrival = Double.parseDouble(arrivalTime.replace(":","."));
departures.enqueue(arrival);
}
// IN MINUTES (number after digit is 12 minutes, for example)
double avgTaxiOut = 0.12; // (depart) taxiout time
double minBeforeOp = 0.10; // assigned 10 minutes before departure
// toStringStart and toStringEnd method tested in main
Aucun commentaire:
Enregistrer un commentaire