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>