如果while循环一开始条件表达式就是假的,那么循环体就根本不被执行。然而,有时需要在开始时条件表达式即使是假的情况下,while循环至少也要执行一次。
换句话说,有时你需要在一次循环结束后再测试中止表达式,而不是在循环开始时。幸运的是,Java就提供了这样的循环:do-while循环。do-while循环总是执行它的循环体至少一次,因为它的条件表达式在循环的结尾。它的通用格式如下:

do {
// body of loop
} while (condition);

do-while循环总是先执行循环体,然后再计算条件表达式。如果表达式为真,则循环继续。否则,循环结束。对所有的Java循环都一样,条件condition必须是一个布尔表达式。
下面是一个重写的“tick”程序,用来演示do-while循环。它的输出与先前程序的输出相同。

// Demonstrate the do-while loop.
class DoWhile { public static void main(String args[]) { int n = 10; do { System.out.println("tick " + n); n--; } while(n > 0);
}
}

该程序中的循环虽然在技术上是正确的,但可以像如下这样编写更为高效:

do { System.out.println("tick " + n);
} while(--n > 0);

在本例中,表达式“-- n > 0 ”将n值的递减与测试n是否为0组合在一个表达式中。它的执行过程是这样的。首先,执行-- n 语句,将变量n递减,然后返回n的新值。这个值再与0比较,如果比0大,则循环继续。否则结束。
do-while循环在你编制菜单选择时尤为有用,因为通常都想让菜单循环体至少执行一次。下面的程序是一个实现Java选择和重复语句的很简单的帮助系统:

// Using a do-while to process a menu selection
class Menu {
public static void main(String args[])
throws java.io.IOException {
char choice;
do {
System.out.println("Help on:");
System.out.println(" 1. if");
System.out.println(" 2. switch");
System.out.println(" 3. while");
System.out.println(" 4. do-while");
System.out.println(" 5. for\n");
System.out.println("Choose one:");
choice = (char) System.in.read();
} while( choice < '1' || choice > '5');
System.out.println("\n");
switch(choice) {
case '1':
System.out.println("The if:\n");
System.out.println("if(condition) statement;");
System.out.println("else statement;");
break;
case '2':
System.out.println("The switch:\n");
System.out.println("switch(expression) {");
System.out.println(" case constant:");
System.out.println(" statement sequence");
System.out.println(" break;");
System.out.println(" // ...");
System.out.println("}");
break;
case '3':
System.out.println("The while:\n");
System.out.println("while(condition) statement;");
break;
case '4':
System.out.println("The do-while:\n");
System.out.println("do {");
System.out.println(" statement;");
System.out.println("} while (condition);");
break;
case '5':
System.out.println("The for:\n");
System.out.print("for(init; condition; iteration)");
System.out.println(" statement;");
break;
}
}
}

下面是这个程序执行的一个样本输出:

Help on:
1. if
2. switch
3. while
4. do-while
5. for
Choose one:
4
The do-while:
do {
statement;
} while (condition);

在程序中,do-while循环用来验证用户是否输入了有效的选择。如果没有,则要求用户重新输入。因为菜单至少要显示一次,do-while循环是完成此任务的合适语句。
关于此例的其他几点:注意从键盘输入字符通过调用System.in.read( )来读入。这是一个Java 的控制台输入函数。它从标准的输入读取字符(返回整数,因此将返回值choice定义为字符型)。默认地,标准输入是按行进入缓冲区的,因此在你输入的任何字符被送到你的程序以前,必须按回车键。
Java的终端输入功能相当有限且不好使用。进一步说,大多数现实的Java程序和applets(小应用程序)都具有图形界面并且是基于窗口的。因此,这本书使用终端的输入并不多。
然而,它在本例中是有用的。另外一点:因为使用System.in.read ( ),程序必须指定throws java.io.IOException子句。这行代码对于处理输入错误是必要的。

Java基础篇:循环语句之do-while循环相关推荐

  1. Java基础篇:如何使用 break 退出循环

    在Java中,break语句有3种作用.第一,你已经看到,在switch语句中,它被用来终止 一个语句序列.第二,它能被用来退出一个循环.第三,它能作为一种"先进"的goto 语句 ...

  2. Java基础篇3——流程控制

    Java基础篇3--流程控制 1.顺序结构 正常代码的流程即是顺序流程 2.分支结构 2.1.if-else分支 if(条件表达式) {语句块1; } if(条件表达式) {语句块1; } else ...

  3. 菜鸟学习笔记:Java基础篇2(变量、运算符、流程控制语句、方法)

    菜鸟学习笔记:Java基础篇2 变量 基本概念 变量作用域 final关键字 运算符 算术运算符 比较运算符 逻辑运算符 位运算符 赋值运算符 条件运算符 运算符优先级 Java三种流程控制语句 顺序 ...

  4. java基础篇---第一天

    今日开始在心中正式开始在培训班开始培训.一下是在培训的过程中发现自己在自学过的过程中发现的问题.这篇是java基础篇. 第一天 : 1)配置java环境变量 1.在系统变量中新建JAVA_HOME:j ...

  5. 《Java 后端面试经》Java 基础篇

    <Java 后端面试经>专栏文章索引: <Java 后端面试经>Java 基础篇 <Java 后端面试经>Java EE 篇 <Java 后端面试经>数 ...

  6. Java基础篇 学习笔记

    List item Java基础篇 学习笔记 java基础篇 第1章 计算机.程序和java概述 学习笔记 1.1什么是计算机 简单来说:计算机就是 ' 存储 ' 和 ' 处理 ' 数据的电子设备. ...

  7. Java基础篇--Java 数组

    Java基础篇--Java 数组 Java 数组 声明数组变量 创建数组 处理数组 For-Each 循环 数组作为函数的参数 数组作为函数的返回值 多维数组 多维数组的动态初始化(以二维数组为例) ...

  8. 你所需要的java基础篇深入解析大汇总

    java基础篇深入解析大总结 java基础(一) 深入解析基本类型 java基础(二) 自增自减与贪心规则 java基础(三) 加强型for循环与Iterator java基础(四) java运算顺序 ...

  9. 你所需要的java基础篇和提升篇大总结

    好好学java 致力于java知识分享 关注 精彩内容 你所需要的java全套视频教程 你所需要的java电子图书 你所需要的大数据视频教程 你所需要的java练习项目 如 / 诗 近半个月,每天一篇 ...

  10. Java基础篇1——变量与数据类型

    Java基础篇1--变量与数据类型 1.标识符命名规则 标识符以由大小写字母.数字.下划线(_)和美元符号($)组成,但是不能以数字开头. 大小写敏感 不能与Java语言的关键字重名 不能和Java类 ...

最新文章

  1. iview构建基本html页面,使用vue-cli创造基于vue.js的iview工程
  2. 计算机开始按钮作用,Win8.1的12个变化:开始按钮回归功能不再
  3. Android将允许纯C/C++开发应用
  4. 鸟哥的Linux私房菜(基础篇)- 第二十四章、 X Window 配置介绍
  5. python scapy sniff timeout_为什么我尝试使用scapy.sniff()函数获取此奇怪的输出,以尝试监听打开的网站的流量?...
  6. 戴尔电脑开机黑屏怎么办_笔记本电脑开机黑屏怎么办
  7. libcurl Get json 数据 接收全部的数据
  8. 读取pdf文件信息(pdfinfo)
  9. 了解IHttpModule接口事件执行顺便 获取Session
  10. 微信小程序的本地存储
  11. 台大Machine Learning 2017Fall HW0字数统计和图片淡化 解答
  12. spss进行多元线性回归并分析表格
  13. 深度学习环境搭建之三_离线安装无线网卡、DKMS
  14. Re-ranking Person Re-identification with k-reciprocal Encoding
  15. markdown语法中的空格_MarkDown语法
  16. 思科三层交换机开启ipv6路由功能_网络工程实战之三层交换机配置IPv6 DNS 示例...
  17. 计算机助理职称考试成绩查询,初级成绩可以查询了!
  18. split()函数的使用方法
  19. 程序设计、数据结构、编译相关图灵奖得主简介之二
  20. 前端-超链接,相对路径

热门文章

  1. SQL-用JOIN连接多个表
  2. Java异常处理 误区
  3. CCNA2.0笔记_TCP/IP概述
  4. POI导入数据的过程中,遇到读取以科学计数法显示的数据
  5. AngularJS Slider指令(directive)扩展
  6. 开发WinRT自定义组件之富文本框
  7. [biztalk笔记]-1.Hello World!
  8. cafffe---之params参数
  9. 【树莓派搭建个人网站】WordPress安装
  10. Eigen库数据结构内存对齐问题