2011-01-23 2 views
0

Я всегда смущен улучшенным циклом. У меня этот примераEnhanced for loop - JAVA

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; 
      } 
     } 
    } 
} 

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

+1

мы не можем прочитать этот код – irreputable

+0

Ой я был все еще редактирования кода :(, он был отредактирован какой-то другой. Извинения – SuperMan

+0

Я думаю, что я установил его. – KitsuneYMG

ответ

3

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

1

c используется как индекс массива. Так получилось, что в unicode (и ASCII) «нормальные» символы имеют десятичное значение базы 1between 0 and 127. Поэтому целочисленное значение любой последовательности символов ASCII, которую вы поставили в программу, всегда будет находиться в диапазоне от 0 до 127. (Вы все равно можете передавать символы не ASCII (unicode) в Java, но в контексте в этом примере я предполагаю, что они хотели сохранить его простым .) Это также имеет преимущество (потому что строка преобразуется в нижний регистр), давая вам ответ отсортированным в алфавитном порядке.

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

1

Давайте отделить два вопроса:

(А), что представляет собой цикл

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


()

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

(Б)

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

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

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

становится

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

Таким образом, повышается цикл меньше кода, что делает его легче набирать и читать, но не имеют доступа к индексу я.

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