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);
- }
- }