A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 HM朱蛟 于 2013-3-3 21:44 编辑

看视频到看到毕老师的流程控制fortest的地方,其中有个地方有疑惑,如下代码测试编译不通过,然而在多个初始化表达式的情况下逗号分隔是可以通过的
因此能不能得出结论:
在初始化表达式部分的表达式必须属于同一类型?
仅编译运行了2下,来坛子里确认下这样理解是否可以,先谢啦

class fortest
{
        public static void main (String[] args)
        {
                for (int x = 1,(System.out.println("b"));x<3;System.out.println("b"),x++)  //初始化表达式部分变更
                {
                        System.out.println("c");
                }
        }
}

--------------------error----------------------------------------
:\javawork\lesson2>javac lckz.java
ckz.java:46: 需要 <标识符>
               for (int x = 1,(System.out.println("b"));x<3;System.out.println(
b"),x++)
                              ^
ckz.java:46: 需要 ';'
               for (int x = 1,(System.out.println("b"));x<3;System.out.println(
b"),x++)
                                                      ^
ckz.java:46: 非法的类型开始
               for (int x = 1,(System.out.println("b"));x<3;System.out.println(
b"),x++)
                                                          ^
ckz.java:46: 不是语句
               for (int x = 1,(System.out.println("b"));x<3;System.out.println(
b"),x++)
                                                         ^
ckz.java:46: 需要 ';'
               for (int x = 1,(System.out.println("b"));x<3;System.out.println(
b"),x++)

   ^
ckz.java:46: 需要 ';'
               for (int x = 1,(System.out.println("b"));x<3;System.out.println(
b"),x++)

       ^
错误
------------------下面的代码通过①-------------------------------------
class fortest
{
        public static void main (String[] args)
        {
                        
                for (int x = 1,y=0;x<3;System.out.println("b"),x++)  //初始化表达式部分变更
                {
                        System.out.println("c");
                        System.out.println("y="+y);
                }
        }
}
------------------下面的代码通过②-------------------------------------
class fortest
{
        public static void main (String[] args)
        {
                        int x = 1,y=0;
                for (System.out.println("i"),System.out.println("o");x<3;System.out.println("b"),x++)  //初始化表达式部分变更
                {
                        System.out.println("c");
                        System.out.println("y="+y);
                }
        }
}






评分

参与人数 1技术分 +1 收起 理由
郑传庆 + 1 新人鼓励一下

查看全部评分

4 个回复

倒序浏览
本帖最后由 陈圳 于 2013-2-21 09:18 编辑

for(...)循环
初始化语句,应为同一类型,
中间判断语句,返回值不能为空,System.out.println('c');语句反回值为空,可以封装成一个函数,返回其他类型.
demo d=new demo();
                int i=0;
                for(d.show('a');d.show('b')&&(i<2);d.show('c'),i++)  //初始语句返回值为boolean,中间判断语句可以添加,输出语句一样.
                {
                        d.show('d');
                }
        }
        public boolean show(char c)
        {
                System.out.println(c);
                return true;
        }
for循环与while循环可以互换,这种多语句的,转换成while语句比较好理解.
转换成while语句就是这样的
int i=0;
d.show('a')//for循环的初始化语句
while(d.show('b')&&(i<2) )//判断条件
{
    d.show('c');
    i++    //中间执行语句.
}




回复 使用道具 举报
JAVA语法只允许程序员在初始化部分要么定义多个由逗号隔开的表达式,要么定义具有相同

类型的由逗号隔开的多个变量,但不能混用。
回复 使用道具 举报
我记得for语句的格式是这样的
for (初始化代码;执行条件代码; 增量代码)
初始化代码可以是  定义变量,如果是定义变量,那么这个变量在for语句执行完就释放了
也可以是一般的语句,应该是只能有1条,而不是一行
回复 使用道具 举报
哦 谢谢指点了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马