Форматирование строки в целое число - NumberFormatException d! = Java.lang.String ошибка - PullRequest
0 голосов
/ 06 июля 2018

Я работал над заданием и почти выполнил его, но наткнулся на небольшую загадку. Я должен отформатировать вывод так, чтобы число запятых разделяло каждое сотое место. Например: 100 100 100 100. Я немного искал и пытался реализовать разные алгоритмы, но те, которые я пробовал, я столкнулся с ошибкой NumberFormatException d! = Java.lang.String.

Мой код выглядит следующим образом:

public static void printOutput(char[] num1, char[] num2, int[] sum){

        char[] largest = new char[1];
        char[] smallest = new char[1];
        char[] tmp = new char[1];

        if(num2.length > num1.length){
            largest = num2;
            smallest = num1;
        }else{
            largest = num2;
            smallest = num1;
        }     

        String number1 = new String(largest);
        String number2 = new String(smallest);
        String total = Arrays.toString(sum);



       System.out.printf("%,d", number1);


   }  

Теперь, компиляция работает, но не работает во время выполнения. Я подозреваю, что я что-то там запутал ..

Вывод должен выглядеть так, когда все выровнено идеально:

       39,983,928,349,458 + 
           92,387,486,729
     --------------------
       40,076,315,836,187

Я предполагаю, что при использовании столбца длина наибольшего числа будет работать нормально, а затем заполнять все справа налево, но, как я уже сказал, я изо всех сил пытаюсь это выяснить.

Любая помощь будет принята с благодарностью.

Спасибо!

1 Ответ

0 голосов
/ 06 июля 2018

Когда вы получаете исключение, вы также получаете номер строки, в которой произошло исключение. В большинстве случаев номер строки более полезен, чем фактический тип исключения. В вашем случае вы можете видеть, что исключение произошло в строке:

System.out.printf("%,d", number1);

Теперь найдите время, чтобы увидеть, что вы пытаетесь сделать здесь. Часть «%, d», которую вы пытаетесь распечатать, - это не обычная строка, а часть средства форматирования. Другими словами, он говорит вам, как бы вы хотели, чтобы ваша переменная отображалась. Чтобы увидеть, что он делает, нам нужно взглянуть на документы Formatter . Мы видим, что:

%    indicates usage of the formatter
,    indicates that "the result will include locale-specific grouping separators"
d    indicates that "the result is formatted as a decimal integer"

Теперь, если мы прочитаем немного дальше, мы также увидим, что категория аргумента для 'd' является целым числом. Это означает, что Formatter берет целое число и отображает его в соответствии с желаемым форматом. Аргумент, который вы вводите в средство форматирования, это число1, которое является String !

Вам нужно преобразовать ваш массив символов в целое число, а не в строку.

...