2016-09-14 5 views
1

При преобразовании целого числа в массив int, например 123 до {1,2,3}, я получаю значения {49,50,51}. Не удалось найти, что не так с моим кодом.Целочисленная печать неправильное значение

public class Test { 
    public static void main(String [] args) { 
     String temp = Integer.toString(123); 
     int[] newGuess = new int[temp.length()]; 
     for (int i = 0; i < temp.length(); i++) { 
      newGuess[i] = temp.charAt(i); 
     } 
     for (int i : newGuess) { 
      System.out.println(i); 
     } 
    } 
} 

Выход:

+0

Возможный дубликат [Преобразование целого числа в массив int в Java] (http://stackoverflow.com/questions/39482457/converting-an-integer-into-an-int-array-in-java) –

ответ

4

charAt(i) даст вам UTF-16 код единицы значение целого, например, в вашем случае , Значение кодового блока UTF-16 1 равно 49. Чтобы получить целочисленное представление значения, вы можете вычесть '0' (значение кодового блока UTF-16 48) от i.

public class Test { 
    public static void main(String [] args) { 
     String temp = Integer.toString(123); 
     int[] newGuess = new int[temp.length()]; 
     for (int i = 0; i < temp.length(); i++) { 
      newGuess[i] = temp.charAt(i); 
     } 
     for (int i : newGuess) { 
      System.out.println(i - '0'); 
     } 
    } 
} 

Выход:

+1

К быть педантичным, 'charAt' не возвращает значения ASCII, а скорее значения' char', которые являются кодовыми единицами UTF-16. Так получилось, что первые 128 символов одинаковы в любом случае, что охватывает общий латинский алфавит. Но Java никогда не использовал строки ASCII, это был Unicode с первого дня. –

+0

отредактирован в соответствии с вашим комментарием. Спасибо за информацию.:) – Batty

1

temp.charAt(i) в основном возвращаются вам персонажей. Вам нужно извлечь из него значение Integer.

Вы можете использовать:

newGuess[i] = Character.getNumericValue(temp.charAt(i)); 

Выход

1 
2 
3 

Код

public class Test { 
    public static void main(String [] args) { 
     String temp = Integer.toString(123); 
     int[] newGuess = new int[temp.length()]; 
     for (int i = 0; i < temp.length(); i++) { 
      newGuess[i] = Character.getNumericValue(temp.charAt(i)); 
     } 
     for (int i : newGuess) { 
      System.out.println(i); 
     } 
    } 
} 
0

Как ваш интерес, чтобы получить как целое значение в строку. Используйте метод parse int Integer.parseInt(). это будет возвращено как целое. Пример: int x = Integer.parseInt ("6"); Она возвращает целое число 6.

+0

'Integer.parseInt (" 123 ")' будет возвращать целое число '123', а не' {1,2,3} 'int array. – Batty

1

Чтобы добавить немного Java 8 тонкостей к соединению, которое позволяет нам упаковать все аккуратно, можно дополнительно сделать:

int i = 123; 
int[] nums = Arrays.stream(String.valueOf(i).split("")) 
     .mapToInt(Integer::parseInt) 
     .toArray(); 

Здесь мы получаем поток в массив строки, созданные путем разбиения строкового значения чисел данного целого. Затем мы сопоставляем их с целыми значениями с Integer#parseInt в IntStream, а затем, наконец, делаем это в массив.

Смежные вопросы