• 循环结构


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

    while语句的语法格式如下:

     
    1. while(表达式) {
    2. 语句块
    3. }

    参考答案

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

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

     
    1.     public static void main(String[] args) {
    2.         int count=0;
    3.         while(count<5);
    4. {
    5.             System.out.print(count+" ");
    6.             count++;
    7.         }
    8.     }

    参考答案

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

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

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

     
    1.     public static void main(String[] args) {
    2.         int count=10;
    3.         do
    4.         {
    5.             System.out.print(count+" ");
    6.             count++;
    7.         }while(count<5);
    8.     }

    参考答案

    输出结果为:count=10。

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

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

    参考答案

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

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

    for语句的语法格式如下:

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

    参考答案

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

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

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

    参考答案

    正确。

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

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

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

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

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

    参考答案

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

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

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

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

    参考答案

    输出结果为: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 ,代码如下所示:

     
    1. public class SumOfSeq{
    2.     public static void main(String[] args) {
    3.     }
    4. }

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

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

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

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

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

     
    1. import java.util.Scanner;
    2. public class SumOfSeq2 {
    3.     public static void main(String[] args) {
    4.         Scanner scanner = new Scanner(System.in);
    5.         System.out.println("请输入整数(例如10):");
    6.         int n = scanner.nextInt();
    7.         double result = 0;
    8.         for (int i = 1; i < n; i++) {
    9.             result += 1.0 / i;
    10.             if(i==1){
    11.                 System.out.print("1+");
    12.             }else{
    13.                 System.out.print("1/" + i + "+");    
    14.             }
    15.         }
    16.         result += 1.0 / n;
    17.         System.out.print("1/" + n + "=" + result);
    18.     }
    19. }

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

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

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

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

     
    1. import java.util.Scanner;
    2. public class SumOfSeq2 {
    3.     public static void main(String[] args) {
    4.         Scanner scanner = new Scanner(System.in);
    5.         System.out.println("请输入整数(例如10):");
    6.         int n = scanner.nextInt();
    7.         double result = 0;
    8.         for (int i = 1; i < n; i++) {
    9.             result += 1.0 / i;
    10.             if(i==1){
    11.                 System.out.print("1+");
    12.             }else{
    13.                 System.out.print("1/" + i + "+");    
    14.             }
    15.         }
    16.         result += 1.0 / n;
    17.         System.out.print("1/" + n + "=" + result);
    18.     }
    19. }
  • 相关阅读:
    [LeetCode]230. 二叉搜索树中第K小的元素(BST)(中序遍历)、530. 二叉搜索树的最小绝对差(BST)(中序遍历)
    【二叉树-所有路经系列(根->叶子)】二叉树的所有路径、路径总和 II、路径总和、求根到叶子节点数字之和(DFS)
    [LeetCode]1083. 销售分析 II(Mysql,having+if)
    [LeetCode]196. 删除重复的电子邮箱(delete)
    [LeetCode]面试题62. 圆圈中最后剩下的数字(数学)
    [算法]十进制整数转八进制
    [LeetCode]534. 游戏玩法分析 III(Mysql)
    [LeetCode]Mysql小本本
    [LeetCode]Mysql系列5
    Java 冒泡排序的实现
  • 原文地址:https://www.cnblogs.com/xyk1987/p/8329337.html
Copyright © 2020-2023  润新知