1 请描述while语句的执行流程

while语句的语法格式如下:

while(表达式) {
    语句块
}

参考答案

while语句,首先判断表达式的值是否为 true,如果为 true,则执行大括号中的语句块;然后再判断表达式的值是否为 true,依次重复下去,直到表达式的值等于false,则不再执行大括号中的语句块,循环结束。

2 指出下列程序运行后的情况

	public static void main(String[] args) {
		int count=0;
		while(count<5);
{
			System.out.print(count+" ");
			count++;
		}
	}

参考答案

这段代码会形成一个死循环。

乍一看,这段代码片段没有任何问题,但仔细看一下这个程序,不难发现while循环的循环条件表达式后紧跟了一个分号。在Java中,一个单独的分号表示一个空语句,不做任何事情的空语句,这意味着这个while循环的循环体是空语句。空语句作为循环体也不是大问题,问题是当Java反复执行这个循环时,循环条件的返回值没有任何变化,这就形成了一个死循环。分号后面的代码块则与while循环没有任何关系。

3 指出下列代码运行后的结果

	public static void main(String[] args) {
		int count=10;
		do
		{
			System.out.print(count+" ");
			count++;
		}while(count<5);
	}

参考答案

输出结果为:count=10。

从上面程序看,虽然count的值为10,表达式count<5返回false,但是do-while语句还是会执行一次循环体,输出count=10。

4 请简述while语句和do-while语句的区别

参考答案

while语句和do-while语句的区别在于:while语句是先判断循环条件,如果条件为真则执行循环体;而do-while语句则先执行一次循环体,然后才判断循环条件,如果循环条件为真,则执行下一次循环,否则终止循环。

5 请简述for语句的执行流程

for语句的语法格式如下:

for(表达式1;表达式2;表达式3) {
    语句块
}

参考答案

for语句,首先计算表达式1,接着执行表达式2,若表达式2的值等于true,则执行大括号中的语句块,接着计算表达式3,然后再判断表达式2的值。依次重复下去,直到表达式2的值等于false。

6 指出下列代码中,for循环的各个表达式是否正确

	public static void main(String[] args) {
		for(int i=0,j=0,k=0;i<10&&j<4&&k<10;j+=2){
			System.out.println(i++);
			System.out.println(++k+i);
		}
	}

参考答案

正确。

首先,for循环允许同时出现多个初始化语句。上面代码中初始化变量有三个,但是只能有一个声明语句,因此如果需要在初始化表达式中声明多个变量,那么这些变量应该具有相同的数据类型。

其次,循环条件也可以是一个包含逻辑运算符的表达式。上面代码中使用&&来组合多个boolean表达式。

最后,循环迭代语句可以是任何表达式。上面代码中使用了j+=2。

7 指出下列代码的运行结果

	public static void main(String[] args) {
		for (int i = 0; i < 10; i++) {
			System.out.println("i=" + i);
			if (i == 2) {
				break;
			}
		}
	}

参考答案

输出结果为:i=0 i=1 i=2。

运行上面程序,将看到i循环到2时即结束,当i等于2时,循环体内遇到break语句,程序跳出循环。

8 指出下列代码的运行结果

	public static void main(String[] args) {
		for (int i = 0; i < 4; i++) {
			if (i == 2) {
				continue;
			}
			System.out.print("i=" + i +" ");
		}
	}

参考答案

输出结果为:i=0 i=1 i=3

从上面输出结果可以看出, 当i等于2时,程序没有输出i=2,因为程序执行到continue时,忽略了当次循环中continue语句后的代码。

9 数列求和

有数列为:9,99,999,...,9999999999。要求使用程序计算此数列的和,并在控制台输出结果。交互效果如图-1所示。

图- 1

另有数列:1+1/2+1/3…+1/n(n>=2)。要求使用交互的方式计算此数列的和:用户在控制台录入需要计算的整数 n 的值,程序计算此数列的和,并在控制台输出结果。程序的交互过程如图-2所示。

图- 2

参考答案

程序需要使用for循环计算数列的和,然后将计算出来的和输出到控制台。

实现此案例需要按照如下步骤进行。

步骤一:定义类及 main 方法

首先定义一个名为 SumOfSeq的类,并在类中定义Java 应用程序的入口方法main ,代码如下所示:

public class SumOfSeq{
	public static void main(String[] args) {
	}
}

步骤二:计算第一个数列的和

使用for循环计算数列的和,然后将计算出来的和值输出到控制台。代码如下:

public class SumOfSeq {
	public static void main(String[] args) {
		// 数列求和
		long nine = 9;
		long result = nine;
		for (int i = 2; i <= 10; i++) {
			nine = nine * 10 + 9;
			result += nine;
		}
		System.out.println("9+99+999+...+9999999999=" + result);
	}
}

步骤三:计算第二个数列的和

新建类SumOfSeq2,以计算第二个数列(1+1/2+1/3…+1/n)的和。代码如下:

import java.util.Scanner;

public class SumOfSeq2 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入整数(例如10):");
		int n = scanner.nextInt();

		double result = 0;
		for (int i = 1; i < n; i++) {
			result += 1.0 / i;
			if(i==1){
				System.out.print("1+");
			}else{
				System.out.print("1/" + i + "+");	
			}
		}
		result += 1.0 / n;

		System.out.print("1/" + n + "=" + result);
	}
}

本案例的完整代码如下所示:

计算第一个数列(9+99+999+...+9999999999)和的完整代码如下所示:

public class SumOfSeq {
	public static void main(String[] args) {
		// 数列求和
		long nine = 9;
		long result = nine;
		for (int i = 2; i <= 10; i++) {
			nine = nine * 10 + 9;
			result += nine;
		}
		System.out.println("9+99+999+...+9999999999=" + result);
	}
}

计算第二个数列(1+1/2+1/3…+1/n)和的完整代码如下所示:

import java.util.Scanner;

public class SumOfSeq2 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入整数(例如10):");
		int n = scanner.nextInt();

		double result = 0;
		for (int i = 1; i < n; i++) {
			result += 1.0 / i;
			if(i==1){
				System.out.print("1+");
			}else{
				System.out.print("1/" + i + "+");	
			}
		}
		result += 1.0 / n;

		System.out.print("1/" + n + "=" + result);
	}
}