1

我正在尝试使用变量输入来格式化时间。如果用户将小时输入为 1 - 9,则输出将包括“0”,分钟也是如此。到目前为止,如果用户输入 1 小时 3 分钟,则输出显示为 1:3 而不是 01:03。

如何在小于 10 的数字前面获得额外的 0。

这是代码......

import java.util.Scanner;

public class FormatTime {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        int MinutesInput;
        int HoursInput;
        int Hours;
        int Minutes;

        {
            System.out.println("Enter hours between 1 and 24");
            Hours = input.nextInt();
            System.out.println("Enter minutes between 1 and 59");
            Minutes = input.nextInt();

            {
                **//THIS NEXT LINE IS THE PROBLEM**
                HoursInput = Hours < 10 ? "0" + Hours : Hours;
                System.out.print(HoursInput + ":");
            }
            {
                **//THIS NEXT LINE IS THE PROBLEM**
                MinutesInput = (Minutes < 10) ? "0" + Minutes : (Minutes); 
                System.out.print(MinutesInput);
            }
            System.out.println();
        }

    }
}
4

4 回答 4

3

如何在小于 10 的数字前面获得额外的 0。

你没有,而目标变量的类型是int. Anint只是一个数字,而不是一个字符串 - 而是"0" + Hours一个字符串。

int值不包含任何类型的字符串表示 - 数字 16 与“16”一样多“0x10”或“0b10000”......如果您的十进制表示允许多位数,甚至是“00016”。(“00016”可能被误解为十四,但是,如果它被解析为八进制字符串......)

用于DecimalFormat将数字转换为所需格式的字符串,或者String.format,或者PrintStream.printf如果您想直接将其写入控制台。

我还强烈建议您使用camelCase本地变量,并且仅在您第一次需要它们时才声明它们。

于 2012-11-03T20:55:39.377 回答
1

也许你应该使用

System.out.printf("%02d:%02d%n", Hours, Minutes);
于 2012-11-03T20:55:32.827 回答
0

你很困惑intString类型:

int HoursInput;
//...
HoursInput = Hours < 10 ? "0" + Hours : Hours;

您的代码有两个问题:您试图将字符串"07"(或类似的)存储在int. 其次,即使有可能,就整数类型而言,07它相当于(好吧,前导具有特殊的八进制含义,但这不是重点)。70

试试这个:

String hoursInput;
//...
hoursInput = Hours < 10 ? "0" + Hours : "" + Hours;
于 2012-11-03T20:56:01.573 回答
0

您必须使用 String 类中的 String 变量或使用格式方法(类似于 c 中的 sprintf)。

String time = String.format("%02d:%02d", hours, minutes );
于 2012-11-03T20:57:34.967 回答