2011-01-23 127 views
0

我总是与增强for循环混淆。我有这样的例子增强for循环 - 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; 
      } 
     } 
    } 
} 
在上述

因此,在for循环它说计数第一并[c] ++中,这意味着一个新的数组计数被初始化并且在迭代递增的C值被存储?

+1

我们无法读取这段代码 – irreputable 2011-01-23 21:43:29

回答

3

c依次是字符串中的每个字符,即它取值为'j','a','v'等。
Java中的每个字符都是一个16位值,拉丁小写字符的值小于128.
因此count [c] ++递增与该字符相对应的数组单元格(统计它的出现次数)。

1

c被用作数组索引。它恰好在unicode(和ASCII)中的'正常'字符有一个基于10的十进制数值between 0 and 127。因此,您提供给程序的任何ASCII字符序列的整数值将始终在0到127之间。(当然,您仍然可以向Java提供非ASCII(unicode)字符,但在上下文中这个例子我猜他们想保持简单 。)这也有利(因为字符串转换为小写)给你的答案按字母顺序排序。

数组count存储单个字符被找到的次数(将字符用作索引)。行count[c]++递增字符c的条目。如果计数超过一个,则它变成重复字符,因此不会在最后打印出来。

1

让您的两个问题分开:

(一)什么是一个for循环

(B)这是怎么回事与操作上的计数[]数组


(A )

for循环只是一种遍历集合或数组的方式,以便访问集合中的每个成员。

(B)

  • 的用于通过在 “javapassion”
  • 每个字符(c)中的字符循环迭代具有被用作计数阵列索引ASCII值并[c]
  • 计数并[c] ++递增在计数并[c]为每个字母c
  • 在结束时,将所得的计数[]数组包含在输入字符串中找到的每个字母的出现次数的值
1

要了解增强型for循环的魔力,请尝试将其扩展为常规for循环。例如,第一循环

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

成为

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

所以增强的for循环是更少的代码,使其更容易输入和阅读,而不必访问索引我。

增强型for循环也适用于Iterable对象,如集合,但展开为不同的代码。尝试根据上述行为和Iterable interface进行扩展。