Преобразовать строку в массив int - PullRequest
2 голосов
/ 22 сентября 2010

У меня есть массив int, который содержит одну цифру в каждом индексе, поэтому после распечатки он отображает длинное число.Пример: digit = {1, 2, 3, 4, 5} будет выглядеть как 12345.

У меня есть метод, который принимает строку в качестве параметра и помещает полученные числа из строки в массив цифр.Это выглядит так:

digit = new int [50];

for (int i = 0; i < myString.length(); i++)

{digit[i] = Character.digit(myString.charAt(i), 10)};

Теперь, когда я передаю эти две строки функции:

String str1 = "1234567890123456789012345678901234567890";
String str2 = "0000123456789012345678901234567890123456";

, я получаю

12345678901234567890123456789012345678900000000000

1234567890123456789012345678901234560000000000

Может кто-нибудь объяснить мне, почему существуют эти конечные нули?

Ответы [ 4 ]

4 голосов
/ 22 сентября 2010

Ваш массив может содержать 50 элементов.Однако строки, которые вы передаете, содержат не более 50 цифр.Создание нового массива инициализирует каждый элемент в нем с его значением по умолчанию.В данном случае это целое число, поэтому значение по умолчанию равно 0. Именно поэтому вы получаете конечные нули.

Звучит так, будто вы хотите получить коллекцию, а не массив.Я не знаю, какие типы коллекций есть в Java, но в C # большинство людей используют List.

2 голосов
/ 22 сентября 2010

Вам нужно сделать массив цифр того же размера, что и строка:

digit = new int [myString.length()];

Вуаля.

2 голосов
/ 22 сентября 2010

С Солнце :

Каждая переменная класса, экземпляр переменная или компонент массива инициализируется значением по умолчанию, когда оно создано (§15.9, §15.10):

  • Для байта типа значением по умолчанию является ноль, то есть значение (Байт) 0.
  • Для типа short значение по умолчанию равно нулю, то есть значение (Короткий) 0.
  • Для типа int значение по умолчанию равно нулю, то есть 0.
  • Для типа long значение по умолчанию равно нулю, то есть 0L.
  • Для типа float значением по умолчанию является положительный ноль, то есть 0.0f.
  • Для типа double значением по умолчанию является положительный ноль, то есть 0,0d.
  • Для типа char значением по умолчанию является нулевой символ, то есть '\ U0000'.
  • Для типа boolean значением по умолчанию является false.

Все целые числа в массиве инициализируются в 0 при его создании, но те, что в конце, не перезаписываются (поскольку число, которое вы поместили в массив, было меньше 50 цифр).

1 голос
/ 22 сентября 2010

Конечные нули есть, потому что когда вы создаете int, весь массив изначально представляет собой просто нули (как указывал eldarerathis).

Это довольно легко исправить.Просто замените:

digit = new int [50];
на
digit = new int[myString.length()];
Таким образом, вы создадите массив int, равный количеству имеющихся у вас цифр, и не будет инициализироватьсязаписи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...