我总是对增强的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的值?
答案 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)
答案 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扩展它。