[英]Using a Ternary Operator to a “0” within the statement
我正在尝试使用变量输入格式化时间。 如果用户输入一小时为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();
}
}
}
如何在小于10的数字前面得到额外的0。
你没有,而目标变量是int
类型。 int
只是一个数字,而不是一个字符串 - 而"0" + Hours
是一个字符串。
int
值不包含任何类型的字符串表示 - 数字16是“0x10”或“0b10000”,因为它是“16”...或者甚至“00016”如果您的十进制表示允许多位数。 (“00016”可能被误解为十四,但是,如果它被解析为八进制字符串...)
如果要将数字直接写入控制台,请使用DecimalFormat
将数字转换为所需格式的字符串,或String.format
,或者可能只是PrintStream.printf
。
我还强烈建议您使用camelCase
作为本地变量,并且只在您第一次需要时声明它们。
也许你应该使用
System.out.printf("%02d:%02d%n", Hours, Minutes);
你混淆int
和String
类型:
int HoursInput;
//...
HoursInput = Hours < 10 ? "0" + Hours : Hours;
您的代码有两个问题:您试图在int
存储字符串"07"
(或类似)。 其次,即使有可能,就整数类型而言07
相当于7
(嗯,前导0
具有特殊的八进制含义,但这不是重点)。
试试这个:
String hoursInput;
//...
hoursInput = Hours < 10 ? "0" + Hours : "" + Hours;
您必须使用String变量或使用String类中的格式方法(类似于来自c的sprintf)。
String time = String.format("%02d:%02d", hours, minutes );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.