黑马程序员技术交流社区
标题:
为什么循环里面变量x不存在
[打印本页]
作者:
高铭
时间:
2012-4-7 15:49
标题:
为什么循环里面变量x不存在
import java.util.*;
class Test
{
public static void main(String[] args)
{
String s =charCount("assddffaagh");
System.out.println(s);
}
public static String charCount(String str)
{
char[] chs =str.toCharArray();
TreeMap<Character,Integer> tm =new TreeMap<Character,Integer>();
for(int x = 0; x <chs.length; x++);//这个for循环里面的x变量不存在?为什么
{
Integer value = tm.get(chs[x]);
if(value==null)
{
tm.put(chs[x],1);
}
else
{
value = value +1;
tm.put(chs[x],value);
}
}
StringBuilder sb =new StringBuilder();
Set<Map.Entry<Character,Integer>> entrySet =tm.entrySet();
Iterator<Map.Entry<Character,Integer>>it = entrySet.iterator();
while(it.hasNext())
{
Map.Entry<Character,Integer> me=it.next();
Character ch =me.getKey();
Integer value=me.getValue();
sb.append(ch+"("+value+")");
}
return sb.toString();
}
}
复制代码
作者:
黑马涂冰冰
时间:
2012-4-7 15:57
本帖最后由 黑马涂冰冰 于 2012-4-7 15:59 编辑
看这一行:
for(int x = 0; x <chs.length; x++);//这个for循环里面的x变量不存在?为什么
多了一个分号,这样for循环变成一个空循环了,而x生命周期只在for循环内,故下面的代码块访问不到x变量
作者:
郑苑东
时间:
2012-4-7 15:59
你for语句后面多了一个“;”当一句语句结束时,我们会写上“;”你在for语句后面加上了";"。。就表示for循环结束了。。而x是定语在for里面的所以会提示不存在。。而你下面写的语句会变成一个方法块。。在一个类生成对象的是会初始化完成员变量之后,会根据顺序来执行代码块中的内容和代码块。。。。当然静态代码块跟静态成员变量不是。。。
作者:
秦岩
时间:
2012-4-7 16:01
for(int x = 0; x <chs.length; x++); 这里多了个分号,for循环语句的()后面是不可以有结束符;号的~~~
正确的格式 :
for ( ; ; ){
语句1;
语句2;
}
复制代码
作者:
高铭
时间:
2012-4-7 16:02
我晕 竟然犯了这么低级的错误 越是着急越看不出来 谢谢
作者:
翟友伟
时间:
2012-4-7 16:24
哈哈 没事 好多有经验的 也会犯低级错误的
是人都会犯错的。。经常的
作者:
孙国军
时间:
2012-4-7 17:07
17. for(int x = 0; x <chs.length; x++);//这个for循环里面的x变量不存在?为什么
18. {
19. Integer value = tm.get(chs[x]);
20. if(value==null)
这边的变量x时for循环的局部变量,当for循环结束后,x就会自动重栈内存中消失
作者:
葛尧
时间:
2012-4-7 17:35
{:soso_e154:}写循环的时候一定要注意,编译器检测不出来这种错误的,只有运行时,结果会超出预想。。
当代码很长的时候就有你头疼了。。
作者:
冯瀚冰
时间:
2012-4-7 17:47
17. for(int x = 0; x <chs.length; x++);
最后的分号使这个for循环自己运行完就结束了,然后x就木有了,下边的代码再想用就会提示不存在
作者:
薛飞飞
时间:
2012-4-7 18:58
for语句后面多了分号,这类错误很常见啊,貌似很多人都容易多写这么个分号...
作者:
newlaw2013
时间:
2012-4-7 19:25
一个分号,将for语句分成了两段:前一段变成了for的空循环。没有了循环体。
下面的{ },则变成了一个构造代码块。
这个构造代码块和静态代码块有点形式上的相似。
◆构造代码块:给对象进行初始化。对象一建立就运行,而且优先于构造函数执行。
-------
◆静态代码块的形式:
static
{}
特点:随着类的加载而执行,只执行一次。
作者:
pray
时间:
2014-4-26 04:13
楼主你的高尚情操太让人感动了。在现在这样一个物欲横流的金钱社会里,竟然还能见到楼主这样的性情中人,无疑是我这辈子最大的幸运。让我深深感受到了人性的伟大。楼主的帖子,就好比黑暗中刺裂夜空的闪电,又好比撕开乌云的阳光,一瞬间就让我如饮甘露,让我明白了永恒的真理在这个世界上是真实存在着的。只有楼主这样具备广阔胸怀和完整知识体系的人,才能作为这真理的唯一引言者。看了楼主的帖子,让我陷入了严肃的思考中,我认为,如果不把楼主的帖子顶上去,就是对真理的一种背叛,就是对谬论的极大妥协。因此,我决定义无返顾的顶了!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2