将数字格式化为军队时间(Big Java Ex.4.15)



我上周刚开始学习Java,目前正忙于练习。基本上,问题是你在军队时间里取两个数字,然后输出差值。例如

Please Enter First time : 0900
Please Enter second time: 1730
Result - > 8 hours and 30 minutes

这个问题的好处是确保程序在第一次大于第二次的情况下运行。首先,我正在努力解决第一部分,这就是我目前拥有的

    class TimeInterval{
        private double timeOne;
        private double timeTwo;
        public TimeInterval(double timeOne, double timeTwo){
            timeOne = this.timeOne;
            timeTwo = this.timeTwo;
        }
        public double getMinutes(){
            double minuteDiff = timeTwo - timeOne;
            minuteDiff = minuteDiff%60.0;
            return minuteDiff;
        }
        public double getHours(){
            double hours = timeTwo - timeOne;
            hours = hours - getMinutes();
            hours = hours/60.0;
            return hours;   
    }
}
public class DataSet{
    public static void main(String [] args){
        TimeInterval time = new TimeInterval(0900,1730);
    }
}

下面是什么让人眼花缭乱。我想将timeOne的新对象设置为0900,但我遇到了一个错误。上面写着"整数太长",这对我来说很有趣,所以我做了一些研究。在我的书第4章的最后一节中,我们讨论了格式化的东西,比如System.out.printf%d, %f

我查看了SO,发现了一种可以做之类的事情的方法

String.format("%05d", yournumber);

在这里你可以在你的号码前加5个0。问题是,我真的不确定如何在我的代码中实现这一点。我试着设置timeTwo=String.format…等等,但由于它是一个字符串,我真的无法对它进行数学运算。而且它不允许我在String.format.之后将其转换为双精度。我应该如何处理我的问题?

以零开头的数字文字被解释为八进制数字,以8为基数,只能使用数字0-7。

因此,数字文字0900是一个无效的八进制数字。尝试:

TimeInterval time = new TimeInterval(900, 1730);

提示:避免对字段和参数使用double。使用int,不会受到double的不精确性的影响。int可以处理您需要的任何号码/时间。

相关内容

最新更新