Пытаюсь понять метод charAt внутри массива целых чисел

#java #arrays

#ява #массивы #java

Вопрос:

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

 int[] letters = new int[128];
for(int i = 0; i < s.length(); i  ){
    System.out.println(s.charAt(i));
    letters[s.charAt(i)] =  letters[s.charAt(i)]   1;    
}
  

Мой вопрос в том, что, поскольку letters — это целочисленный массив, s.charAt(i) вернет строковый символ.
Я распечатываю букву [s.charAt (i)], которая, скажем, является буквой [‘a’], которая выводит число. Но при использовании charAt это не так. Как мы можем получить доступ к символу в качестве индекса?

Комментарии:

1. Вы ошибаетесь, letters['a'] ошибка не будет выдана. letters[a] would (неизвестный символ a ), и letters["a"] would, но charAt() возвращает a char , а не переменную и не a String .

2. @Andreas Итак, как символ может быть индексом или массивом? Допустим, буквы [‘a’]

3. String не может быть индексом, но код не пытается использовать a String в качестве индекса, он использует a char в качестве индекса.

4. Это так, потому что char это числовое значение (0-65535) с кодовой точкой Unicode. На самом деле, это значение UTF-16, но пока игнорируйте это. Смотрите: Учебные пособия по Java ™ — Примитивные типы данных

5. Попробуйте System.out.println((int) 'a'); и посмотрите, что получится. Подсказка: он напечатает значение ASCII / Unicode символа Юникода «ЛАТИНСКАЯ МАЛЕНЬКАЯ БУКВА A» (U 0061) .

Ответ №1:

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

Это зависит от того, что вы подразумеваете под использованием. Если вы хотите сохранить строковое значение в целочисленный массив — вы не можете. Ни int[] ни Ingeter[] не позволят вам хранить в них какой-либо строковый элемент. Вы получите ошибку времени компиляции, что-то вроде:

 java: incompatible types: java.lang.String cannot be converted to int
  

Я распечатываю букву [s.charAt (i)], которая, допустим, является буквой [‘a’]

Строка#charAt(int) возвращает один символ, и то, что вы пытаетесь сделать, это получить доступ к слоту вашего letters массива с символьным индексом, который, в свою очередь, также остановит ваш процесс компиляции с сообщением:

 java: cannot find symbol
    symbol:   variable yourCharacter
  

Как мы можем получить доступ к символу в качестве индекса?

Вы не можете. Индекс любого массива всегда является положительным целым числом.

Ответ №2:

Допустим, ваша строка равна

 String str = "stack"
for(int i=0; i<str.length(); i  ) {
System.out.println(str.charAt(i))
}
  

// Сигнатурой метода charAt является charAt (индекс int). Здесь он принимает индекс строки, на который ссылается i, и печатает символ. Ваше предположение немного неверно. Вы можете обратиться к классу String официальной документации Java, чтобы лучше понять аргументы методов, что он делает и что возвращает.
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html