2017-01-29 15 views
5

В настоящее время я использую случайный генератор для чисел генераторов для 9 цифр. В настоящее время я пытаюсь использовать String.format в java для печати случайных чисел, таких как XXX-XX-XXXX, который похож на номер социального страхования. Я просто не могу это сделать, и я не уверен, как это сделать. Я использую modulo, и кажется, что мои дополнения отключены, или я просто совершенно не прав. Проблемы в том, что я должен использовать modulo. Любая помощь, направленная мне в правильном направлении, очень ценится, спасибо. Я пытаюсь установить идентификатор.Форматирование SSN с использованием String.format

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

Использование десятичного format class java –

+0

В вашем исходном коде вы не должны иметь номера, начинающиеся с 0. Ваш номер 00001000 не 1000, а 512. Читайте что-нибудь о _ократных числах, чтобы узнать, почему. –

ответ

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 был целым числом, поэтому я добавил, что это безопасно. Если бы это было двойное% 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)); 
}