【问题标题】:Using a Ternary Operator to a "0" within the statement对语句中的“0”使用三元运算符
【发布时间】:2012-11-03 20:51:59
【问题描述】:

我正在尝试使用变量输入来格式化时间。如果用户将小时输入为 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();
        }

    }
}

【问题讨论】:

    标签: java conditional-operator


    【解决方案1】:

    如何得到小于10的数字前面的多余0。

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

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

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

    我还强烈建议您将camelCase 用于您的局部变量,并且仅在您第一次需要它们时声明它们。

    【讨论】:

    • 会不会和0020一样,不是00016?由于您正在描述如何以十六进制和二进制格式编写 16,但 00016 实际上不会给您十六进制的数字...
    • @LouisWasserman:这取决于您是否假设某种可怕的八进制解析格式。将编辑澄清。
    • 因为我只是在学习,我的导师告诉我用户将输入一个有效时间。
    【解决方案2】:

    也许你应该使用

    System.out.printf("%02d:%02d%n", Hours, Minutes);
    

    【讨论】:

      【解决方案3】:

      您混淆了intString 类型:

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

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

      试试这个:

      String hoursInput;
      //...
      hoursInput = Hours < 10 ? "0" + Hours : "" + Hours;
      

      【讨论】:

      • 我用过这个,它很有效,非常感谢你的王牌。我只需要将 HoursInput 和 MinutesInput 值更改为字符串。简单
      【解决方案4】:

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

      String time = String.format("%02d:%02d", hours, minutes );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-25
        • 2016-06-28
        • 1970-01-01
        • 1970-01-01
        • 2012-08-28
        • 2019-11-08
        相关资源
        最近更新 更多