控制执行流程(1)

    就像有知觉的生物一样,程序必须在执行过程中控制它的世界,并做出选择。在java中,你要使用执行控制语句来做出选择。

一、true和false

    所有条件语句都利用条件表达式的真或假来决定执行的路径。这里有一个条件表达式的例子:a==b。它用条件操作符“==”来判断a值是否等于b值。该表达式返回true或false。所有的关系操作符,都可以拿来构造条件语句。如果想在布尔测试中使用一个非布尔值,比如在if(a)中,那么首先必须用一个条件表达式将其转换成布尔值,例如if(a!=0)。

二、if-else

    if-else语句是控制程序流程的最基本的形式。其中的else是可选的,所以可按下述两种形式来使用if:   

if(Boolean-expression) 
			statement
		    // 或
	 if(Boolean-expression)
		 	statement
		 else
			 statement

    布尔表达式必须产生一个布尔结果,statement指用分号结尾的简单语句,或复合语句(封闭在花括号内的一组简单语句)。

    作为if-else的一个例子,下面这个test()方法可以告诉你,你猜的数是大于、小于还是等于目标数:

public class IfElse {
	static int result = 0;

	static void test(int testval, int target) {
		if (testval > target)
			result = +1;
		else if (testval < target)
			result = -1;
		else
			result = 0;
	}

	public static void main(String[] args) {
		test(10, 5);
		System.out.println(result);
		test(5, 10);
		System.out.println(result);
		test(5, 5);
		System.out.println(retult);
	}
}

    test()的中间部分,可以看到一个“else if”,那并非新的关键字,而仅仅只是一个else后面紧跟着另一个新的if语句。

三、迭代

    while、do-while和for用来控制循环,有时将它们划分为迭代语句(iteration statement)。语句会重复执行,直到起控制作用的布尔表达式(Booleanexpression)得到“假”的结果为止。

    while循环的格式如下:

while(Boolean-expression) 
		statement

    在循环刚开始时,会计算一次布尔表达式的值;而在语句的下一次迭代开始前会再计算一次。

    下面这个简单的例子可产生随机数,直到符合特定的条件为止:

public class WhileTest {
	static boolean condition() {
		boolean result = Math.random() < 0.99;
		System.out.println(result + ", ");
		return result;
	}

	public static void main(String[] args) {
		while (condition())
			System.out.println("Inside 'while'");
		System.out.println("Exited 'while'");
	}
}

    condition()方法用到了Math库里的static方法random(),该方法的作用是产生0和1之间(包括0不包括1)的一个double值。result的值是通过比较操作符<而得到它,这个操作符将产生boolean类型的结果。在打印boolean类型的值时,将自动地得到适合的字符串true或false。while的条件表达式意思是说:“只要condition()返回true,就重复执行循环体中的语句”。

(1)do-while

    do-while格式如下:

do
		statement
	while(Boolean-expression)

    while和do-while唯一的区别就是do-while中的语句至少会执行一次,即便表达式第一次就被计算为false。而在while循环结构中,如果条件第一次就为false,那么其中的语句根本就不会执行,在实际应用中,while比do-while更常用一些。

(2)for

    for循环可能是最经常使用的迭代形式,这种在第一次迭代之前要进行初始化。随后,它会进行条件测试,而且在每一次迭代结束时,进行某种形式的“步进”。for循环的格式如下:

for(initialization;Boolean-expression;step) 
		statement

    初始化(initialization)表达式,布尔表达式(Boolean-expression),或者步进(step)运算,都可以为空。每次迭代前会测试布尔表达式。若获得的结果是false,就会执行for语句后面的代码行。每次循环结束,会执行一次步进。

    for循环常用于执行“计数”任务:

public class ListCharacters {
	public static void main(String[] args) {
		for (char c = 0; c < 128; c++) {
			if(Character.isLowerCase(c))
				System.out.println("value:"+(int)c+" Character:"+c);
		}
	}
}

    注意,变量c是在程序用到它的地方被定义的,也就是在for循环的控制表达式里,而不是在main()开始的地方定义的。c的作用域就是for控制的表达式的范围内。

    这个程序也使用了java.lang.Character包装器类,这个类不但能把char基本类型的值包装进对象,还提供了一些别的有用的方法。这里用到了static isLowerCase()方法来检查问题中的字符是否为小写字母。

(3)Foreach语法

    java SE5引入了一种新的更加简洁的for语法用于数组和容器,即foreach语法,表示不必创建int变量去对由访问项构成的序列进行计算,foreach将自动产生每一项。

    例如,假设有一个float数组,我们要选取该数组中的每一个元素:

public class ForEachFloat {
	public static void main(String[] args) {
		Random r = new Random(47);
		float[] f = new float[10];
		for (int i = 0; i < 10; i++)
			f[i] = r.nextFloat();
		for (float x : f)
			System.out.println(x);
	}
}

    这个数组使用旧式的for循环组装的,因为在组装时必须按索引访问它。在下面这行中可以看到foreach语法:

for (float x : f)

    这条语句定义了一个float类型的变量x,继而将每一个f的元素赋值给x。

    任何返回一个char数组,因此可以很容易地像下面这样迭代在字符串里面的所有字符:

public class ForEachString {
	public static void main(String[] args) {
		for (char c : "An African Swallow".toCharArray()) {
			System.out.println(c+" ");
		}
	}
}

    foreach语法不仅在录入代码时可以节省时间,更重要的是,它阅读起来也要容易得多,它说明您正在努力做什么(例如获取数组中的每一个元素),而不是给出你正在如何做的细节(例如正在创建索引,因此可以使用它来选取数组中的每一个元素)。我们之要有可能就应该使用foreach语法。

发布了71 篇原创文章 · 获赞 2 · 访问量 6156

猜你喜欢

转载自blog.csdn.net/qq_40298351/article/details/104016089
今日推荐