这是一个来自刘易斯& amp;的 Java软件解决方案:程序设计的基础的练习题。洛夫特斯,第4版;问题PP2.6(这是一个link)
问题如下:“创建一个项目,读取表示秒数的值,然后打印等量的时间作为组合 小时,分钟和秒。 (例如,9999秒是等效的 到2小时46分39秒。)“
我到目前为止尝试了以下
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
double totalSecs, seconds, minutes, hours;
System.out.println("Enter number of seconds: ");
totalSecs = scan.nextInt();
hours = totalSecs/3600;
minutes = (Math.abs(Math.round(hours)-hours))*60;
seconds = (Math.abs(Math.round(minutes)-minutes))*60;
System.out.print(hours + "\n" + minutes + "\n" + seconds);
}
答案出来了, 小时:2.7775 分钟:13.350000000000009 秒:21.00000000000051
我想要做的是取小时数,例如小时数,然后乘以60得到分钟,然后重复几秒钟。然而,我无法搞清楚,因此(Math.abs)等的混乱解决方案
您建议我更改/添加什么?谢谢!
注意:这是一本适合初学者的书,因此我没有学到比我在代码中已经说过的更多的操作。因此,我还没有理解前一次提出这个问题的解决方案。
答案 0 :(得分:3)
作为user2004685答案的替代方案;
int seconds = 9999;
int hour = 9999 / (60 * 60); //int variables holds only integer so hour will be 2
seconds = 9999 % (60 * 60); // use modulo to take seconds without hours so it will be 2799
int minute = seconds / 60; //same as int variable so minute will be 49
seconds = seconds % 60; // modulo again to take only seconds
System.out.println(hour + ":" + minute + ":" + seconds);
答案 1 :(得分:2)
这是一种更简单的方法:
public static void main (String[] args) throws Exception {
SimpleDateFormat sf = new SimpleDateFormat("HH:mm:ss");
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
System.out.println(sf.format(new Date(9999000)));
}
注意:请注意,这只会以24小时格式显示输出,如果小时数大于24,则会增加一天并重新开始。例如,30小时将显示为06:xx:xx
。此外,您必须以毫秒而不是秒来传递输入。
如果你想按自己的方式去做,那么你应该做这样的事情:
public static void main (String[] args) throws Exception {
long input = 9999;
long hours = (input - input%3600)/3600;
long minutes = (input%3600 - input%3600%60)/60;
long seconds = input%3600%60;
System.out.println("Hours: " + hours + " Minutes: " + minutes + " Seconds: " + seconds);
}
输出:
Hours: 2 Minutes: 46 Seconds: 39