Java基础复习:流程控制部分

流程控制

scanner

public static void main(String[] args) {
    
//    先要new一个Scanner
    Scanner scanner = new Scanner(System.in);
    
//    while true无限循环
    while (true) {
        System.out.println("奇偶数判断器!");
        System.out.println("请输入要判断的数字:");
        
        //回车时,如果有输入
        if (scanner.hasNextLine()) {
            int i = scanner.nextInt();
            System.out.println(i % 2 == 0 ? "这是偶数!" : "这是奇数!");
            
            //程序休眠一秒
            try {
                Thread.currentThread().sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

Scanner是Java提供的一个工具类,可以扫描用户的行为,如在控制台键入的字符等。

上述代码是一个奇偶数判断器,扫描用户输入的数字并判断奇偶,给出结果后等待半秒,进入下一轮循环。

为了好玩才无限循环!正常使用后请加个scanner.close()来关闭扫描器。

注意代码中的hasNextLine()方法,如果使用hasNext()方法,效果接近,但会将空格视为结束符。

修改一下代码:

//    先要new一个Scanner
    Scanner scanner = new Scanner(System.in);
​
//    while true无限循环
    while (true) {
        System.out.println("奇偶数判断器!");
        System.out.println("请输入要判断的数字:");
​
        //回车时,如果输入的是整数
        if (scanner.hasNextInt()) {
            int  i = scanner.nextInt();
            System.out.println(i % 2 == 0 ? "这是偶数!" : "这是奇数!");
        }else {
            //这里不接收东西他就默认一直循环
            String str = scanner.next();
            System.out.println("请输入整数!");
        }
        System.out.println("");
    }
}

这段代码使用了hasNextInt()进行判断,并且在用户输入的不是整数时可以返回提示。

下面实现一个稍复杂些的功能:

  • 输入多个数字,求其总和与平均数

  • 每输入一个数字,用回车确认

  • 可以输入小数

  • 输入非数字内容时,返回计算结果

代码如下:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
​
    //定义总和sum及输入的数字数n
    double sum = 0;
    int n = 0;
​
    System.out.println("数字平均值计算器!");
    System.out.println("请输入第一个数字,或输入非数字结束计算:");
    while(scanner.hasNextDouble()){
        double num = scanner.nextDouble();
        n++;
        sum += num;
        System.out.println("请输入下一个数字,或输入非数字结束计算:");
    }
​
    System.out.println("共输入了"+n+"个数字!");
    System.out.println("他们的和为:"+sum);
    System.out.println("他们的平均数为:"+sum/n);
​
    scanner.close();
}

测试并体会此代码的含义。

if选择结构

Java程序通常都是顺序结构,就是从上到下按顺序执行,但也有其他的结构,如if选择结构。

if的单选择、双选择和多选择结构语法如下:

//    if单选择结构:
//    if(布尔值){
//        布尔值为真时执行的语句
//    }
//    
//    if双选择结构:
//    if(布尔值){
//        布尔值为真时执行的语句
//    }else{
//        布尔值为假时执行的语句
//    }
//    
//    if多选择结构:
//    if(布尔值1){
//        布尔值1为真时执行的语句
//    }else if(布尔值2){
//        布尔值2为真时执行的语句
//    }else if(布尔值3){
//        布尔值3为真时执行的语句
//    }else{
//        以上布尔值均为假时执行的语句
//    }

此外if内还可以嵌套if语句。

if多选择结构的例子:

Scanner scanner = new Scanner(System.in);
System.out.println("请输入学生成绩:");
if(scanner.hasNextInt()){
    int i = scanner.nextInt();
    if(i>100||i<0){
        System.out.println("成绩不合法");
    }else if(i==100){
        System.out.println("满分!");
    }else if(i>=80){
        System.out.println("优秀!");
    }else if(i>=60){
        System.out.println("及格!");
    }else {
        System.out.println("不及格!");
    }
}
scanner.close();

例如,当输入的成绩为90时,(i>100||i<0)和(i==100)均为假,

而(i>=80)为真,则输出“优秀!”,并不再进行后面的else判断。

多选择结构除了使用if语句,还可以使用switch语句。

switch多选择结构

以一个福音书简称全称转换器为例说明switch结构:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
​
    System.out.println("请输入福音书的简称:");
    if(scanner.hasNextLine()){
        String str = scanner.nextLine();
        System.out.print("此福音书全称为:");
        switch (str){
            case "太":
                System.out.println("马太福音");
                break;
            case "可":
                System.out.println("马可福音");
                break;
            case "路":
                System.out.println("路加福音");
                break;
            case "约":
                System.out.println("约翰福音");
                break;
            default:
                System.out.println("请输入正确的福音书简称");
        }
    }
​
    scanner.close();
}

代码对比switch后面的括号里的值,即str,与各项case的值是否相同,

如果相同,则执行此case下的代码。

default和break不是必须写的,但不写break的时候,会执行对应的case后面每个case里的代码(case穿透)。

while循环结构

循环结构包括while、do while和for循环,

while就是后面括号里的布尔值为true,就会一直执行:

//输出1到100
int i = 1;
while (i<=100){
    System.out.print(i==100?i:i+",");
    i++;
}

这是在控制台打出1到100的代码,当i大于100时,布尔值(i<=100)为假,循环结束。

//输出1加到100
int j = 1;
int sum = 0;
while (j<=100){
    sum += j;
    j++;
}
System.out.println(sum);

这是计算1加到100的代码,思想类似。

do while循环结构

do while与while类似,不同点在于do while会至少执行一次,而while是不满足条件直接不进循环。

//输出1加到100
int k = 0;
int sum2 = 0;
do{
    sum2 += k;
    k++;
}while (k>0 && k<=100);
System.out.println(sum2);

同样是计算1加到100,条件里要求k>0,而一开始k=0,不满足条件,

但由于至少执行一次,执行完后k++了,就满足条件,可以继续循环了。

for循环结构

for循环比前面两个用得多!一般是这样的:

for (int i = 0;i < 3;i++){
    //这里面的内容会被循环执行3次
}

用两个分号将括号里的内容分成三部分,第一部分定义一个临时变量,第二部分是进入循环的条件,

第三部分是每次循环后会执行的代码。也就是说,第一部分只会在最开始执行一次。

需要注意,这三个部分都是可以缺省的,例如for( ; ; ),是死循环的写法。

(快捷键:输入100.for试试!)

练习1,计算0到100之间奇数和与偶数和:

    int sumOdd = 0;
    int sumEven = 0;
    for (int i = 0;i <= 100;i++){
        if(i%2==0){
            sumEven += i;
        }else {
            sumOdd += i;
        }
    }
    System.out.println("0-100所有奇数和为"+sumOdd);
    System.out.println("0-100所有偶数和为"+sumEven);

练习2,输出0到1000之间所有能被5整除的数,且每行输出三个:

int j = 0;
for (int i = 0; i <= 1000; i++) {
    if(j!=2){
        if (i%5==0){
            System.out.print(i+"\t");
            j++;
        }
    }else {
        if (i%5==0){
            System.out.println(i);
            j = 0;
        }
    }
}

练习3,输出九九乘法表:

    for (int row = 1; row <= 9; row++) {
        for (int col = 1; col <= row; col++) {
            System.out.print(row+"*"+col+"="+(row*col)+"\t");
        }
        System.out.println();
    }

应该练习到理解for循环语句,看到这种题能够随手做出来,而非背代码。

毕竟for循环是十分常用的。

增强for循环

增强for循环通常用于遍历数组或集合:

int[] arr = {10,20,30,40,50};
for (int i:arr){
    System.out.println(i);
}

如此代码,就是将数组arr中的值依次赋给 i ,循环的次数等于arr的长度5。代码依次输出10到50。

break、continue

我们之前用break跳出switch结构,他还可以被用来跳出循环。

应当明确区分break与continue的意义:

  • break:在循环体中运行到break,跳出整个循环

  • continue:在循环体中运行到continue,跳过本次循环

举例而说明之:

for (int i = 0;i < 10;i++){
    if(i==3){
        continue;
    }
    System.out.print(i+"\t");
}

以上代码打出0到9的整数,并且跳过3,输出为:

0 1 2 4 5 6 7 8 9

试将continue改为break:

for (int i = 0;i < 10;i++){
    if(i==3){
        break;
    }
    System.out.print(i+"\t");
}

以上代码输出到3就执行了break语句,跳出了整个循环,后面 i>3 的部分就不再执行了。输出为:

0 1 2

以上以for循环语句举例,下面看看while循环语句,其实也差不多:

int i = 0;
while (i < 10){
    i++;
    if(i==3){
        continue;
    }
    System.out.print(i+"\t");
}

此代码输出为:1 2 4 5 6 7 8 9 10。如果改成break就剩1、2了,

试想将代码中的 i++ 放到循环体的最后,那么在 i = 3 的时候,就会触发continue,重新开始循环,

结果跑不到 i++ 那里又再次continue了,无限虚空死循环。所以要注意 i++ 要写在前面。

练习题

打印三角形:

for (int row = 0; row < 5; row++) {
    for (int col = 5; col > row; col--) {
        System.out.print(" ");
    }
    for (int col = 0; col < row; col++) {
        System.out.print("*");
    }
    for (int col = 0; col < row+1; col++) {
        System.out.print("*");
    }
    System.out.println();
}

输出结果:

     *
    ***
   *****
  *******
 *********

很显然这是一段空格、两段星号拼出来的。

自己尝试用绝对值打印,实心菱形、空心菱形:

//实心菱形
for (int row = -4; row <= 4; row++) {
    for (int col = -4; col <= 4; col++) {
        if((Math.abs(row+col)<=4)&&(Math.abs(row-col)<=4)){
            System.out.print("*");
        }else {
            System.out.print(" ");
        }
    }
    System.out.println();
}
​
//空心菱形
for (int row = -4; row <= 4; row++) {
    for (int col = -4; col <= 4; col++) {
        if((Math.abs(row+col)>3)||(Math.abs(row-col)>3)){
            System.out.print("*");
        }else {
            System.out.print(" ");
        }
    }
    System.out.println();
}

输出结果:

    *    
   ***   
  *****  
 ******* 
*********
 ******* 
  *****  
   ***   
    *    
*********
**** ****
***   ***
**     **
*       *
**     **
***   ***
**** ****
*********

练习、熟练一下本章内容,然后进入下一章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值