vendredi 8 septembre 2017

Incorrect time output after calculations

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