繁体   English   中英

在语句中使用三元运算符为“0”

[英]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);

你混淆intString类型:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM