Member 13276583 Ответов: 3

Привет, не могли бы вы объяснить работу этого кода ?


package arrays;

public class Chararray {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String s ="Hello";
		int letter[] = new int[256];
                for(char c:s.toCharArray()){
			letter[c]++;
			System.out.println(c);
			System.out.println(letter[c]);
		}

	}

}
<pre lang="java">


Что я уже пробовал:

Мой вывод таков
H
1
e
1
l
1
l
2
o
1

Но я могу следить за тем, как работает петля
for(char c:s.toCharArray()){
			letter[c]++;

3 Ответов

Рейтинг:
20

OriginalGriff

Цикл for довольно прост, это просто "расширенный цикл for": Циклы в Java - GeeksforGeeks[^] Он выполняется один раз для каждого символа во входной строке.
Строка после подсчитывает, сколько каждой буквы находится в исходной строке:

letter[c]++;
Каждая буква используется в качестве индекса массива "букв", и содержимое этого целого числа увеличивается.
Затем вы печатаете письмо и текущий счет. Если я "поверну его на 90 градусов", это будет яснее:
Hello
11121
Если вы все еще не уверены, используйте отладчик и наблюдайте, что происходит во время его выполнения!


Рейтинг:
1

Patrice T

Цитата:
Привет, не могли бы вы объяснить работу этого кода ?

Вы не понимаете этот код, научитесь использовать отладчик и будете наблюдать, как этот код выполняется.

Ваш код ведет себя не так, как вы ожидаете, и вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что вы должны делать, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.
Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]
Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
0

gomisha

Вот как работает этот цикл и код:

линия

for(char c:s.toCharArray())

это усовершенствованный цикл for, который говорит: пройдите через каждый символ в строке s один за другим. Вам нужно преобразовать строку в массив символов, потому что вы не можете использовать расширенный цикл for для циклического перебора строки - вы получите ошибку компиляции (см. здесь для получения более подробной информации).

Поскольку код зацикливается на каждом символе, он устанавливает значение в поле
letter
массив int. Когда массив создается, он имеет размер 256, и все значения инициализируются до 0.

Когда он добирается до первого символа в "Hello", "H", код устанавливает массив int с индексом 72 в 1. Почему 72? Потому что это ASCII - значение "H" - см. эта таблица ASCII позволяет увидеть числовые значения для различных символов.

Линия:

letter[c]++;


увеличивает значение этого индекса массива на 1. Это означает, что если используется одна и та же буква, то она снова увеличит значение int в том же индексе. Вот почему после того, как он читает вторую букву "Л" в "привет", вы видите значение "2". В случае символа "l" Эта буква имеет значение ASCII 108. Так что это значит

letters[108]


был увеличен в два раза, и именно поэтому он отображает 2.

Вы даже можете добавить следующий код в конце, чтобы подтвердить используемые индексы массива:

System.out.println(letter[72]);  //H: 1
System.out.println(letter[101]); //e: 1
System.out.println(letter[108]); //l: 2
System.out.println(letter[111]); //o: 1


Все остальные индексы в массиве будут равны 0 (их значение по умолчанию).

Источник: Java Loops - Ultimate Guide