2017-01-29 80 views
5

我目前使用隨機生成器爲我生成9位數的數字。我目前正在嘗試使用java中的String.format來打印像這個XXX-XX-XXXX這樣的隨機數字,就像社會安全號碼一樣。我只是無法做到,我不知道該怎麼做。我正在使用模數,看起來我的填充已關閉,或者我完全錯誤。問題是我必須使用模數。任何幫助我指向正確的方向非常感謝,謝謝。我正在嘗試修復ID。使用String.format格式化SSN

public String toString(){ 

     System.out.printf("%d\n",ID); 

     return String.format("First Name: %12s LastName %12s ID: %03d-%02d-%04d ", firstName, lastName,ID%1000,ID%10000, ID%000001000); 

    } 
} 
+0

使用十進制格式類java –

+0

在您的源代碼中,您不能有以0開頭的數字。您的數字00001000不是1000,而是512.讀一些關於_octal numbers_的信息來找出原因。 –

回答

4

嘗試做

return String.format("First Name: %12s LastName %12s ID: %03d-%02d-%04d ", firstName, lastName,(int)ID/1000000,(int)(ID%1000000)/10000, ID%10000); 
+0

工作。你能解釋爲什麼你必須用int來投射它嗎? – m0d3r

+0

我不確定ID是否是一個整數,所以我添加它是安全的。如果它是一個double%0xd將需要%0xf – Locke

+0

好吧,它是一個int首先,但你只是增加了我的Java編程的知識。非常感謝。 – m0d3r

5

基本上你需要兩個步驟,而不是一個:

  1. 除以10^X數量刪除最後X數字。 (N/10^X
  2. 獲取模數10^Y取最後的Y數字。 (N % 10^Y

修改代碼

public static int getDigits(int num, int remove, int take) { 
    return (num/(int)Math.pow(10, remove)) % (int)Math.pow(10, take); 
} 

public String toString() { 
    return String.format("First Name: %12s LastName %12s ID: %03d-%02d-%04d ", 
          firstName, lastName, 
          getDigits(ID, 6, 3), getDigits(ID, 4, 2), getDigits(ID, 0, 4)); 
} 

替代解決方案

轉換數字符串,並使用String.substring削減相關的片

public String toString() { 
    String IdStr = String.valueOf(ID); 
    return String.format("First Name: %12s LastName %12s ID: %03d-%02d-%04d ", 
          firstName, lastName, 
          IdStr.substring(0, 3), IdStr.substring(3, 5), IdStr.substring(5, 9)); 
} 
相關問題