Как разобрать String.format добавил 0 в int - PullRequest
2 голосов
/ 30 апреля 2019

Я хочу сгенерировать случайный национальный идентификационный номер, и когда я добавляю 0 с помощью String.format () для заполнения цифр, я не могу разобрать его обратно в int

public class NinGenerator {

        public static void Generator(sex name){ // sex is enum

        Random rand = new Random();

        int year = rand.nextInt(60) + 40;   // For starting at year 40
        int month, day, finalNumbers;

        month = rand.nextInt(12) + 1;

        if(name == sex.FEMALE){ // In case of female
            month += 50;
        }

        switch(month){  // For max number of days to match given month
        ```
        case 1:
        case 3:
            day = rand.nextInt(30) + 1;
        ```
        }

        finalNumbers = rand.nextInt(9999) + 1;  // last set of numbers

        String nin = FillZeroes(year, 2) + FillZeroes(month, 2) + FillZeroes(day, 2) + FillZeroes(finalNumbers, 4); // Merging it into string

        // Here occurs error

        int ninInt = Integer.parseInt(nin); // Parsing it into number

        while(ninInt % 11 != 0){    // Whole number has to be divisble by 11 without remainder
            ninInt++;
        }

            System.out.println("National identification number: " + ninInt);

    }

    public static String FillZeroes(int number, int digits){    // For number to correspond with number of digits - filling int with zeros

        String text = String.valueOf(number);

        if(text.length() < digits){

            while(text.length() != digits){
                text = String.format("%d1", number);
            }
        }

        return text;
    }

}

Я хочу сгенерировать 10-значное число, делимое на 11 без напоминания, компилятор всегда выдает ошибку в строке при разборе

Ответы [ 2 ]

2 голосов
/ 30 апреля 2019

Я проверил ваш код и считаю, что вы достигли предела того, насколько высоко может идти int.Если вы попытаетесь поместить «2147483647» в качестве значения nin, оно запустится, но как только вы перейдете к «2147483648», вы получите ту же ошибку.Если вы хотите это исправить, вам, возможно, придется использовать тип данных, например long или double, в зависимости от того, что вы хотите с ним сделать.

Здесь приведена ссылка, показывающая различные типы данных и их диапазоны.

0 голосов
/ 30 апреля 2019

Ваша функция FillZeroes () может быть просто:

public static String FillZeroes(int number, int digits)
{
    String format = "d" + digits.ToString();
    return number.ToString(format);
}
...