黑马程序员技术交流社区

标题: 为什么循环里面变量x不存在 [打印本页]

作者: 高铭    时间: 2012-4-7 15:49
标题: 为什么循环里面变量x不存在
  1. import java.util.*;


  2. class Test
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 String s =charCount("assddffaagh");
  7.                 System.out.println(s);
  8.         }
  9.         public static String charCount(String str)
  10.         {
  11.                 char[] chs =str.toCharArray();

  12.                 TreeMap<Character,Integer> tm =new TreeMap<Character,Integer>();

  13.                 for(int x = 0; x <chs.length; x++);//这个for循环里面的x变量不存在?为什么
  14.                 {
  15.                         Integer value = tm.get(chs[x]);
  16.                         if(value==null)
  17.                         {
  18.                                 tm.put(chs[x],1);
  19.                         }
  20.                         else
  21.                         {
  22.                                 value = value +1;
  23.                                 tm.put(chs[x],value);
  24.                         }
  25.                
  26.                 }
  27.                 StringBuilder sb =new StringBuilder();

  28.                 Set<Map.Entry<Character,Integer>> entrySet =tm.entrySet();
  29.                 Iterator<Map.Entry<Character,Integer>>it = entrySet.iterator();
  30.                
  31.                 while(it.hasNext())
  32.                 {
  33.                         Map.Entry<Character,Integer> me=it.next();
  34.                         Character ch =me.getKey();
  35.                         Integer value=me.getValue();
  36.                         sb.append(ch+"("+value+")");
  37.                 }
  38.                 return sb.toString();
  39.         }
  40. }
复制代码

作者: 黑马涂冰冰    时间: 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循环语句的()后面是不可以有结束符;号的~~~
  正确的格式 :
  1. for ( ; ; ){
  2.     语句1;
  3.     语句2;
  4. }
复制代码

作者: 高铭    时间: 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