类的方法及控制流程
类的方法是对一类对象的共同行为的抽象,对一种行为的描述往往需要比较复杂的流程控制,例如判断和选择,以及对同一代码段的多次重复执行。
与其他编程语言相同,Java中的流程控制结构主要有顺序结构、选择结构及循环结构三种。
顺序结构是按照从上到下的顺序执行语句,没有转移及重复。
选择结构是根据给定的条件成立与否,执行不同的语句或语句组。Java的选择结构主要有if选择结构及switch选择结构两种。
循环结构是在一定的条件下,反复执行某段代码程序的流程结构,被反复执行的程序称为循环体。
Java提供的循环语句有三种;
- for语句
- while语句
- do-while语句
此外还有与程序有关的跳转语句,主要用于循环中,用于实现循环执行流程中的流程转移。
if选择结构
if(boolean-expression){
//statement1;
}
if(boolean-expression){
//statement1;
}
else{
//statement2;
}
if(boolean-expression1){
//statement1;
}
else if(boolean-expression2){
//statement2;
}
...
else{
//statementn;
}
注意,else子句benign单独作为语句使用,它必须和if配对使用。else总是与离它最近的if匹配,可以通过使用大括号{}来改变匹配关系。
示例:
public class daysInMonth {
public static void main(String args[]){
int month=3;
if(month==2) {
System.out.println(28);
}
else if((month==4)||(month==6)||(month==9)||(month==11)) {
System.out.println(30);
}
else {
System.out.println(31);
}
}
}
switch选择结构
switch语句是多分支的选择结构,它的一般格式如下;
switch (switch-expression){
case value1: statements for case1;break;
case value2: statements for case2;break;
...
case valueN: statements for caseN;break;
default: statements for default case;break;
}
switch语句中表达式的值(switch- expression)必须是整型或字符型;常量value1到常量valueN也必须是整型或字符型。
switch语句首先计算表达式的值,如果表达式的值和某个case后面的值相同,则该从该case之后开始执行,直到break语句为止。
若没有一个常量与表达式的值相同,则从default之后开始执行。default是可有可无的,如果它不存在,并且所有的常量都和表达式的值不相同,那么switch语句就不会进行任何处理。
public class daysInMonth {
public static void main(String args[]){
int month=2;
int days;
switch(month){
case 2:days=28;break;
case 4:
case 6:
case 9:
case 11:days=30;break;
default:days=31;
}
System.out.println(days);
}
}
示例代码:
已知一个学生的分数(带有小数点),给出其分数等级。
90-100 A级、80-89 B级、70-79 C级、60-69 D级、0-59E级
import static java.lang.StrictMath.floor;
//floor方法返回不大于其参数的最大整数,但其返回类型仍为实型
enum Grade{
A,
B,
C,
D,
E;
}
public class Score {
public static Grade gradeLevel(double g){
int n=(int)floor(g/10);
switch (n){
case 10:
case 9:return Grade.A;
case 8:return Grade.B;
case 7:return Grade.C;
case 6:return Grade.D;
default:return Grade.E;
}
}
public static void main(String[] args){
System.out.println("gradeLevel(100)="+gradeLevel(100));
System.out.println("gradeLevel(87)="+gradeLevel(87));
System.out.println("gradeLevel(45.5)="+gradeLevel(45.5));
}
}
输出结果:
gradeLevel(100)=A
gradeLevel(87)=B
gradeLevel(45.5)=E
for循环结构
for循环结构是Java语言三个循环语句中功能较强,使用较广泛的一个,它的语法格式如下;
for(start-expression;check-expression;update-expression){
//body of the loop;
}
start- expression 完成循环变量和其他变量的初始化工作;check- expression是返回布尔值的条件表达式,用于判断循环是否继续;update- expression用来修整循环变量,改变循环条件。
语句for循环的执行过程是这样的:首先根据初始表达式start- expression完成必要的初始化工作;再判断表达式check- expression的值,若为真,则执行循环体,执行完循环体后,再返回表达式update-expression,计算并修正循环条件,这样一轮循环就结束了。
代码示例;
打印九九乘法表。
public class MultiTable {
public static void main(String[] args){
for (int i=1;i<=9;i++){
for (int j=1;j<=i;j++)
System.out.println(" "+i+"*"+j+"="+i*j);
System.out.println();
}
}
}
for 循环增强功能,增强for循环可以用来对数组或者集合对象进行遍历,其语法格式如下;
for(Type name:Array/Set){
//body of the loop;
}
代码示例;
使用增强for循环打印一周的星期名。
public class PrintDay {
public static void main(String[] args){
String days[] = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
for (String day:days)
System.out.println(day+" ");
System.out.println();
}
}
输出:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
while语句
while语句实现“当型”循环,其一般语法格式如下;
while (check-expression){
//body of the loop;
}
while语句的执行过程是先判断条件表达式(check-expression)的值,若为真,则执行循环体,循环体之行完后再无条件转向条件表达式做计算与判断;当计算出的条件表达式的值为假时,跳过循环体之行while语句后面的语句。为真,则继续执行循环。
public class CalProfit {
public static void main(String [] args){
double original,money,interest;
int years=0;
original=money=10000;
interest=11.25/100;
System.out.println("year\tmoney");
while(money<2*original){
years=years+1;
money=money+(interest*money);
System.out.printf("%d\t%.2f\n",years,money);
}
System.out.println();
System.out.printf("第%d年存款余额达到%.2f\n",years,money);
}
}
year money
1 11125.00
2 12376.56
3 13768.93
4 15317.93
5 17041.20
6 18958.33
7 21091.14
do-while语句
do-while语句实现“直到型”循环,它的一般语法结构如下;
do{
//body of the loop;
}while(check-expression);
do-while语句的使用与while语句类似,不同的是它不像while语句是先计算条件表达式的值,而是无条件地执行一遍循环体,再来判断条件表达式的值。若表达式的值为真,则再运行循环体;否则跳出do- while循环,执行下面的语句。可以看出,do- while语句的特点是它的循环体将至少要执行一次。
break语句
break语句可用于三种情况:
- 在switch结构中,break语句用来终止switch语句的执行;
- 在for循环及while循环结构中,用于终止break语句所在的内层循环。
简单示例;
public class BreakTest {
public static void main(String args[]){
String output="";
int i;
for (i=1;i<=10;i++){
if(i==5){
break;
}
output+=i+" ";
}
output+="\nBroke out of loop at i ="+i;
System.out.println(output);
}
}
输出:
1 2 3 4
Broke out of loop at i =5
当执行break语句时,程序流程跳出for循环。
public class MultiTable {
public static void main(String[] args){
for (int i=1;i<=9;i++) {
for (int j = 1; j <= i; j++) {
if(j>i){
break;
}
System.out.printf(" %d*%d=%d",i,j,i*j);
}
System.out.println();
}
}
}
输出:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
break语句还可以与标号一同使用,当与标号一同使用时,执行break语句将跳出标号所标识的循环。
public class BreakLabel {
public static void main(String[] args){
outer:
for (int i=1;i<=9;i++){
for (int j=1;j<=9;j++){
if(j>i){
break;
}
if(i==6){
break outer;
}
System.out.print(" "+i+"*"+j+"="+i*j);
}
System.out.println();
}
}
}
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
continue语句
continue语句必须用于循环结构中,continue语句并没有跳出循环体,而是跳过本次循环,进入下一轮循环。
public class ContinueTest {
public static void main(String args[]){
String output="";
int i;
for (i=1;i<=10;i++){
if (i==5){
continue;
}
output+=i+" ";
}
output+="\nusing continue to skip printing 5";
output+="\ni="+i;
System.out.println(output);
}
}
1 2 3 4 6 7 8 9 10
using continue to skip printing 5
i=11
下面,我们使用continue来打印九九乘法表;
public class ContinueLabel {
public static void main(String args[]){
outer:
for(int i=1;i<10;i++){
inner:
for(int j=1;j<10;j++){
if(i<j){
System.out.println();
continue outer;
}
System.out.print(" "+i+"*"+j+"="+i*j);
}
}
}
}
输出:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81