黑马程序员技术交流社区

标题: for循环中一个有趣的问题 [打印本页]

作者: 黑马连家华    时间: 2012-2-27 18:21
标题: for循环中一个有趣的问题
class Exercise01
{
        public static void main(String[] args)
        {
                int i = 1,d;
                for(System.out.println("a"),d = 1;i < 3;System.out.println("b"))
                {
                        System.out.println("c");
                         i++;
                }
                for(System.out.print("a"),int a = 1;a <3,System.out.print("b");System.out.print("c"))
                {
                        i++;
                        System.out.println("我是换行");
                }
        }
}
为什么第一个for正常运行,第二个for却是编译出错了呢?
作者: 李晓俊老师    时间: 2012-2-27 18:28
for循环括号内第二个语句如果能写上的话只能写条件表达式,不能既加输出语句又写条件表达式
作者: 黑马连家华    时间: 2012-2-27 18:34
李晓俊 发表于 2012-2-27 18:28
for循环括号内第二个语句如果能写上的话只能写条件表达式,不能既加输出语句又写条件表达式 ...

Bingo!你答对了!
作者: 骆龙    时间: 2012-2-27 18:46
因为 for循环(初始化表达式,条件表达式,循环操作后表达式)

条件表达式要么为真 要么为假, System.out.print("b")    该条件 既不为真也不为假, 所以编译错误
作者: 佟都    时间: 2012-2-27 18:47
Noword 发表于 2012-2-27 18:34
Bingo!你答对了!

这个我也想到了。顺便问下,我改了第二条语句后,为什么还是有错误?


作者: 骆龙    时间: 2012-2-27 19:22
tongdu_simon 发表于 2012-2-27 18:47
这个我也想到了。顺便问下,我改了第二条语句后,为什么还是有错误?

...

java程序在读for 循环时 它读System.out.print("a"),int a = 1 这句时应该是这样读的
int a=1,System.out.print("a"); 显然 这肯定是两个语句  它一直提示你确实“;”标示符
如果程序这样写就OK了
  1. class  Noname1
  2. {

  3.         public static void main(String[] args)
  4.         {
  5.                 int i = 1,d;
  6.                 for(System.out.println("a"),d = 1;i < 3;System.out.println("b"))
  7.                 {
  8.                         System.out.println("c");
  9.                          i++;
  10.                 }
  11.                                 int a = 1;
  12.                                 for(System.out.print("a");a <3;System.out.print("c"))
  13.                 {
  14.                        a++;// 这里写i++ 没意义 第二个循环跳不出来
  15.                         System.out.println("我是换行");
  16.                 }       

  17.                
  18.         }


  19.        
  20. }
复制代码

作者: 张开开    时间: 2012-2-27 19:30
class Exercise01
{
        public static void main(String[] args)
        {
                int i = 1,d,a;
                for(System.out.println("a"),d = 1;i < 3;System.out.println("b"))
                {
                        System.out.println("c");
                         i++;
                }

                for(a = 1,System.out.print("a");a <3;System.out.print("c"))
                {
                        i++;
                        System.out.println("我是换行");
                }
        }
}

把a声明成全局变量就可以了。就是如上代码,具体为什么局部变量不行,我也不明白,希望给你点提示吧!!
作者: 佟都    时间: 2012-2-27 19:38
骆龙 发表于 2012-2-27 19:22
java程序在读for 循环时 它读System.out.print("a"),int a = 1 这句时应该是这样读的
int a=1,System.out ...

谢谢!看看我理解的对么:

第一个 for 循环的 System.out.println("a"),d = 1; 能通过是因为编译器把它作为一条语句。
类似于:int a=1, d=1; 来处理。

第二个 for 循环的 System.out.print("a"),int a = 1; 不能通过编译是因为这时候,编译器无法将它作为一条语句来处理了,所以提示“不是语句”,“需要';'”。
作者: 张开开    时间: 2012-2-27 19:44
应该是这样的,呵呵
作者: 唐兴旺    时间: 2012-2-27 19:50
tongdu_simon 发表于 2012-2-27 19:38
谢谢!看看我理解的对么:

第一个 for 循环的 System.out.println("a"),d = 1; 能通过是因为编译器把它 ...

你这两个句子,第二个有int,你声明了类型为int  ,System.out.print("a")不符合编译出错。
第一个句子没有声明int,程序只是按顺序执行了打印,赋值。
个人看法不知道对不对。
作者: 佟都    时间: 2012-2-27 20:07
唐兴旺 发表于 2012-2-27 19:50
你这两个句子,第二个有int,你声明了类型为int  ,System.out.print("a")不符合编译出错。
第一个句子没 ...

{:soso_e181:} 我也是这个意思。
骆龙应该也是这个意思。
作者: 黑马连家华    时间: 2012-2-27 20:44
第二个for循环确实有个错误,i++
改成a++,大家改改就好了
作者: 许圣建    时间: 2012-2-28 03:52
这个问题我遇见过,一眼就看出来了,一个句子里你写了两句话,当然不对了,int a,int b;怎么也不会通过的,来晚了,不过老罗要看看我的回答哦
作者: 黄方    时间: 2012-2-28 17:35
本帖最后由 舞动的心弦 于 2012-2-28 17:37 编辑

额,我看了一下啦!首先你得明白javase 里面for的用法哦:
语法很重要的啦,不能乱用的啦!!
1.for(初始表达式;   布尔表达式;   步长)

无论初始表达式,布尔表达式,还是步长,都可以置空。

但是你给出的"a <3,System.out.print("b");System.out.print("c"))
"肯定是错误的,for语句是死循环(无限循环)的情况:
for( ; ;) {....}//只要布尔表达式为空就是无限循环
for( ;ture;){....}//只要布尔表达式ture就是无限循环
for( ;false;){....}//只要布尔表达式为false就不循环
for( 初始表达式;布尔表达式 ;步长){....}   //根据实际的条件决定
2.这样就总结出4种for循环样式

(1)、for(int i = 0;i < 100;i++) //递减和递加的算一种

(2)、for(;true;) //有空表达式的

(3)、for (int i = 100, j = 100; i > 0 || j>0 ; i--,j++) //有多表达式的

(4)for(;;)这是个 死循环 无限循环(没有跳出语句,才能成为死循环)
建议楼主好好看看《thinking in java》吧,一起加油!




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