Java基础4

Scanner 键盘输入功能的实现

使用Scanner获取不同类型数据的步骤:

  1. 导包: import java.util.Scanner
  2. 提供(或创建)一个Scanner类的实例
  3. 调用Scanner类中的方法,获取指定类型的变量
  4. 关闭资源,调用Scanner类的close( )

注意:

Scanner类中提供了获取byte \ short \ int \ long \ float \ double \ boolean \ String类型变量的方法,但是!没有提供获取char类型变量的方法,需要使用next().charAt(0)获取 

复制代码
import java.util.Scanner  //步骤一 导包
class ScannerTest{
    public static void main(String[] args){
    Scanner scan = new Scanner (System.in);//步骤二 创建一个Scanner类实例
    System.out.println("请输入你的名字");
    String name = scan.next();  //步骤三  调用Scanner类中的方法
    System.out.println("name=" +name);
   scan.close(); } }
复制代码

random随机数

Math类的random()的调用会返回一个[0.0,1.0)范围的一个double型值

需求1:获取一个[0,100]范围内的随机整数:

int num1 = (int)(Math.random()*101); //[0.0 , 1.0) --> [0.0 , 101.0) --> [0,100]

需求2:获取一个[1,100]范围内的随机整数:

int num1 = (int)(Math.random()*100)+1; //[0.0 , 1.0) --> [0.0 , 100.0) --> [0,99]+1 -->[1,100]

需求3:获取[a,b]范围内的随机整数:

int num1 = (int)(Math.random()*(b-a+1))+a; //[0.0 , 1.0) --> [0.0 , (b-a+1).0) --> [0,b-a]+a -->[a,b]

流程控制语句

流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。

三种流程结构:

顺序结构  程序从上到下逐行执行,中间没有任何判断和跳转

分支结构  根据条件,选择性的执行某段代码。有if-else和switch-case两种分支语句

循环结构  根据循环条件,重复性的执行某段代码。有for、while、do-while三种循环语句

顺序结构

程序从上到下逐行的执行语句,表达式语句都是顺序执行,并且对上一行某个变量的修改对下一行会产生影响。

分支结构

if-else条件判断结构

说明:if-else语句中的执行语句块中只有一行执行语句时,这行执行语句所在的一对{ }可以省略,但是不建议。

//案例一:成年人心率的正常范围是每分钟60-100次,体检时心率不在此范围内则重新检查
int heartBeats = 89;
if (heartBeats >= 60 && heartBeats <=100):
//不能写为 if (60<= heartBeats <= 100)   因为先执行60<= heartBeats 结果是boolean不可以参与后面判断
    System.out.println("正常");
else:
    System.out.println("重新检查!");

if-else嵌套使用:

复制代码
//对三个数从小到大输出
int num1 = 34;
int num2 = 35;
int num3 = 92;
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);}
}
复制代码

 switch-case选择结构

语法格式:

 执行过程:

根据表达式中的值,依次匹配case语句,一旦与某一个case中的常量相等,那么就执行此case中的执行语句。

注意:执行完此执行语句之后,

  情况1:遇到break,则执行break后,跳出当前的switch-case结构

  情况2:没有遇到break,则继续执行其后的case中的执行语句....直到遇到break或者执行完所有的case及default中的语句,退出当前的switch-case结构

说明:

  • switch中的表达式只能是特定的数据类型。如下:byte \ short \ char \ int \ 枚举(JDK5.0新增) \ String(JDK7.0新增)
  • case后跟的都是常量,使用表达式与这些常量做相等的判断,不能进行范围的判断
  • 开发中,使用switch-case时,通常case匹配的情况都有限。
  • break:可以使用在switch-case中,一旦执行此break关键字,就跳出当前的switch-case结构。
  • default:类似于if-else中的else结构,default是可选的,而且位置是灵活的。
复制代码
//对于一门满分100的课程,用switch-case输出及格或者不及格
        Scanner scan = new Scanner(System.in);
        int score = scan.nextInt();
        //方式一:
        switch (score/10) {
            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;
            default:
                System.out.println("成绩有误!");
                break;
        }

        //方式二:
        switch (score/60) {
            case 0:
                System.out.println("不及格");
                break;
            case 1:
                System.out.println("及格");
                break;
            default:
                System.out.println("成绩有误!");
                break;
        }
复制代码

switch-case 与 if-else 之间的转换

① 开发中凡是可以使用switch-case结构的场景,都可以写成if-else。反之不成立。

② 开发中,如果一个具体的问题既可以使用switch-case,又可以使用if-else的时候,推荐使用switch-case,因为switch-case时间复杂度o(1),if-else是o(n)。

if分支和switch分支语句的异同之处

if-else语句优势:

  • if语句的条件是一个布尔类型值,if条件表达式为true则进入分支,可以用于范围的判断,也可以用于等值的判断,适用范围更广
  • switch语句的条件是一个常量值(byte、short、int、char、枚举、String)只能判断某个变量或表达式的结果是否等于某个常量值,使用场景更狭窄。

switch语句优势:

  • 当条件判断某个变量或表达式是否等于某个固定的常量值时,使用if和switch都可以,习惯上使用switch更多,因为效率稍高。当条件是区间范围的判断时,只能使用if语句。
  • 使用switch可以利用穿透性,同时执行多个分支,而if-else没有穿透性。

循环结构

循环结构分类:

① for循环   ② while循环  ③ do-while循环

循环结构四要素:

① 初始化部分  ② 循环条件  ③ 循环体  ④ 迭代部分

for循环

基本格式

int num = 1;
for (System.out.println("a"); num<3; System.out.println("c"), num ++){
    System.out.println("b");
} //输出:abcbc

说明:  

  • 我们可以在循环结构中使用break,一旦执行break,就跳出(或结束)当前循环结构、
  • 如何结束一个循环结构?  ① 循环条件不满足(即循环条件执行完以后是false)  ② 在循环体中执行了break

举例:

复制代码
// 以12和20为例,最大公约数4,最小公倍数是60
        int m = 12;
        int n = 20;
        //获取m和n中的较小值
        int min = (m<n) ? m : n;
        //最大公约数
        //方式1
        int result = 1;
        for (int i = 1; i < min; i ++){
            if (m % i == 0 && n % i == 0){
                result = i;  //不能在这一行输出,因为最大的那个才是我们要找的。
            }
        }
        System.out.println("最大公约数是:" + result);
        //方式2  更推荐!方式1 将所有的都要遍历一遍,方式2只用从大的往小找 找到第一个就可以输出
        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 <= n * m; i ++){
            if ( i % m == 0 && i % n ==0 ){
                System.out.println("最小公倍数是:" + i);
                break;
            }
        }
复制代码

while循环

基本格式

注意:for循环与while循环可以相互转换!

for循环和while训话你的小区别: 初始化条件的作用域范围不同,while循环中的初始化条件在while循环结束后,依然有效。

复制代码
// 猜数字游戏  1-100以内 并输出猜的次数
        int num = (int) (Math.random()*100)+1;
        int count = 1;
        System.out.println("请输入你的猜测:");
        Scanner scan = new Scanner(System.in);
        int gease = scan.nextInt();
        while (gease != num){
            if (num > gease)
                System.out.println("猜小了!");
            else
                System.out.println("猜大了!");
            count += 1;
            System.out.println("请再猜一次:");
            gease = scan.nextInt();
        }
        System.out.println("恭喜猜对啦!我的数字是:"+num + " 你一共猜了"+ count +"次!");
复制代码

do-while循环

语法格式:

 说明:

  • do-while循环至少执行一次循环体。
  • for、while、do-while循环三者之间是可以相互转换的。
  • do-while循环结构,在开发中,相较于for、while循环来讲,使用的较少。
复制代码
 // ATM取款
        Scanner scan = new Scanner(System.in);
        int balance = 0;
        boolean flag = true;
        do{
            System.out.println("================ATM===================");
            System.out.println("    1、存款");
            System.out.println("    2、取款");
            System.out.println("    3、显示余额");
            System.out.println("    4、退出");
            System.out.println(" 请选择(1-4):");
            int table = scan.nextInt();

            if (table == 1){
                System.out.println("请输入您的存款金额:");
                int money = scan.nextInt();
                balance += money;
            }else if (table == 2){
                System.out.println("请输入您的取款金额:");
                int money = scan.nextInt();
                balance -= money;
            }else if (table == 3){
                System.out.println("您的余额:" + balance);
            }else{
                flag = false;
            }
        }while(flag);
复制代码

如何选择三种循环:

  • 遍历有明显的循环次数(范围)的需求,选择for循环
  • 遍历没有明显的循环次数(范围)的需求,选择while循环
  • 如果循环体语句块至少执行一次,可以考虑使用do-while循环
  • 本质上:三种循环之间完全可以相互转换,都能实现循环的功能

嵌套循环

所谓嵌套循环,是指一个循环结构A的循环体是另一个循环结构B。比如,for循环里面还有一个for循环。其中,for、while、do-while均可以作为外层循环或者内层循环。

说明:设外层循环次数为m次,内层为n次,则内层循环的循环体实际上要执行m*n次。

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

复制代码
//上半部分
       for (int i = 1; i <=5; i ++){
           for (int j = 1; j <= (10-2*i);j++){
                System.out.print(" ");
            }
           for (int k = 1; k <= (2*i-1); k++){
               System.out.print("* ");
           }
           System.out.println("");
       }
        //下半部分
       for (int i = 4; i >= 1; i --){
           for (int j = (10-2*i); j >= 1 ;j--){
                System.out.print(" ");
            }
           for (int k = (2*i-1); k >= 1 ; k--){
               System.out.print("* ");
           }
           System.out.println("");
       }
复制代码

关键字break和continue的使用

break和continue的说明

复制代码
//输出100以内的质数:
        for (int i = 2; i <=100; i++){
            for (int j = 2; j <= i ;j++){
                if (i % j == 0 && j != i)
                    break;
                if (j == i)
                    System.out.print(i + "是质数!");
            }
        }
        
        //更优解:
        for (int i = 2; i <= 100 ; i++){
            boolean flag = true;
            for (int j = 2; j <= Math.sqrt(i); j ++){
                if (i % j == 0){
                    flag = false;
                    break;
                }
            }
            if (flag){
                System.out.print(i +"是质数!");
            }
        }
复制代码

 带标签的break和continue

 说明:

  • break和continue语句在多层嵌套循环语句体中时,也可以通过标签指明要跳过的时哪一层循环。
  • 标号语句必须紧接在循环的头部,标号语句不能用在非循环语句的前面。

 

posted on   gjwqz  阅读(11)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示