Java条件判断与循环


类的方法及控制流程

类的方法是对一类对象的共同行为的抽象,对一种行为的描述往往需要比较复杂的流程控制,例如判断和选择,以及对同一代码段的多次重复执行。

与其他编程语言相同,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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

他是只猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值