【Java】第二章_Java基本语法(下)

第二章 Java基本语法(下)

本次笔记就是对上结理论知识的巩固,主要是对流程控制部分的代码练习。

一、如何从键盘获取不同类型的变量

1.1 实现步骤

(1)导包:import java.util.Scanner;

(2)Scanner的实例化:Scanner scan = new Scanner(System.in);

(3)调用Scanner类的相关方法,来获取指定类型的变量

以下是代码示例

/*
如何从键盘获取不同类型的变量,需要使用Scanner类

注意:
需要根据相应的方法,来输入指定类型的值,
如果输入的数据类型与要求的类型不匹配,会报异常;导致程序终止

*/

import java.util.Scanner;

public class ScannerTest {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

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

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

        System.out.println("请输入你的体重:");
        double weight = scan.nextDouble();
        System.out.println(weight);

        System.out.println("你是否同意?(true/false))");
        boolean agree = scan.nextBoolean();
        System.out.println(agree);

        //对于char型的获取,Scanner没有提供相关的方法,只能获取一个字符串
        System.out.println("请输入你的性别:(男/女)");
        String gender = scan.next();//"男"
        char genderChar = gender.charAt(0);//获取索引为0位置上的字符
        System.out.println(genderChar);


    }
}

二、if语句

例题1:

岳小鹏参加Java考试,他和他父亲岳不群达成承诺
如果:

成绩为100分时,奖励一台BMW;

成绩为(80,99]时,奖励一台iphone 12

当成绩为[60,80]时,奖励一个ipad

其他时就没有奖励

请从键盘输入岳小鹏的成绩,并加以判断

/*
说明:
1.else 结合是可选的
2.针对于条件表达式
    >如果对个条件表达式之间是“互斥”关系(或没有交集的关系),哪种判断和执行语句声明在上面或者在下面,无所谓
    >如果对个条件表达式之间有交集的关系,需要根据实际情况,考察清楚应该那个结构声明在上面
    >如果是包含关系,我们要把小的那部分写在上面。如果把范围大的写在上面,范围小的就没有机会执行了

 */


import java.util.Scanner;

class IfTest1 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入岳小鹏期末成绩:(0-100)");
        int score = scan.nextInt();

        if (score == 100){
            System.out.println("奖励一辆BMW");
        }else if (score > 80 && score <= 99){
            System.out.println("奖励奖励一台iphone 12");
        }else if (score >= 60 && score <= 80){
            System.out.println("奖励一个ipad");
        }
//        这个结构可写可不写,根据实际需求
//        else{
//            System.out.println("什么也没有");
        }
}

例题2:

编写程序,由键盘输入三个整数num1、num2、num3

对他们进行排列顺序,(使用 if-else if-else),并且从小到大输出

/*
说明:
1.if-else结合是可以相互嵌套的
2.如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略,但是,不建议省略
 */

import java.util.Scanner;
class IfTest2 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

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

        if(num1 >= num2){
            if (num3 > num1){
                System.out.println(num2 + "," + num1 + "," + num3);
            }else if (num3 <= num2){
                System.out.println(num3 + "," + num2 + "," + num1);
            }else{
                System.out.println(num2 + "," + num3 + "," + num1);
            }
        }else {
            if(num3 >= num2){
                System.out.println(num1 + "," + num2 + "," + num3);
            }else if(num3 <= num1){
                System.out.println(num3 + "," + num1 + "," + num2);
            }else{
                System.out.println(num1 + "," + num3 + "," + num2);
            }

        }
    }
}

例题3:

我家的狗5岁了,五岁的狗相当于人类多大呢?其实狗的前两年每年增长相当于人类的10.5岁之后每增加一年就增加四岁,那么5岁的狗狗相当于人类的多大年龄呢?

编写一个程序,获取用户输入狗的年龄,通过程序显示相当于人类的年龄,

如果用户输入的是负数,则显示一个提示

class IfTest3 {
    public static void main(String[] args) {
        int dogAge = 6;
        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("狗狗还没有出生呢");
        }
    }
}

例题4:

假设你是想开发一个玩彩票的游戏,程序随机产生一个两位数的彩票,提示用户输入一个两位数;,然后按照下面的游戏规则判定用户是否能赢

1)如果用户输入的数匹配彩票的实际顺序,奖金10000美金

2)如果用户输入的所有数字匹配彩票的所有数字,但顺序不一致,奖金3000美金

3)如果用户输入的一个数字仅满足顺序情况下匹配彩票的一个数字,奖金1000美金

4)如果用户输入的一个数字仅满足非顺序情况下匹配彩票的一个数字,奖金500美元

5)如果用户输入的数字没有匹配任何一个数字,则彩票作废。

// 如何获取一个随机数
class IfTest4 {
    public static void main(String[] args) {
         int value = (int)(Math.random() * 90 + 10);// [0.0,1.0) --> [0.0,90.0) --> [0.0,90.0) --> [10.0,100.0) --> [10,99)
// 公式:[a,b] :(int)(Math.random() * (b - a + 1) + a)
        System.out.println(value);
    }
}

例题5:

大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一个条件:

高:180cm以上,富:财富1千万以上,帅:是

如果上面三个条件同时满足,则:我一定要嫁给他!

如果三个条件有为真的情况,则:嫁吧,比上不足,比下有余。

如果三个条件都不满足,则:不嫁!

注:例题而已,请勿当真,树立正确的三观!

import java.util.Scanner;


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

 方式一:
        Scanner scan = new Scanner(System.in);

        System.out.println("请输入你的身高:(cm)");
        int height = scan.nextInt();
        System.out.println("请输入你的财富:(千万)");
        double rich = scan.nextDouble();
        System.out.println("请输入你是否帅:(true/false)");
        boolean appearance = scan.nextBoolean();

        if (height >= 180 && rich >= 1000 && appearance){
            System.out.println("我一定要嫁给他!!");
        }else if(height >= 180 ||  rich >= 1000 || appearance){
            System.out.println("嫁吧,比上不足,比下有余");
        }else{
            System.out.println("不嫁!");
        }
    }


 方式二


        System.out.println("请输入你是否帅:(是/否)");
        String appearance = scan.next();
//  注意:equals 方法是判断括号内的字符串是否匹配的一种方法
        if (appearance.equals("是")) {
            System.out.println("我一定要嫁给他!!");
        } else {
            System.out.println("不嫁!");
        }
    }
}

三、switch-case语句

3.1 说明:

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

② break,可以使用在switch - case 结构中,表示一旦执行到此关键字,就跳出switch-case结构

③ switch结构中的表达式,只能是如下的6种数据类型之一
(byte、short、char、int、枚举类型(JDK 5.0新增)string类型(JDK 7.0新增))

④ case之后只能声明常量,不能声明范围

⑤ break 关键字是可选的

⑥ default:相当于 if - else结构中的else
default结构是可选的。位置是灵活的

3.2 语句格式

switch(表达式){
case 常量1;
    执行语句1;
    break;

case 常量2;
    执行语句2;
    break;

default:
    执行语句n;
   

举例代码:

class SwitchCaseTest {
    public static void main(String[] args) {
        String season = "summer";
        switch (season) {

        case "spring":
            System.out.println("穿暖花开");
            break;
        case "summer":
            System.out.println("夏日炎炎");
            break;
        case "autumn":
            System.out.println("秋高气爽");
            break;
        case "winter":
            System.out.println("冬雪皑皑");
            break;
        default:
            System.out.println("输入有误");
        }
    }
}

例题1:

使用switch把小写类型的char型转换为大写,只转换a、b、c、d、e

其他的输出为“other”

提示:

String word = scan.next();

char c = word.charAt(0);

switch(c){}

import java.util.Scanner;          //导入从键盘输入的包

class SwitchCaseTest1 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in); //实例化

        System.out.println("请输入:");
        String name = scan.next();  // 调用方法来获取键盘输入的值
        char c = name.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");

        }
    }
}

例题2:

对学生成绩大于60分的,输出“合格”;低于60分的,输出“不合格”

/*
说明:如何switch - case 结构中的多个case的执行语句相同,则可以考虑进行合并(但是这不是新的知识)

这道题最优解是 score除60
*/
class SwitchCaseTest2 {
    public static void main(String[] args) {

        int score = 78;   //这里假设分数为78分
        
        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;
    }
  }
}

例题3:

根据用于指定月份,打印月份所属季节

3 4 5春季

6 7 8夏季

9 10 11秋季

12 1 2冬季

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

        int month = 4;
        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:

输入年月日,计算这是当年的第几天。

import java.util.Scanner;

public class SwitchCaseTest5 {



        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            System.out.println("请输入year:");
            int year = scan.nextInt();
            System.out.println("请输入month:");
            int month = scan.nextInt();
            System.out.println("请输入day:");
            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 += 28;
                    //判断是否是闰年
                    if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
                        sumDays +=29;
                    }else {
                        sumDays +=28;
                    }
                case 2:
                    sumDays += 31;
                case 1:
                    sumDays += day;
            }
            
           
            System.out.println(year + "年"  + month + "月" + day + "日是当年的第" + sumDays + "天"); 
   }
}

四、For循环语句

4.1 循环结构的四个要素

① 初始化条件

② 循环条件—(是boolean类型的)

③ 循环体

④ 迭代条件

4.2 for循环的结构

for(;;){}

执行过程:① - ② - ③ - ④ - ② - ③ - ④ - … - ②

例题1:

遍历100以内的偶数

记录所有偶数的和

输出偶数的个数

class ForTest1{
  public static void main(String[] args){
  
        int sum = 0
        int count = 0;
        for (int i = 1;i <= 100;i++){
            if(i % 2 == 0){
                System.out.println(i);
                sum += i;
                count ++;
            }
        }
        
        System.out.println("总数和为:" + sum);
        System.out.println("总个数为:" + count);
  }
}

例题2:

编写程序从1循环到150,并在每行打印一个值,

另外在每个3的倍数行上打印出“foo”,

在每个5的倍数行上打印“biz”,

在每个7的行数上打印“baz”

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

        for(int i = 1; i <= 150; i++){
            System.out.println(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");
            }

        }
    }
}

例题3:

输入两个正整数m和n,求其最大公约数和最小公倍数,

比如:12和20的最大公约数是4,最小公倍数是60

import java.util.Scanner;

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();

        //获取最大公约数
        //1.获取两个数中较小的值
        int min = (m <= n)? m : n;
        //2.遍历
        for (int i = min;i >=1;i--){

            if(m % i == 0 && n % i == 0){

                System.out.println("最大公约数为:"+ i);
                break;// 一但在循环中执行到break,就跳出循环

            }
        }
        //获取最小公倍数
        //1.获取两个数中的最大值
        int max = (m >= n) ? m : n;
        //2.遍历
        for(int i = max; i <= m * n; i++ ){

            if (i % m ==0 && i % n == 0){

                System.out.println("最小公倍数为:"+ i);
                break;
            }
        }

    }
}

五、While循环语句

5.1 循环体的4个要素

① 初始化条件

② 循环条件 -->是boolean类型

③ 循环体

④ 迭代条件

5.2 while循环的结构

while(){;;

执行过程:1-2-3-4-2-3-4-…-2

例题1:

遍历100 以内的所有偶数,计算总和及个数

/*
说明:
1.写while循环千万小心别丢了循环条件,一但丢了,就可能导致死循环
2.我们写程序,要避免出现死循环
3.for循环和while循环是可以互相转换的


算法:程序要有 有限性
 */



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

     // 遍历100 以内的所有偶数,计算总和及个数
         int sum = 0;
         int count = 0;
         int i= 1;
         while(i <= 100){

             if (i % 2 == 0){
                 System.out.println(i);
                 sum += i;
                 count ++;
             }
             i++;
         }
         System.out.println("总和为" + sum);
         System.out.println("个数为" + count);

     }
}

六、do-while循环语句

6.1 循环体的4个要素

① 初始化条件

② 循环条件 -->是boolean类型

③ 循环体

④ 迭代条件

6.2 do-while 循环结构

do{;;
}while();

执行顺序; 1-3-4-2-3-4-2-3-…-2

6.3 while循环和do-while循环的差异

class Test1{
    public static void main(String[] args){
        // while循环是先判断符不符合条件,再执行;但执行多次就没有区别了
        // int number1 = 10;
        int number1 = 15;
        while (number1 > 10){
            System.out.println("Hello While!");
            number1--;

        }

        // do-while是先执行一次do再判断while符不符合条件;但执行多次就没有区别了
        // int number2 = 10;
        int number2 = 15;
        do{
            System.out.println("Hello Do-While!");
            number2--;
        }while (number2 > 10);
    }
}

例题1:

遍历100以内的偶数,并计算所有偶数的和及个数

说明
/*
1.do-while至少会执行一次循环体
2.在开发中使用for 和 while循环更多一些,较少使用 do-while
 */

class DoWhileTest1 {
    public static void main(String[] args) {
    // 遍历100以内的偶数,并计算所有偶数的和及个数
        int sum = 0; // 记录总和
        int count = 0; // 记录个数
        int num = 1;
        do{
            if(num % 2 == 0){
                System.out.println(num);
                sum += num;
                count++;
            }
            num++;
        }while (num <= 100);

        System.out.println("总和为" + sum);
        System.out.println("个数为" + count);

七、特殊关键字

7.1 break 和 continue关键字的使用 ,

break:

适用范围:Switch - case 循环结构中;
在循环中使用:结束当前循环
关键字后面不能直接有执行语句的(两者相同)

continue :

适用范围 循环结构中
在循环中使用:结束当次循环
关键字后面不能直接有执行语句的(两者相同)


public class BreakContinueTest {

    public static void main(String[] args) {
        for(int i = 1;i <= 10;i++){

            if(i % 4 == 0){
                //break;   // 用break 结束当前循环,所以结果为1 2 3
                continue;  // 用continue 结束本次循环,所以结果为 1 2 3 5 6 7 8 9 10

            }
            System.out.println(i);

        }
        System.out.println("\n");




        // ************************************
        for (int i = 1; i <= 4;i ++){

            label:for (int j = 1;j <= 10;j++){

                if (j % 4 == 0){
                   // break; // 这里break的跳出循环取得是就近原则
                   // continue;
                   // break label; // 结束指定标识的一层循环结构
                   // continue label: // 结束指定标识的一层循环结构的当次循环
                }
                System.out.print(j);
            }
            System.out.println();
        }
    }
}

八、嵌套循环

8.1嵌套循环要点

(1)
嵌套循环:将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环

(2)
外层循环:循环结构B
内层循环:循环结构A

(3)
①内层循环结构遍历一遍,只相当于外层循环的循环体执行一次。
②假设外层循环需要执行M次,内层循环需要执行N次,此时内层循环的循环体一共执行了M × N 次

(4)
外层循环控制行数,内层循环控制列数


    public static void main(String[] args) {
        /*
        1.输出:
        ******
        */
        for (int i = 1; i <= 6; i++){
            System.out.print("*");
        }
        System.out.println("\n");


        /*
        2.输出:
        ******
        ******
        ******
        ******
         */
    for (int j = 1; j <= 4; j++){
        for(int i = 1; i <= 6;i++){
            System.out.print("*");
        }
        System.out.println();   // 充当换行的作用

        }
        System.out.println("\n");



    /*
        3.输出
        *
        **
        ***
        ****
        *****
     */
    for (int i = 1;i <=5; i++){ // 控制行数
        for(int j = 1;j <= i;j++){ // 控制行数
            System.out.print("*");
        }
        System.out.println();
    }
        System.out.println("\n");



    /*
        4.输出
        *****
        ****
        ***
        **
        *
     */

    for (int i = 1;i <= 5; i++){
        for (int j = 1;j <= (6-i);j++){
            System.out.print("*");
        }
        System.out.println();

        }
    }

例题1

从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时的结果

/*
提示:
1.不在循环条件部分限制次数的结构; for(;;) 或者 while(true)
2.结束循环有几种方式?
    方式一:循环条件部分返回 false
    方式二:在循环体中执行break

 */


import java.util.Scanner;

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

        Scanner scan = new Scanner(System.in);

        System.out.println("请输入数字,中间用空格隔开:");

        int posttiveNumber = 0; // 记录正数的个数
        int negativeNumber = 0; // 记录负数的个数
        for (;;){
    //  while(true){

            int number = scan.nextInt();

            // 判断number的正负情况
            if(number > 0){
                posttiveNumber++;
            }else if(number < 0){
                negativeNumber++;
            }else {
                // 当两个数不大于,不小于,等于零时,就break,跳出循环
                break;
            }
        }
            System.out.println("正数有"+posttiveNumber+"个");
            System.out.println("负数有"+negativeNumber+"个");
    }
}

例题2

输出十万以内的质数的输出

方式一:

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

        int count = 0;

    boolean isFlag = true; // 标识i 是否被j除尽,一旦除尽,修改其值

    long start = System.currentTimeMillis(); //当前时间距离1970年的毫秒数

    for(int i = 2; i <= 100000;i++){ // 遍历100以内的自然数

        for (int j = 2; j <= Math.sqrt(i);j++){  // j:被i去除 优化二:给i开根号,优化后又减少10倍时间

            if(i % j == 0){ // i被j除尽
                isFlag = false;
               break; // 优化一:只对本身非质数的自然数是有效的。优化和不优化之间的运行时间相差10倍
            }
        }
        //
        if (isFlag == true){
            System.out.println(i);
            count ++;
        }
        //重置isFlag
        isFlag = true;


    }
        // 获取运行结束的毫秒数
        long end = System.currentTimeMillis();

        System.out.println("质数的个数为:" + count);

        System.out.println("所花费的时间是:" + (end - start) + "毫秒");
    }
}

方式二:

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

        int count = 0;

        long start = System.currentTimeMillis(); //当前时间距离1970年的毫秒数

        label:for(int i = 2; i <= 100000;i++){ // 遍历100以内的自然数

            for (int j = 2; j <= Math.sqrt(i);j++){  // j:被i去除 优化二:给i开根号,优化后又减少10倍时间

                if(i % j == 0){ // i被j除尽
                    continue label;
                    }
                }
            count++;

            }


        // 获取运行结束的毫秒数
        long end = System.currentTimeMillis();

        System.out.println("质数的个数为:" + count);

        System.out.println("所花费的时间是:" + (end - start) + "毫秒");
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卢子宁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值