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

时间:2016-07-25 23:31:00

标签: java

我上周刚刚开始学习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.之后我也不会让它把它转换为双倍我应该如何处理我的问题?

1 个答案:

答案 0 :(得分:3)

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

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

0900

提示:避免对字段和参数使用TimeInterval time = new TimeInterval(900, 1730); 。请改用double,这不会受int的不精确影响。 double可以处理您需要的任何数量/时间。