Forums Register Login

Calculating download time

+Pie Number of slices to send: Send
Hi. I new to Java and learning on my own from a book. One of the exercises is to calculate the download time of a 50MB file. I have figured out the hours and minutes but my seconds are off. Here is the code:

import java.util.Scanner;
import java.math.BigDecimal;

public class DownloadTime
{
public static void main( String parameters[] )
{
final double KB_PER_SEC = 5.2;

double hours = 0;
double minutes = 0;
double seconds = 0;
double megabytes = 0;
double kilobytes = 0;
double totalSeconds = 0;
Scanner sc = new Scanner( System.in );
String choice = "n";

do
{
System.out.print( "\n\nEnter the size of the file in megabytes(MB): " );
megabytes = sc.nextDouble();

// Convert megabytes to kilobytes because the value to divide must be in seconds. The division of
// kb and KB_PER_SEC will cancel out the kilobytes and leave only seconds, which is what we want.
kilobytes = megabytes * 1024;
totalSeconds = kilobytes / KB_PER_SEC;

// There are 3600 seconds in one hour so divide the total
// number of seconds by 3600 to get the number of hours.
hours = totalSeconds / 3600;

// The minutes are the remainder that's left after getting the hours. Since
// there are 60 seconds in one minute divide that remainder by 60.
minutes = ( totalSeconds % 3600 ) / 60;

// The seconds are what's left over after getting the hours and minutes.
seconds = ( totalSeconds % 3600 ) - ( minutes * 60 );

//// Convert megabytes to kilobytes because the value to divide must be in seconds. The division of
//// kb and KB_PER_SEC will cancel out the kilobytes and leave only seconds, which is what we want.
//kilobytes = megabytes * 1024;
//BigDecimal bdKilobytes = new BigDecimal( Double.toHexString( kilobytes ) );
//bdKilobytes = bdKilobytes.
//totalSeconds = kilobytes / KB_PER_SEC;
//
//// There are 3600 seconds in one hour so divide the total
//// number of seconds by 3600 to get the number of hours.
//hours = totalSeconds / 3600;
//BigDecimal bdHours = new BigDecimal( Double.toString( hours ) );
//
//// The minutes are the remainder that's left after getting the hours. Since
//// there are 60 seconds in one minute divide that remainder by 60.
//minutes = ( totalSeconds % 3600 ) / 60;
//BigDecimal bdMinutes = new BigDecimal( Double.toString( minutes ) );
//
//// The seconds are what's left over after getting the hours and minutes.
//seconds = ( totalSeconds % 3600 ) - ( minutes * 60 );
//BigDecimal bdSeconds = new BigDecimal( Double.toString( seconds ) );

// System.out.println( "\nA 56K modem will take " + bdHours + " hours, " + bdMinutes + " minutes, and " + bdSeconds + " seconds." );
// System.out.print( "\nContinue?(y/n): " );
// choice = sc.next();

System.out.println( "\nA 56K modem will take " + hours + " hours, " + minutes + " minutes, and " + seconds + " seconds." );
System.out.print( "\nContinue?(y/n): " );
choice = sc.next();

}
while ( choice.equalsIgnoreCase( "y" ) );
}
}

I think that I am loosing something when I do the division for totalSeconds. I should point out that when I used a an int value such as 4206 seconds instead of doing a calculation I get the correct answer(1 hour, 10 mins 6 secs)

KP>
+Pie Number of slices to send: Send
I forgot to add that in the book it shows the result for a 50MB file as 2 hours 44 minutes and 6 seconds. I got the 2 and 44 but I'm getting 0 seconds.

KP>
+Pie Number of slices to send: Send
You have correctly calculated the minutes with % 3600. Have you tried the same sort of thing for seconds?
+Pie Number of slices to send: Send
The formula I have works. If I use the example of 4206 seconds instead of reading a value in and doing a division it works out the following way:

(1) There are 3600 seconds in one hour so divide by 3600.

4206 / 3600 = 1 ->This is the number of hours

4206 % 3600 = 606 -> This is the remainder from the division


(2) There are 60 seconds in one minute so divide 606 by 60 to get the minutes

606 / 60 = 10 -> This is the number of minutes

606 % 60 = 6 -> This remainder is the number of seconds.


(3) To get the number of seconds I used the following formula:

(4206 % 3600) - (60 * 10)

(totalNumberOfSeconds % secondsPerHour) - (secondsPerMinute * minutes)

KP>
+Pie Number of slices to send: Send
Problem Solved! The solution is to cast the result of division to a long. You can also use the Math.round method.

KP>
Your mind is under my control .... your will is now mine .... read this tiny ad
a bit of art, as a gift, the permaculture playing cards
https://gardener-gift.com


reply
reply
This thread has been viewed 5337 times.
Similar Threads
java.util.Date
I need help refining some code
Convert milliseconds to time
Int cannot be dereferenced
Countdown Timer or JavaScript replacing HTML
More...

All times above are in ranch (not your local) time.
The current ranch time is
Mar 18, 2024 20:37:08.