黑马程序员技术交流社区

标题: for流程控制的一点疑问,多个初始化表达式的类型兼容问题 [打印本页]

作者: HM朱蛟    时间: 2013-2-21 03:45
标题: for流程控制的一点疑问,多个初始化表达式的类型兼容问题
本帖最后由 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);
                }
        }
}







作者: 陈圳    时间: 2013-2-21 09:10
本帖最后由 陈圳 于 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++    //中间执行语句.
}





作者: TK13761    时间: 2013-2-21 21:46
JAVA语法只允许程序员在初始化部分要么定义多个由逗号隔开的表达式,要么定义具有相同

类型的由逗号隔开的多个变量,但不能混用。
作者: 江华    时间: 2013-2-21 22:36
我记得for语句的格式是这样的
for (初始化代码;执行条件代码; 增量代码)
初始化代码可以是  定义变量,如果是定义变量,那么这个变量在for语句执行完就释放了
也可以是一般的语句,应该是只能有1条,而不是一行
作者: HM朱蛟    时间: 2013-2-21 22:41
哦 谢谢指点了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2