2012-11-03 70 views
1

我想使用變量輸入格式化一個時間。如果用戶輸入一個小時爲1 - 9,則輸出將包括「0」,並且相同的分鐘數。到目前爲止,如果用戶輸入1小時3分鐘,則輸出讀取1:3而不是01:03。使用三元運算符到語句中的「0」

我如何在不到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(); 
     } 

    } 
} 

回答

0

你感到困惑intString類型:

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

有兩個問題與您的代碼:您要在int的存儲串"07"(或類似)。其次,即使可能,07相當於7就整數類型而言(當然,領先的0具有特殊的八進制含義,但這不是重點)。

試試這個:

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

我用這個,它的工作非常感謝你的王牌。我只需要將HoursInput和MinutesInput值更改爲一個字符串。簡單 – DangerousTreacle

1

也許你應該使用

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

如何在小於10的數字前獲得額外的0。

您不這樣做,而目標變量的類型爲int。一個int只是一個數字,而不是一個字符串 - 而"0" + Hours是一個字符串。

int值不包含任何形式的字符串表示 - 如果十進制表示允許多少,則十六進制數與「16」或甚至「00016」一樣多「0x10」或「0b10000」數字。 (「00016」可能被誤解釋爲十四歲,但是,如果它解析爲一個八進制字符串...)

使用DecimalFormat將數字轉換成字符串你想要的格式,或String.format,或者可能只是PrintStream.printf如果您想直接寫入控制檯。

我也想強烈建議您使用camelCase您的本地變量,並且只有當您第一次需要它們時才聲明它們。

+0

難道不是和'0020',不是'00016'一樣嗎?既然你正在描述如何在十六進制和二進制文件中編寫16,但是'00016'實際上並不會給你十六個數字...... –

+0

@LouisWasserman:這取決於你是否假設了一些可怕的八進制解析格式。將編輯澄清。 –

+0

,因爲我只是在學習,我的導師告訴用戶將輸入一個有效的時間。 – DangerousTreacle

0

必須從String類使用字符串變量或使用格式方法(類似於從C到的sprintf)。

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