Life at Shanghai

Smile All Day Long

博客园 首页 新随笔 联系 订阅 管理
For
那么,这次来复习 "for"。  首先是形式:
for(initialization; Boolean-expression; step)
  statement

这个是再熟悉不过了,对于我来说自从初中开始学习PASCAL开始for循环就一直是使用率最高的循环控制结构。然而,通常我只是使用单个变量最为参数的for循环,其实for循环的initialization 定义多个同型的变量。例如:
for(int i = 0, j = 1; i < 10 && j != 11; i++, j++)
  // body of for loop

注意此处逗号(comma)的特殊用法,在for循环中的 initializationstep 部分是Java中唯一如此使用逗号的地方。在这里,Bruce Eckel称这时的 comma 为the comma operator 。而 initializationstep 中被逗号分割的statement将按照顺序方式执行,仿佛分号分割的statement一般。特别的,initialization 中只能定义同型变量。

这里,再说无穷循环。根据Bruce所说,一般而言Java编译器将while(true) and for(;;) 视为相同,所以如何取舍完全是个人编程口味而已。就我而言,更倾向于使用while(true) 。原因很简单,语义一目了然。

关于break和continue,只是有一点要强调一下:如果使用label,那么break跳出label所描述的循环,而continue则会掉到label处而后重新进入循环。说实话,我真的很不喜欢label。。。

Switch
接着提一下switch,这个控制结构我从前比较少用到,因为觉得只可以对int值做判断不太方便。但是不久前写的一个windows窗口程序及另一个Java Applet程序的事件处理部分,发现switch还是非常便利的。有一点,就是如果某个case后的表达式符合后会一直执行之后的statement直到break语句或者结束。原本觉得这是个麻烦,如《Java in Nutshell》这类书只是提及语言规范却没有足够的说明,而Bruce Eckel则亲切地指出了一个利用此特性的技巧:让多个case堆叠起来,造成“只要吻合其中任何一个条件,便都执行相同的程序代码”的效果。 例如:

/*
 * Created on 2004-11-25
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 
*/

package com.smilereader.test;

/**
 * @author Sinbadblue Kong
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 
*/

public class OddAndEven {
    
public static boolean isOdd(int i){
        
int j = i % 10;
        boolean result 
= false;
        
switch(j){
        
case 1:
        
case 3:
        
case 5:
        
case 7:
        
case 9:{
            result 
= true;
            System.
out.println("is odd");            
            
break;            
        }

        
default:
            System.
out.println("is not odd");
        }

        
return result;
    }

}


恩,虽然还没有熟悉JUnit,但是还是写个简陋的测试吧。恩,有时间一定要仔细看看JUnit的doc。似乎我还下决心看完Tomcat的doc?.....-_-b
/*
 * Created on 2004-11-25
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 
*/

package com.smilereader.test;

import junit.framework.TestCase;

/**
 * @author Sinbadblue Kong
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 
*/

public class OddAndEvenTest extends TestCase {

    
public void testIsOdd() {
        assertEquals(
true,OddAndEven.isOdd(3));
        assertEquals(
false,OddAndEven.isOdd(8));
        assertEquals(
false,OddAndEven.isOdd(0));        
    }


}



最后捎带一句Math.random( )返回值的范围是: [0,1)

BTW,最后的最后,发现JDK1.4和1.3变化太大了。因为,决定放弃手上的中文版砖头书,以不怕视力下降的魄力开始啃Thinking in Java, 3rd ed. Revision 4.0
posted on 2004-11-25 17:53  Sinbadblue's Blog  阅读(346)  评论(0)    收藏  举报