Logo

郎哥编程

Java循环结构及while循环语句

2018-07-28 1406

文章导读

前面讨论了编程中进行判断的各种方法,然而有些问题仅仅通过判断还不能解决。某些情况下,为解决一个问题常常需要重复执行一个或多个操作。Java为此提供了循环语句来解决重复操作的问题。本篇主要探讨Java循环语句while的语法及使用方法。通过本篇的学习,你将掌握如何使用while循环、do-while循环、嵌套循环解决问题中的循环操作


本文分成四个小节,第一小节认识循环结构;第二小节讲述while循环语句语法及使用方法;第三小节讲述do-while循环语句的语法及与while的使用区别;第四小节讲述while循环的嵌套使用。

第一小节  认识循环结构

在讲述循环结构之前,先看一个例子。

任务要求:要求输出从1—5分别乘以10所得的乘法表,用以前学过的知识编制的程序代码如下。


package condition;
public class MultipSample {
    public static void main(String[] args) {
        int result1, result2, result3, result4, result5;
        result1 = 1 * 10;
        System.out.printf("1 * 10 = %d\n", result1);
        result2 = 2 * 10;
        System.out.printf("2 * 10 = %d\n", result2);
        result3 = 3 * 10;
        System.out.printf("3 * 10 = %d\n", result3);
        result4 = 4 * 10;
        System.out.printf("4 * 10 = %d\n", result4);
        result5 = 5 * 10;
        System.out.printf("5 * 10 = %d\n", result5);
    }
}


程序编写五条语句计算乘积,再编写另外五条语句显示这些乘积。如果要求输出1—100的数与10相乘的乘法表呢?就需要重复编写100次这样的语句。这样既费时又费力。我们需要一种方法可以快速有效地执行重复性操作。循环结构就是解决这类问题的。

循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,重复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。Java语言提供了三种不同形式的循环结构。

1. while循环结构

用于在特定条件为真的情况下重复执行某些操作,在执行循环体之前先检查条件,一旦条件为假,循环就停止。

2.do—while循环结构

同样用于在特定条件为真的情况下重复执行某些任务。但是在do—while循环中,是在执行循环语句之后再检查条件。因此,在循环结束前,循环体内的语句至少会被执行一次。

3.for循环结构

fou循环与while循环在功能上类似,只要条件为真,就会执行循环体中的语句。同样,也是在执行循环语句之前先检查条件,但是,其语法规则与while循环有所不同。

第二小节  while循环语句

while循环的一般语法是:

while( 表达式 )

       语句;

其中,表达式是循环条件,语句为循环体。while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句,一旦条件为假,就停止执行循环体。如果条件在开始时就为假,则不执行循环体语句直接退出循环。

循环体语句可以是空语句、单条语句或语句集。如果是语句集,则要用“{”和“}”把它们括起来。条件可以是任何表达式。

编程示例1

任务要求:实现输出从1—10分别乘以10所得的乘法表。

程序思路分析:声明了两个int类型的变量num和result,分别用来存储数字和乘积。然后,将num初始化为1,因为打算在while循环中从1开始执行乘法运算,求出1—10的数字与10的乘积,因此将while循环的条件编写为num<=10。这样确保了只要num小于等于10,就执行while循环;而当此条件变为假时,即num的值达到11时,就结束此循环。循环体中的第一个语句用num乘以10,将计算结果保存在变量result中。第二个语句输出乘法表,循环体中的最后一个语句将num的值递增1,来修改num的值。此处使用了单目自增运算符++,也可以编写为num=num+1,来替代num++。

程序中的num++非常重要,这条语句通过修改num的值来修改循环条件,直到num的值等于11,循环条件为假时退出循环。也就是说,循环条件中的变量,需要在循环中重新赋值,以逐渐改变循环条件的值,直到循环条件为假;否则循环将永远不会停止,这种循环称为“死循环”或者“无限循环”。

程序代码如下:

package condition;
public class LoopSample1 {
    public static void main(String[] args) {
        // num初始化为1
        int num = 1;
        int result;
        while (num <= 10) {
            result = num * 10;
            System.out.printf(" %d * 10 = %d \n", num, result);
            // 使用自增运算符,修改循环变量
            num++;
        }
    }
}

编程示例2

任务要求:编写一个无限循环的例子。

程序思路分析:想要while语句无限循环,只需要在while循环体内不要修改循环变量count的值就可以了,此时循环条件一直为真,while语句无法跳出循环。

程序代码如下:

package condition;
public class LoopSample2 {
     public static void main(String[] args) {
        int count = 0;
        while (count < 100) {
            System.out.println("这将没完没了,帮帮我吧!!!");
            System.out.printf("试试Ctrl+C吧");
        }
 
    }
}

编程示例3

任务要求:编写一个程序,要求从摄氏度0度到250度,每隔20度为一项,输出一个摄氏温度与华氏温度的对照表,同时要求对照表中的条目不超过10条。

程序思路分析:输出摄氏温度与华氏温度的对照表,输出条目为10条,要求每个条目相隔20度。可以考虑设置循环变量为10,每进入一次循环就输出对照表的一个条目。程序执行完毕,虽然温度只显示到180度,但是由于对照表中条目已经满10条,可以结束循环。

程序代码如下:

package condition;
public class LoopSample3 {
     public static void main(String[] args) {
        // TODO Auto-generated method stub
        int count = 0;
        int c = 0;
        double f;
        while (c <= 250 && count < 10) {
            count++;
            System.out.printf("%d:  ", count);
            f = c * 9 / 5.0 + 32.0;
            System.out.printf("c = %d, F = %7.2f\n", c, f);
            c = c + 20;
        }
    }
}

编程示例4

任务要求:编写一个程序,用于从控制台接收字符串输入,并将结果输出到屏幕上,当用户输入“quit”时,程序结束。

程序思路分析:设置一无限循环语句,并在程序中声明一字符串变量str,在循环条件语句中判断str的值,当str的值等于quit时,退出循环。str的值可以被用户修改,每次循环都获取用户输入,并赋值给str,当用户输入quit字符串时,循环条件变为假,程序退出循环。

程序代码如下:

package condition;
import java.util.Scanner;
 
public class LoopSample4 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str = "";
        Scanner sc = new Scanner(System.in);
        while (!str.equals("quit")) {
            str = sc.next();
        }
    }
}

第三小节  do—while循环语句

do-while循环与while循环的不同在于:它先执行循环体中的语句,然后再判断条件是否为真。如果为真则继续循环,如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。同样当有许多语句参加循环时,要用“{”和“}”把它们括起来。

do-while循环的一般语法是:

do{

  语句;

}while(条件)

注意:在do-while语句的表达式后面必须加分号。

编程示例5

任务要求:编写一个猜数游戏,要求猜一个介于1—10之间的数字,根据用户猜测的数与标准值进行对比,并给出提示,以便下次猜测能接近标准值,直到猜中为止。

程序思路分析:程序内部设置一个标准值(答案)存储到变量number中,并声明一个guess变量接收用户猜测的数值。采用do-while结构可以确保用户至少能进行一次猜数操作,在循环体内,提示用户输入要猜的数,用户输入猜测的数值后,利用if-else语句和正确答案进行判断,如果用户猜测的数值大于答案,提示用户数太大;如果用户猜测的数值小于答案,提示用户数太小。while语句后面的表达式( guess != number )用于判断循环条件是否满足,如果用户输入的数值和答案不相等,该表达式返回的结果为真,继续执行循环体,要求用户根据提示继续猜数,否则,表达式返回的结果为假,循环条件不满足,程序不再执行循环体,直接执行循环体后面的语句。

程序代码如下:

import java.util.Scanner;
public class GuessSample {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // 初始化猜数的标准数值
        int number = 5;
        int guess;
        Scanner sc = new Scanner(System.in);
        System.out.println("猜一个介于 1 与 10 之间的数");
        do {
            System.out.println("请输入您猜测的数");
            guess = sc.nextInt();
            if (guess > number)
                System.out.println("太大");
            else if (guess < number)
                System.out.println("太小");
 
        } while (guess != number);
        System.out.printf("您猜中了:答案为 %d\n", number);
 
    }
 
}

第四小节  while嵌套循环

就像if语句可以嵌套一样,一个循环也可以嵌套在另一个循环中,一个循环中含有另一个循环就称为嵌套循环。

嵌套循环的工作原理如下:首先外循环的第一轮触发内循环,然后内循环将一直执行到完成为止,然后,外循环的第二轮再次触发内循环,此过程不断重复直到外循环结束,使用嵌套循环时,只有在内循环完全结束后,外循环才会执行下一趟循环,

编程示例6

任务要求:用*输出一个直角三角形图案。

程序思路分析:程序用外层循环控制输出*的行数,循环条件为nstars <= 10,nstars初始化为1,该条件允许输出10行*;内层循环控制*输出的数量,循环条件为stars <= nstars,内层循环开始前,stars都被赋值为1,然后在内层循环体内做自增操作。

程序代码如下:

package condition;
public class AngleSample {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int nstars = 1, stars;
        // 外层循环控制输出*的行数
        while (nstars <= 10) {
            stars = 1;
            // 内层循环控制打印星号的数量
            while (stars <= nstars) {
                System.out.printf("*");
                stars++;
            }
            System.out.printf("\n");
            nstars++;
        }
    }
}

编程示例7

任务要求:输入字符序列,统计输入的字符数。

程序思路分析:程序首先提示用户输入字符序列,进入内层do-while循环,接收用户输入的字符序列,直到用户按下回车键并输入字符q,程序将退出内层的do-while循环。程序接着询问用户是否要输入更多的字符序列,如果用户输入y或Y,do-while外循环的条件为真,则程序将提示用户输入另一序列字符。直到用户按下除y或Y以外的任何键时,外循环才结束。

另外,Scanner类没有提供输入单个字符的方法,程序采用Scanner类的next()方法获取用户输入的字符串,再通过String类的charAt方法获取字符串的第一个字符。

程序代码如下:

import java.util.Scanner;
 
public class CountSample {
    public static void main(String[] args) {
        int x;
        char i, ans;
        ans = 'y';
        Scanner sc = new Scanner(System.in);
        do {
            x = 0;
            System.out.println("请输入字符序列:");
            do {
                String s = sc.next();
                i = s.charAt(0);
                x++;
            } while (i != 'q');
            System.out.printf("\n输入的字符数为:%d", --x);
            System.out.println("\n是否需要输入更多字符序列(Y/N)?");
            String s1 = sc.next();
            ans = s1.charAt(0);
        } while (ans == 'y' || ans == 'Y');
    }
}


■ 文章小结

1、循环结构是程序中一种很重要的结构,其特点是,在给定条件成立时,重复执行某程序段,直到条件不成立为止。给定的条件为循环条件,反复执行的程序段称为循环体,循环条件必须要在循环体中改变,否则可能会出现无限循环的结果。

2、do-while语句是一种先执行循环体,然后判断条件的结构,即只有在循环体中的代码执行之后,才会判断循环条件。总的来说,循环结构在开始执行的时候,先执行循环体内的代码,然后通过while里面的条件进行判断,条件成立就继续执行循环,不成立就跳出循环,循环体内代码至少被执行一次。

3、while循环和do-while循环也可以互相嵌套。例如,可以将编程示例6的内层while循环修改为do-while循环,或者将外层循环修改为do-while循环。

■ 思考与练习

1、编写一个程序,计算1到100之间的整数和。

2、小明将10000元钱存入银行,银行的年利率为10%,如一直不取出,问按照复利的计算方法,至少经过多少年小明才能拿到150000元。

提示:

第一年本金带利息的计算公式为:S 1=10000 * (1+0.1)

第二年本金带利息的计算公式为:S 2= S 1 * (1+0.1)

第三年本金带利息的计算公式为:S 3= S 2 * (1+0.1)

………

第n年本金带利息的计算公式为:S n= S(n-1) * (1+0.1)

根据上述公式可知,应用do-while结构可以求出n年后的应收本金和利息,循环条件为n年后的应收本金和利息小于150000元,当n年后的应收本金和利息大于150000时,该n就是应求的年数。

3、编写一个程序,最多接收10个数,求这些数的和,用户可通过输入999来终止程序,并显示输入的数的和。


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论