30天速成Java-Day04

151 阅读7分钟

30天速成Java-Day04

又一天过去了。

今天过得怎么样,梦想是不是更远了?

程序流程控制

顺序结构

程序自上到下执行,中间没有任何判断和跳转

分支结构

根据条件,选择性地执行某段代码

If

有三种结构,第一种:

if (条件表达式){
    
}
int age = 23;
if (age < 20) {
    System.out.println("你成年了!");
}

第二种:

if (条件表达式){
    执行表达式1
}else {
    执行表达式2
}
package com.javalike;

public class IfTest {
    public static void main(String[] args) {
       int age=23;
       if(age>18){
           System.out.println("你可以看动作电影了!");
       }else {
           System.out.println("你只能看动画片!");
       }
    }
}

第三种:

if (条件表达式1) {
    执行表达式1
} else if (条件表达式2) {
    执行表达式2
} else if (条件表达式3) {
    执行表达式3
} else if (条件表达式4) {
    执行表达式4
}else{
    执行表达式n
}
int score = 88;
if (score < 0 || score > 100) {
    System.out.println("您输入的数据非法,请重新输入!");
} else if (score >= 90) {
    System.out.println("成绩优秀");
} else if (score >= 60) {
    System.out.println("成绩良好");
} else {
    System.out.println("你家里有家业继承吧!你最好有事!");
}
强化训练

使用Scanner从键盘获取int类型的变量数据

package com.javalike;

import java.util.Scanner;

/*使用Scanner从键盘获取不同的数据类
 *具体实现步骤:
 *1.导包:import java.util.Scanner
 * 2.Scanner实例化(面向对象)
 * 3.调用Scanner相关类型的方法,以获取指定类型的数据变量
 * */

public class ScannerTest {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);//表示从键盘输入
        int num = scan.nextInt();//调用int类型的方法
        if (num < 0 || num > 100) {
            System.out.println("您输入的数据非法,请重新输入!");
        } else if (num >= 90) {
            System.out.println("成绩优秀");
        } else if (num >= 60) {
            System.out.println("成绩良好");
        } else {
            System.out.println("你家里有家业继承吧!你最好有事!");
        }

    }
}

使用Scanner从键盘获取多种类型的变量数据

package com.javalike;

import java.util.Scanner;

public class ScannerTest2 {

    public static void main(String[] args) {

        Scanner scan1 = new Scanner(System.in);

        System.out.println("请输入您的姓名: ");
        String name = scan1.next();
        System.out.println(name);

        System.out.println("请输入您的体重: ");
        Double weight = scan1.nextDouble();
        System.out.println(weight);

        System.out.println("请输入您的年龄: ");
        int age = scan1.nextInt();
        System.out.println(age);

        System.out.println("你是否有房有车?(是或者否)");
        boolean isMoney = scan1.nextBoolean();
        System.out.println(isMoney);


    }
}

对于char类型的获取,Scanner没有提供相关的方法,可以使用String的方法来获取。如果非要用char,可以这样写:

System.out.println("您的性别是?(难或者女)");
String sex = scan1.next();
char sexChar = sex.charAt(0);//获取索引为0位置上的字符
System.out.println(sexChar);

从键盘输入三个数,判断它们之间的大小,并且排序输出

package com.javalike;

import java.util.Scanner;

public class ScannerTest3 {
    public static void main(String[] args) {

        Scanner scan3 = new Scanner(System.in);

        System.out.println("请输入第一个整数: ");
        int num1 = scan3.nextInt();
        System.out.println("请输入第二个整数: ");
        int num2 = scan3.nextInt();
        System.out.println("请输入第三个整数: ");
        int num3 = scan3.nextInt();

        //由小到大
        if (num1 >= num2) {
            if (num3 >= num1) {
                System.out.println(num2 + "<" + num1 + "<" + num3);
            } else if (num3 <= num2)
                System.out.println(num3 + "<" + num2 + "<" + num1);
        } else {
            if (num3 >= num2)
                System.out.println(num1 + "<" + num2 + "<" + num3);
            else if (num3 <= num2)
                System.out.println(num3 + "<" + num1 + "<" + num2);
            else
                System.out.println(num1 + "<" + num3 + "<" + num2);
        }
    }
}
深度练习
1. 下列代码,若有输出,请指出输出结果。
int x = 4;
int y = 1;
if (x > 2) {
    if (y > 2)
        System.out.println(x + y);
    System.out.println("hello java");
} else
    System.out.println("x is" + x);
2. 请指出一下程序输出的结果
//将会输出什么?
boolean b = true;
//如果写成if(b=false)能编译通过吗?如果能,结果是?
if (b == false)
    System.out.println(1);
else if (b)
    System.out.println(2);
else if (!b)
    System.out.println(3);
else
    System.out.println(4);
3. 我家的狗5岁啦,5岁的狗相当于人类多大呢?其实,狗的前两年每一年相当一人的10.5岁,之后的每增加一年就增加4岁。那么5岁的狗相当于人类多少年龄呢?编写一个程序,获取用户输入的狗的年龄,通过程序显示其相当于人类的年龄。如果用户输入负数,请显示一个提示信息。
package com.javalike;

import java.util.Scanner;

public class DogAge {
    public static void main(String[] args) {
        Scanner scan4 = new Scanner(System.in);
        int dogAge = scan4.nextInt();
        if (dogAge >= 0 && dogAge <= 2)
            System.out.println("相当于人的年龄: " + dogAge * 10.5);
        else if (dogAge > 2)
            System.out.println("相当于人的年龄: " + (2 * 10.5 + (dogAge - 2) * 4));
        else
            System.out.println("狗崽子还没出生呢。");
    }
}

switch-case

根据Switch表达式里的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句后,则继续向下执行其他case结构中的执行语句,直到遇到break关键字或此Switch-case结构末尾为止结束该程序。

结构:

switch (表达式){
    case 常量1:
        语句1;
        break;
    case 常量2:
        语句2;
        break;
        ... ...
    case 常量n:
        语句n;
        break;
    default:
        语句;
        break;
}
package com.javalike;

import java.util.Scanner;

public class SwitchCaseTest {
    public static void main(String[] args) {
        Scanner scan5 = new Scanner(System.in);
        int number = scan5.nextInt();
        switch (number) {
            case 0:
                System.out.println("zero");
                break;
            case 1:
                System.out.println("one");
                break;
            case 2:
                System.out.println("two");
                break;
            case 3:
                System.out.println("three");
                break;
            case 5:
                System.out.println("5_5");
                break;
            default:
                System.out.println("0.0");
        }
    }
}

Switch结构中的表达式,只能是如下的6种数据类型之一:byte、short、char、int、枚举类型、string类型。

强化训练
1. 使用Switch把小写的char类型转换为大写,只转换abcde,其他的输出“other”。
package com.javalike;

import java.util.Scanner;

public class SwitchCaseTest2 {
    public static void main(String[] args) {
        Scanner scan6 = new Scanner(System.in);
        String word = scan6.next();
        char c = word.charAt(0);
        switch (c) {
            case 'a':
                System.out.println("A");
                break;
            case 'b':
                System.out.println("B");
                break;
            case 'c':
                System.out.println("C");
                break;
            case 'd':
                System.out.println("D");
                break;
            case 'e':
                System.out.println("E");
                break;
            default:
                System.out.println("other");
                break;
        }
    }
}
2. 对学生成绩大于60分的,输出合格。低于60分的,输出不合格。

如果Switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。

package com.javalike;

public class SwitchCaseTest3 {
    public static void main(String[] args) {
        int score = 60;
        switch (score / 10) {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("不合格");
                break;
            case 6:
            case 7:
            case 8:
            case 9:
            case 10:
                System.out.println("合格");
                break;

        }
    }
}

更优雅的写法

int score = 60;
switch (score / 60) {
    case 0:
        System.out.println("不合格");
        break;
    case 1:
        System.out.println("合格");
        break;

}
3. 根据用于指定月份,打印该月份所属的季节。345春季;678夏季;91011秋季;1212冬季。
package com.javalike;

import java.util.Scanner;

public class SwitchCaseTest3 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int month = scan.nextInt();
        switch (month) {
            case 3:
            case 4:
            case 5:
                System.out.println("春季");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("夏季");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("秋季");
                break;
            case 12:
            case 1:
            case 2:
                System.out.println("冬季");
                break;

        }
    }
}
4.编写程序:从键盘上输入2022年的“month”和“day”,要求通过程序输出输入的日期为20252年的第几天。
package com.javalike;

import java.util.Scanner;

public class SwitchCaseTest4 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入2022年的月份");
        int month = scan.nextInt();
        System.out.println("请输入2022年的天");
        int day = scan.nextInt();
        int sumDays = 0;
        switch (month) {
            case 12:
                sumDays += 30;
            case 11:
                sumDays += 31;
            case 10:
                sumDays += 30;
            case 9:
                sumDays += 31;
            case 8:
                sumDays += 31;
            case 7:
                sumDays += 30;
            case 6:
                sumDays += 31;
            case 5:
                sumDays += 30;
            case 4:
                sumDays += 31;
            case 3:
                sumDays += 31;
            case 2:
                sumDays += 29;
            case 1:
                sumDays += day;
        }
        System.out.println("2022年"+month+"月"+day+"日"+",是2022年的"+sumDays+"天");
    }
}

循环结构

根据循环条件,重复性的执行某段代码

for循环

结构:

for(表达式1; 表达式2; 表达式3){
    语句块;
}

输出100句“我爱你”

for (int i = 0;i<=100;i++){
    System.out.println("我爱你!"+i);
}

输出100以内的所有偶数,并输出它们的总和

int sum = 0;
for (int i = 1; i <= 100; i++) {
    if (i % 2 == 0) {
        System.out.println(i);
        sum += i;
    }
    System.out.println("总和为: "+sum)
}

break 关键字

braek 主要用在循环语句或者Switch语句中,用来跳出整个语句块,在哪里写就在哪里跳出。

public static void main(String[] args) {
    int[] arr = {10, 20, 30, 40, 50};
    for (int i :arr) {
        if (i == 30){
            break;
        }
        System.out.println(i);
    }
}

Java增强for循环

Java5 引入了一种主要用于数组的增强型 for 循环。

Java 增强 for 循环语法格式如下:

for(声明语句:数组或集合对象){

//代码块

}

例如:

for (int i :arr) {
     System.out.println(i)
 }

优点:更方便,比使用迭代器方便一点。
缺点:只能从头到尾的遍历数组和集合,而不能只遍历部分,且遍历数组时无法获取当前的角标

continue 关键字

continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。

在 for 循环中,continue 语句使程序立即跳转到更新语句。
在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。

 public static void main(String[] args) {
        int[] arr = {10, 20, 30, 40, 50};
        for (int i : arr) {
            if (i == 30) {
//                break;
                continue;
            }
            System.out.println(i);
        }
    }
强化训练
1. 编写程序从1循环到150,并在每行打印一个值,另外在每个3的倍数行上打印出“foo”,在每个5的倍数上打印“biz”,在每个7的倍数上打印输出“baz”。
for (int i = 1; i <= 150; i++) {
    System.out.print(i + " ");

    if (i % 3 == 0)
        System.out.print("foo ");
    if (i % 5 == 0)
        System.out.print("biz ");
    if (i % 7 == 0)
        System.out.print("baz ");

    System.out.println();
}
2. 输入两个正整数m和n,求其最大公约数和最小公倍数。比如,12和20的最大公约数是4,最小公倍数是60。(break关键字的使用)
package com.javalike;

import java.util.Scanner;

public class ForTest3 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        System.out.println("请输入第一个数");
        int m = scan.nextInt();

        System.out.println("请输入第二个数");
        int n = scan.nextInt();

        //获取最大公约数
        //获取两个数中的较小值
        int min = (m <= n) ? m : n;
        for (int i = min; i >= 1; i--) {
            if (m % i == 0 && n % i == 0) {
                System.out.println("最大公约数为: " + i);
                break;
            }
        }

        //获取最小公倍数
        //获取两个数中的较大值
        int max = (m >= n) ? m : n;
        for (int i = max; i <= m * n; i++) {
            if (i % m == 0 && i % m == 0) {
                System.out.println("最小公倍数为: " + i);
                break;
            }
        }
    }
}

while循环

  • while 语句,先判断条件是否满足,如果满足就执行循环体内的语句,执行完毕后再回来判断条件是否满足,如此无限重复
  • 直到条件不满足时,执行while循环后边的语句。

结构:

初始化条件;
while (循环条件[是boolean类型]){
    循环体;
    迭代条件;

}

只要布尔表达式为 true,循环就会一直执行下去。

public static void main(String[] args) {
    int x = 10;
    while (x < 20){
        System.out.println("x = " +x);
        x++;
    }
}

do-while循环

结构:

do {
       //代码语句
}while(布尔表达式);

注意: 布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。因此, do-while循环至少要执行一次循环语句

public class WhileTest {
    public static void main(String[] args) {
        int x = 10;
        do {
            System.out.print("x = " + x);
            x++;
            System.out.print("\n");
        } while (x < 20);
    }