增强了循环 - JAVA

时间:2011-01-23 21:41:13

标签: java loops

我总是对增强的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 个答案:

答案 0 :(得分:3)

反过来,

c是String中的每个字符,也就是说,它取值'j','a','v'等。
Java中的每个字符都是16位值,普通的拉丁小写字符值小于128 因此count [c] ++递增对应于该字符的数组单元格(计算它的出现次数)。

答案 1 :(得分:1)

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

数组count存储找到单个字符的次数(看作该字符用作索引)。第count[c]++行增加了字符c的条目。如果计数超过1则会成为重复的字符,因此最后不会打印出来。

答案 2 :(得分:1)

让我们分开你的两个问题:

(A)什么是for循环

(B)count []数组

上的操作发生了什么

(A)

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

(B)

  • for循环遍历“javapassion”中的字符
  • 每个字符(c)都有一个ascii值,用作count [c]
  • 中的数组索引
  • count [c] ++增加每个字母c
  • 的count [c]处的值
  • 最后,生成的count []数组包含输入字符串中找到的每个字母的出现次数

答案 3 :(得分:1)

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

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

变为

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

因此增强的for循环代码更少,因此更容易键入和读取,但您无法访问索引i。

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