Улучшено для цикла - JAVA - PullRequest
       10

Улучшено для цикла - JAVA

0 голосов
/ 24 января 2011

Меня всегда смущает улучшенный цикл for. У меня есть этот пример

public class NonRepeatedChar
{   
    public static void main(String[] args)
    {
        String str = "javapassion";
        int[] count = new int[128];
        char[] charArr = str.toLowerCase().toCharArray();
        for (char c : charArr)
        {
            count[c]++; 
        }
        for (char c : charArr)
        {
            if (count[c] == 1)
            {      
                System.out.println("First Non repeated character is : " + c);
                break;
            }
        }
    }
}

Таким образом, в приведенном выше примере в первом цикле for говорится count [c] ++, это означает, что новый счетчик массивов инициализируется и значение c сохраняется при увеличении итератора?

Ответы [ 4 ]

3 голосов
/ 24 января 2011

c, в свою очередь, представляет собой каждый символ в вашей строке, то есть принимает значения 'j', 'a', 'v' и т. Д.
Каждый символ в Java является 16-битным значением с нормальнымлатинские символы в нижнем регистре имеют значения меньше 128.
Таким образом, count [c] ++ увеличивает ячейку массива, соответствующую этому символу (подсчитывает вхождения):

1 голос
/ 24 января 2011

Чтобы узнать магию улучшенного цикла for, попробуйте развернуть его в обычный цикл for.Например, первый цикл

for (char c : charArr)
{
    count[c]++; 
}

становится

for (int i = 0; i < charArr.length; i++)
{
    char c = charArr[i];
    count[c]++;
}

Таким образом, расширенный цикл for - это меньше кода, что упрощает ввод и чтение, но у вас нет доступа кindex i.

Усовершенствованный цикл for также работает для объектов Iterable, таких как коллекции, но расширяется в другой код.Попробуйте расширить его на основе приведенного выше поведения и интерфейса Iterable .

1 голос
/ 24 января 2011

Давайте разделим ваши два вопроса:

(A), что такое цикл for

(B), что происходит с операциями над массивом count []


(A)

Цикл for - это просто способ пройти по коллекции или массиву, чтобы посетить каждый элемент в указанной коллекции.

(B)

  • цикл for выполняет итерации по символам в «javapassion»
  • каждый символ (c) имеет значение ascii, которое используется в качестве индекса массива в count [c]
  • count [c] ++ в конце увеличивает значение на счетчике [c] для каждой буквы c
  • , результирующий массив count [] содержит количество вхождений каждой буквы, найденных во входной строке
1 голос
/ 24 января 2011

c используется в качестве индекса массива.Так уж получилось, что в Юникоде (и ASCII) «нормальные» символы имеют десятичное основание 10 в диапазоне от 0 до 127 .Следовательно, целочисленное значение любой последовательности символов ASCII, которую вы предоставили бы программе, всегда будет в диапазоне от 0 до 127. (Конечно, вы все же можете передавать не Java-символы (Unicode) в Java, конечно, но в контекстеэтого примера, я думаю, они хотели, чтобы все было просто.) Это также имеет преимущество (потому что строка преобразуется в нижний регистр), давая вам отсортированный ответ в алфавитном порядке.

Массив count хранитколичество раз, когда был найден отдельный символ (учитывая, что символ используется в качестве индекса).Строка count[c]++ увеличивает запись для символа c.Если счет превышает единицу, он становится повторяющимся символом и, следовательно, не будет распечатан в конце.

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