繁体   English   中英

增强的for循环-JAVA

[英]Enhanced for loop - JAVA

我总是对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的值?

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

c用作数组索引。 碰巧的是,在unicode(和ASCII)中,“普通”字符的基数为10的十进制值介于0和127之间 因此,您提供给程序的任何ASCII字符序列的整数值总是在0到127之间。(当然,您仍然可以向Java提供非ASCII(unicode)字符。在这个示例中,我想他们想保持简单。)这也有好处(因为将String转换为小写),可以为您提供按字母顺序排序的答案。

数组count存储找到单个字符的次数(请参见将该字符用作索引)。 count[c]++增加了字符c的输入。 如果计数超过1,则它将成为重复的字符,因此不会在最后打印出来。

让我们分开两个问题:

(一)什么是for循环

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


(一种)

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

(B)

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

要了解增强的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接口将其扩展。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM