本章内容主要为Java程序控制,包括:循环控制、判断控制和跳转控制。
循环控制:
循环从字面理解就是重复做某一件事,在程序中当某一条件成立时,程序重复执行一条或多条语句,直到循环条件不成立时结束。循环语句也称为迭代语句,在使用过程中需要小心,死循环不是我们期待的效果。
while循环:
while循环是一种最基本的循环语句,循环条件只接受布尔值(也就是真或假),当条件为真时程序反复执行循环体中的代码,每次循环验证一次条件,当条件为假时退出循环,执行循环题后面的语句。
- while(true)
- {
- /*
- * 循环体内的代码
- */
- }
例:while循环(4.1)
- package net.miqiang;
- /**
- * 例:while循环
- * 一个简单的循环,条件是 i < 5,每循环一次,i 的值增加 1 ,在控制台显示出每次循环 i 的值。
- * 一个稍微复杂点的循环,循环条件是 i < j ,每循环一次 i 的值增加 1 ,j 的值减少 1 ,在控制台显示出每次循环 i 和 j 的值。
- *
- * @author 米强
- * @version 1.0
- */
- public class TestMain {
- /**
- * 构造方法
- *
- */
- public TestMain() {
- /*
- * 一个简单的循环,条件是 i < 5,每循环一次,i 的值增加 1 ,在控制台显示出每次循环 i 的值。
- */
- int i = 0;
- while (i < 5) {
- i++;
- System.out.println("number: " + i);
- }
- /*
- * 一个稍微复杂点的循环,循环条件是 i < j ,每循环一次 i 的值增加 1 ,j 的值减少 1 ,在控制台显示出每次循环 i 和 j
- * 的值。
- */
- i = 0;
- int j = 20;
- while(i < j){
- i++;
- j--;
- System.out.println("i = " + i + ";/tj = " + j);
- }
- }
- /**
- * 程序入口
- *
- * @param args
- * 字符串数组参数
- */
- public static void main(String[] args) {
- new TestMain();
- }
- }
do-while循环:
刚才我们讲到的while循环,从流程上来说是先判断条件,当条件成立再执行语句。而do-while循环则是先执行语句,再判断条件,可想而知,无论条件是否成立,循环体内的语句都将至少执行一次。
- do{
- /*
- * 循环体内的语句至少会执行一次
- */
- }while(true)
例:do-while循环(4.2)
- package net.miqiang;
- /**
- * 例:do-while循环
- * 使用do-while实现一个简单的循环,条件是 i < 5,每循环一次,i 的值增加 1 ,在控制台显示出每次循环 i 的值。
- * 使用do-while实现一个稍微复杂点的循环,循环条件是 i < j ,每循环一次 i 的值增加 1 ,j 的值减少 1 ,在控制台显示出每次循环 i 和 j 的值。
- *
- * @author 米强
- * @version 1.0
- */
- public class TestMain {
- /**
- * 构造方法
- *
- */
- public TestMain() {
- /*
- * 使用do-while实现一个简单的循环,条件是 i < 5,每循环一次,i 的值增加 1 ,在控制台显示出每次循环 i 的值。
- */
- int i = 0; // 如果把 i 的值改为 5 ,试试看结果如何
- do {
- i++;
- System.out.println("number: " + i);
- } while (i < 5);
- /*
- * 使用do-while实现一个稍微复杂点的循环,循环条件是 i < j ,每循环一次 i 的值增加 1 ,j 的值减少 1
- * ,在控制台显示出每次循环 i 和 j 的值。
- */
- i = 0;
- int j = 20;
- do {
- i++;
- j--;
- System.out.println("i = " + i + ";/tj = " + j);
- } while (i < j);
- }
- /**
- * 程序入口
- *
- * @param args
- * 字符串数组参数
- */
- public static void main(String[] args) {
- new TestMain();
- }
- }
for循环:
for循环是使用率较高的一种循环语法,基本格式如下:
- for(initialization; condition; iteration) {
- /*
- * 循环体语句
- */
- }
initialization:初始化变量,变量为int类型;
condition:控制条件,表达式值为boolean类型;
iteration:迭代部分,最常见的是对变量的++操作或--操作。
注:for循环语法中,只要括号内两个分号“;”存在就能运行,但是程序会陷入死循环。
- for( ; ; )
- {
- // 死循环
- }
for循环还可以写成这样:
- for( ; true; )
- {
- // 死循环
- }
例:for循环(4.3)
- package net.miqiang;
- /**
- * 例:for循环
- * 一个基本的 for 循环
- * 一个经过演化的 for 循环
- *
- * @author 米强
- * @version 1.0
- */
- public class TestMain {
- /**
- * 构造方法
- *
- */
- public TestMain() {
- /*
- * 一个基本的 for 循环
- */
- for(int i = 0; i < 5; i++){
- System.out.println("* number: " + i);
- }
- /*
- * 一个经过演化的 for 循环
- */
- int i = 0;
- boolean b = true;
- for( ; b; ){
- System.out.println("> number: " + i);
- if(i >= 5){
- b = false;
- }
- i++;
- }
- }
- /**
- * 程序入口
- *
- * @param args
- * 字符串数组参数
- */
- public static void main(String[] args) {
- new TestMain();
- }
- }
例:运用for循环在控制台打印“九九乘法表”(4.4)(本章源码包中)
for-each循环:
自Java5.0后,出现了for-each形式循环,格式如下:
- for ( type itr-var : collection )
- {
- // 循环体
- }
type:类型;
itr-var:迭代变量名;
collection:需要循环的集合。
例:for-each循环(4.5)
- package net.miqiang;
- import java.util.Vector;
- /**
- * 例:for-each循环
- * 使用 for-each 循环遍历数组中的每个元素。
- *
- * @author 米强
- * @version 1.0
- */
- public class TestMain {
- /**
- * 构造方法
- *
- */
- public TestMain() {
- // int 型数组
- int [] intArr = {3, 80, 195, 14, 52, 625, 217, 410, 193};
- // String 型数组
- String [] strArr = {"a", "b", "c", "d", "e"};
- // 遍历 int 型数组的每个元素
- for(int i : intArr){
- System.out.println(i);
- }
- // 遍历 String 型数组的每个元素
- for(String str : strArr){
- System.out.println(str);
- }
- // 声明一个 Vector 向量
- Vector<String> v = new Vector<String>();
- // 通过循环给 Vector 向量添加 10 个元素
- for(int i = 0; i < 10; i++){
- v.add("Vector_" + i);
- }
- // 遍历这个 Vector 向量的所有元素值
- for(Object o : v){
- System.out.println(o);
- }
- }
- /**
- * 程序入口
- *
- * @param args
- * 字符串数组参数
- */
- public static void main(String[] args) {
- new TestMain();
- }
- }
判断语句:
Java提供了两种判断语句,if语句和switch语句。
if语句:
if语句语法如下:
- if ( condition ) {
- // 语句 1
- } else {
- // 语句 2
- }
condition:代表条件表达式,值为boolean类型,当值为true时执行语句1的代码,当值为false时执行语句2中的代码。
if语句可以省略else和其后的语句块。
- if ( condition ) {
- // 语句
- }
if语句可以嵌套运算:
- if ( condition1 ) {
- if ( condition2 ) {
- // 语句块1
- } else {
- // 语句块2
- }
- }
if语句还可以支持多条件来选择执行某一操作,由一个if,若干个else if和else构成:
- if ( condition1 ) {
- // 如果条件1成立,执行这里
- } else if ( condition2 ){
- // 否则,如果条件2成立,执行这里
- } else if ( condition3 ){
- // 否则,如果条件3成立,执行这里
- } else {
- // 否则执行这里(以上条件均不成立)
- }
例:if语句(4.6)
- package net.miqiang;
- /**
- * 例:if语句
- * 演示最基本的 if 语句
- * 演示嵌套 if 语句
- * 演示多条件 if 语句
- *
- * @author 米强
- * @version 1.0
- */
- public class TestMain {
- /**
- * 构造方法
- *
- */
- public TestMain() {
- /*
- * 演示最基本的 if 语句。
- */
- int i = 10;
- int j = 5;
- if(i < j){
- i = 0;
- }else{
- j = 0;
- }
- System.out.println("i = " + i + ";/tj = " + j);
- /*
- * 演示嵌套 if 语句
- */
- if(j == 0){
- if(i == 0){
- i++;
- }else{
- j++;
- }
- }
- System.out.println("i = " + i + ";/tj = " + j);
- /*
- * 演示多条件 if 语句
- */
- if(i < 3){
- System.out.println("i < 3");
- }else if(i < 6){
- System.out.println("i < 6 AND i >= 3");
- }else if(i < 9){
- System.out.println("i < 9 AND i >= 6");
- }else{
- System.out.println("i >= 9");
- }
- }
- /**
- * 程序入口
- *
- * @param args
- * 字符串数组参数
- */
- public static void main(String[] args) {
- new TestMain();
- }
- }
switch语句:
switch语句是多分支选择语句,格式如下:
- switch ( expression ) {
- case value1:
- // 语句1
- break;
- ……
- case valueN:
- // 语句N
- break;
- default:
- // 语句default
- }
switch语句后面括号中的表达式值一定为一个整型或字符型变量,value1~valueN也必须对应为整型或字符型。switch语句执行时使用expression值从value1开始对比,遇到相同值则执行case value后面的语句,碰到break语句停止。如果测试完所有value值都不相等,则执行default后面的语句。
例:某校考试,需要对所有学生成绩进行分组,0~59分为“差组”,60~79分为“良组”,80~100分为“优组”(4.7)(实例在本章源码包中)
跳转控制:
Java提供了三种跳转控制语句,break语句、continue语句和return语句。
break语句:
break语句为跳出语句,除了和switch语句结合使用外,还可以用来跳出循环。
例:break语句(4.8)
- package net.miqiang;
- /**
- * 例:break语句
- * 示范 break 语句强制跳出循环
- *
- * @author 米强
- * @version 1.0
- */
- public class TestMain {
- /**
- * 构造方法
- *
- */
- public TestMain() {
- // 记录循环次数的变量 i
- int i = 0;
- // 开始循环
- while(true){
- System.out.println("i = " + i + ";");
- i++;
- // 如果 i 的值大于 10 ,则使用 break 语句强制跳出循环体
- if(i > 10){
- break;
- }
- }
- // 将完成信息显示到控制台中
- System.out.println("循环已完成!");
- }
- /**
- * 程序入口
- *
- * @param args
- * 字符串数组参数
- */
- public static void main(String[] args) {
- new TestMain();
- }
- }
continue语句:
在循环中碰到了continue语句后,程序将不再执行continue语句之后的语句,改而重新判断循环条件。
例:continue语句(4.9)
- package net.miqiang;
- /**
- * 例:continue语句
- * 示范 continue 语句,使程序不再执行 continue 之后的语句,转而重新判断循环条件。
- *
- * @author 米强
- * @version 1.0
- */
- public class TestMain {
- /**
- * 构造方法
- *
- */
- public TestMain() {
- // 使用 for 循环显示由 0~9 行字符串
- for(int i = 0; i < 10; i++){
- // 显示 start 字符
- System.out.print("start/t");
- // 显示行号
- System.out.print("i = " + i + ";");
- // 如果行号为双数
- if(i % 2 == 0){
- // 换行
- System.out.print("/n");
- // 不再执行 continue 之后的语句,转而重新判断循环条件
- continue;
- }
- // 显示该行结束字符
- System.out.print("/tend/n");
- }
- // 将完成信息显示到控制台中
- System.out.println("循环已完成!");
- }
- /**
- * 程序入口
- *
- * @param args
- * 字符串数组参数
- */
- public static void main(String[] args) {
- new TestMain();
- }
- }
return语句:
程序中碰到了return语句,程序将不再执行return语句之后的任何语句。
例:return语句(4.10)
- package net.miqiang;
- /**
- * 例:return语句
- * 示范使用 return 语句中断程序执行流程。
- *
- * @author 米强
- * @version 1.0
- */
- public class TestMain {
- /**
- * 构造方法
- *
- */
- public TestMain() {
- // 使用 for 循环显示由 0~9 行字符串
- for(int i = 0; i < 10; i++){
- // 显示行号
- System.out.println("i = " + i + ";");
- // 如果行号大于 5
- if(i > 5){
- // 使用 return 语句中断程序执行流程
- return;
- }
- }
- // 将完成信息显示到控制台中
- System.out.println("循环已完成!");
- }
- /**
- * 程序入口
- *
- * @param args
- * 字符串数组参数
- */
- public static void main(String[] args) {
- new TestMain();
- }
- }
本章实例:
编程计算某日期是该年度的第几天,要求判断月与日是否符合日期规范,并需要考虑闰年的二月问题。(4.11)(本章源码包中)
本章源码包下载: