day06-Java流程式控制制

来源:https://www.cnblogs.com/liyuelian/archive/2022/07/25/16518722.html
-Advertisement-
Play Games

Java流程式控制制 1.用戶交互Scanner java.util.Scanner是Java5的新特征,我們可以通過Scannner類來獲取用戶的輸入。 基本語法: Scanner s = new Scanner(System.in); 通過Scanner類的next()與nextLine()方法獲取 ...


Java流程式控制制

1.用戶交互Scanner

java.util.Scanner是Java5的新特征,我們可以通過Scannner類來獲取用戶的輸入。

基本語法:

Scanner s = new Scanner(System.in);
  • 通過Scanner類的next()與nextLine()方法獲取輸入的字元串,在讀取前一般需要使用hasNext()與hasNextLine()判斷是否還有輸入的數據。

1.1Scanner對象

  • next()

  1. 一定要讀取到有效字元後才可以結束輸入

  2. 對輸入有效字元之前遇到的空白,next()方法會自動將其去掉

  3. 只有輸入有效字元後才能將其後面輸入的空白作為分隔符或者結束符

  4. next()不能得到帶有空格的字元串

  • nextLine()

  1. nextLine()是以Enter(回車)作為結束符,也就是說nextLine()方法返回的是輸入回車之前的所有字元

  2. 可以獲取空白

例子1

package li.bolog.scanner;
​
import java.util.Scanner;
​
public class Demo01 {
    public static void main(String[] args) {
        //創建一個掃描器對象,用於接收鍵盤數據
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用next方式接收:");
​
        //判斷用戶有沒有輸入字元串
        if(scanner.hasNext()){
            String str = scanner.next();//程式會等待用戶輸入完畢
            System.out.println("輸入的內容為:"+str);
        }
​
        //凡是屬於IO流的類如果不關閉會一直占用資源,要養成好習慣用完就關掉。
        scanner.close();
    }
}

image-20220725144259491

例子2

package li.bolog.scanner;
​
import java.sql.SQLOutput;
import java.util.Scanner;
​
public class Demo02 {
    public static void main(String[] args) {
        Scanner scanner =new Scanner(System.in);
​
        System.out.println("使用nextLine方式接收:");
​
        //判斷是否還有輸入
        if (scanner.hasNextLine()){
            //使用nextLine方式接收
            String str=scanner.nextLine();
            System.out.println("輸入的內容為:"+str);
        }
​
        scanner.close();
    }
}

image-20220725144447888

例子3

package li.bolog.scanner;
​
import java.util.Scanner;
​
public class Demo03 {
    public static void main(String[] args) {
​
        Scanner scanner = new Scanner(System.in);
​
        System.out.println("請輸入數據:");
​
        String str = scanner.nextLine();
​
        System.out.println("輸出的內容為:"+str);
​
        scanner.close();
    }
}

1.2Scanner進階使用

例子4

package li.bolog.scanner;
​
import java.util.Scanner;
​
public class Demo05 {
    public static void main(String[] args) {
        //我們可以輸入多個數字,並求其總和與平均數,每輸入一個數字用回車鍵確認。通過輸入非數字來結束輸入並輸出執行結果。
        Scanner scanner = new Scanner(System.in);
​
        //和
        double sum = 0;
        //計算輸入了多少個數字
        int m = 0;
        System.out.println("請輸入數據:");
        //通過迴圈判斷是否還有數字輸入,併在裡面對每一次進行求和和統計
        while(scanner.hasNextDouble()){
            double x = scanner.nextDouble();
            m=m+1;
            sum=sum+x;
​
            System.out.println("你輸入了第"+m+"個數據,當前結果sum="+sum);
        }
        System.out.println(m+"個數的和為:"+sum);
        System.out.println(m+"個數的平均數為:"+(sum/m));
        scanner.close();
    }
}

image-20220725164201592

2.順序結構

  • Java的基本結構就是順序結構,除非特別指明。否則就按照順序一句一句執行

  • 順序結構是最簡單的演算法結構

  • 語句與語句之間,框與框之間是按照從上到下的順序進行的,它是由若幹個一次執行的處理步驟組成的,它是任何一個演算法都離不開的一種基本的演算法結構

     

3.選擇結構

3.1if單選擇結構

  • 我們很多時候需要去判斷一個東西是否可行再去執行,這樣一個過程在程式中用if語句來表示。

語法:

if(布爾表達式){
    //這裡是如果布爾表達式為true,則將執行的語句
}

例子

package li.bolog.struct;
​
import java.util.Scanner;
​
public class IfDemo01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
​
        System.out.println("請輸入內容:");
        String s= scanner.nextLine();
​
        //equals:判斷字元串是否相等
        if(s.equals("Hello")){
            System.out.println(s);
        }
        System.out.println("End");
        scanner.close();
    }
}

image-20220725170421717

image-20220725170421717

 

3.2if雙選擇結構

語法:

if(布爾表達式){
    //這裡是如果布爾表達式為true則將執行的語句
}else{
    //這裡是布爾表達式為false則將執行的語句
}

例子

package li.bolog.struct;

import java.util.Scanner;

public class IfDemo02 {
    public static void main(String[] args) {
        //考試成績大於60分則及格,否則不及格
        Scanner scanner = new Scanner(System.in);

        System.out.println("請輸入成績:");
        int score = scanner.nextInt();
        if(score>=60){
            System.out.println("成績及格!");
        }else{
            System.out.println("成績不及格!");
        }
       scanner.close();

    }

}

image-20220725171232719

3.3if多選擇結構

語法:

if(布爾表達式1){
    //這裡是如果布爾表達式1為true則將執行的語句
}else if(布爾表達式2){
    //這裡是如果布爾表達式2為true則將執行的語句
}else if(布爾表達式3){
    //這裡是如果布爾表達式3為true則將執行的語句  
}...else{
    //如果以上布爾表達都不為true則執行這裡的代碼
}

if語句至多有一個else語句,else語句在所有的else if語句之後

if語句可以有若幹個else if 語句,它們必須在else語句之前

一旦其中一個else if語句檢測為true,其他的else if以及else語句都將跳過

例子

package li.bolog.struct;

import java.util.Scanner;

public class IfDemo03 {
    public static void main(String[] args) {
        //考試成績大於60分則及格,否則不及格
        Scanner scanner = new Scanner(System.in);

        System.out.println("請輸入成績:");
        int score = scanner.nextInt();
        if(score==100){
            System.out.println("成績滿分!");
        }else if(score<100&&score >=90){
            System.out.println("成績:A");
        }else if(score<90&&score >=80){
            System.out.println("成績:B");
        } else if(score<80&&score >=70){
            System.out.println("成績:C");
        } else if(score<70&&score >=60){
            System.out.println("成績:D");
        }else if(score<60&&score>=0){
            System.out.println("成績不合格!");
        }else{
            System.out.println("成績非法!");
        }
        scanner.close();

    }

}

image-20220725172951530

3.4嵌套的if結構

使用嵌套的if…else語句是合法的。也就是說你可以在另一個if或者else if語句中使用if或者else if語句。你可以像if語句一樣嵌套else if…else

語法:

if(布爾表達式1){
    //如果布爾表達式1為true則執行的語句
    if(布爾表達式2){
    //這裡是如果布爾表達式2為true則將執行的語句
	}
}

3.5switch多選擇結構

  • 多選擇結構還有一個實現方式就是switch case語句

  • switch case語句判斷一個變數與一系列值中的某個值是否相等,每一個值稱為一個分支

  • switch語句中的變數類型可以是:

    • byte、short、int或者char

    • 從Java SE 7開始 switch支持字元串類型,同時case標簽必須為字元串常量或字面量

語法:

switch(expression){
    case value:
        //語句
        break;//可選
    case value:
        //語句
        break;//可選
    //你可以有任意數量的case語句
    default://可選
        //語句
}

例子:case穿透現象

在switch語句中,如果case的後面不寫break,將出現穿透現象,也就是不會在判斷下一個case的值,直接向後運

行,直到遇到break,或者整體switch結束。

package li.bolog.struct;

public class SwitchDemo01 {
    public static void main(String[] args) {
        //
        char grade='A';

        switch(grade){
            case 'A':
                System.out.println("優秀");
            case 'B':
                System.out.println("良好");
            case 'C':
                System.out.println("及格");break;
            default:
                System.out.println("未知等級");
        }

    }
}

image-20220725180613483

例子:switch支持字元串類型

package li.bolog.struct;

public class SwitchDemo02 {
    public static void main(String[] args) {
        String name = "中國";
        //JDK7的新特性標,表達式結果可以是字元串!!
        //字元串的本質還是數字

        //反編譯 java--class(位元組碼文件)----反編譯(這裡用IDEA實現)
        switch(name){
            case "英國":
                System.out.println("英國");break;
            case "美國":
                System.out.println("美國");break;
            case "中國":
                System.out.println("中國");break;
            default:
                System.out.println("弄啥嘞?");
        }
    }
}

字元串的本質還是數字

這裡使用IDEA反編譯該java文件對應的class文件,得到如下:

可以看到, switch(name)變成了switch(name.hashCode()),case後面對應的字元串變成了數字。每一個中文都會有對應的哈希值,根據哈希值判斷中文是否相同。

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package li.bolog.struct;

public class SwitchDemo02 {
    public SwitchDemo02() {
    }

    public static void main(String[] args) {
        String name = "中國";
        byte var3 = -1;
        switch(name.hashCode()) {
        case 642672:
            if (name.equals("中國")) {
                var3 = 2;
            }
            break;
        case 1034543:
            if (name.equals("美國")) {
                var3 = 1;
            }
            break;
        case 1061420:
            if (name.equals("英國")) {
                var3 = 0;
            }
        }

        switch(var3) {
        case 0:
            System.out.println("英國");
            break;
        case 1:
            System.out.println("美國");
            break;
        case 2:
            System.out.println("中國");
            break;
        default:
            System.out.println("弄啥嘞?");
        }

    }
}

4.迴圈結構

  • while迴圈

  • do...while迴圈

  • for迴圈

在java5中引入了一種主要用於數組的增強型for迴圈

4.1while迴圈

while是最基本的迴圈,它的結構為:

while(布爾表達式){
    //迴圈內容
}
  • 只要布爾表達式為true,迴圈就會一直執行下去

  • 如果想要迴圈停下來,就需要一個表達式失效的方式來結束迴圈

  • 迴圈條件一直true就會造成無限迴圈[死迴圈]

例子:輸出1-100

package li.bolog.struct;

public class WhileDemo01 {
    public static void main(String[] args) {
        //輸出1到100
        int i = 0;

        while(i<100){
            i++;
            System.out.print(i);
        }
    }
}

image-20220725191056614

例子:計算1+2+...+100

package li.bolog.struct;

public class WhileDemo02 {
    public static void main(String[] args) {
        //計算1+2+...+100
        int i=0;
        int sum=0;
        while(i<=100){
            sum=sum+i;
            i++;
        }
        System.out.println(sum);
    }
}

image-20220725191019163

4.2do...while迴圈

對於while語句而言,若果不滿足條件,則不能進入迴圈。但有時候我們需要即使不滿足條件,也至少執行一次。

do...while迴圈和while迴圈相似,不同的是,do...while迴圈至少會執行一次

語法:

do{
    //代碼語句
}
while(布爾表達式);
  • while和do...while的區別:

    • while先判斷後執行,do-while是先執行後判斷

    • do-while總是保證迴圈體至少會被執行一次!這是他們的主要區別

例子:計算1+2+...+100

package li.bolog.struct;

public class DoWhlieDemo01 {
    public static void main(String[] args) {
        int i=0;
        int sum=0;
        do{
            sum=sum+i;
            i++;
        }while(i<=100);
        System.out.println(sum);
    }
}

image-20220725192013489

例子:while和do-while

package li.bolog.struct;

public class DoWhileDemo02 {
    public static void main(String[] args) {
        int a=0;
        while (a<0){
            System.out.println(a);
            a++;
        }
        System.out.println("===========");
        do{
            System.out.println(a);
            a++;
        }while(a<0);
    }
}

image-20220725192316928

4.3For迴圈

for迴圈語句是支持迭代的一種通用結構,是最有效,最靈活的迴圈結構

for迴圈執行的次數是在執行前就確定的。

語法:

for(初始化;布爾表達式;更新){
    //代碼語句
}

例子:while和for迴圈對比

package li.bolog.struct;

public class ForDemo01 {
    public static void main(String[] args) {
        int a = 1;//初始化條件
        while(a<=100){//條件判斷
            System.out.print(a+" ");//迴圈體
            a+=8;//迭代
        }
        System.out.println("while迴圈結束!");

        //初始化  //條件判斷  //迭代
        for(int i=1;i<=100;i=i+8){
            System.out.print(i+" ");
        }
        System.out.println("for迴圈結束!");
    }
}

image-20220725193235748

關於for迴圈有以下幾點說明

最先執行的初始化步驟可以聲明一種變數,也可初始化一個或者多個迴圈控制變數,也可以是空語句

然後執行檢測布爾表達式的值,如果為true,迴圈體執行;如果為false,迴圈終止,開始執行迴圈體後面的語句

執行一次迴圈後,更新迴圈控制變數(迭代因數控制迴圈變數的增減)

再次檢測布爾表達式。迴圈執行上面的過程

練習1:分別計算0到100之間奇數和、偶數和

package li.bolog.struct;

public class ForDemo02 {
    public static void main(String[] args) {
        //分別計算0到100之間奇數和、偶數和
         int oddSum=0;
         int evenSum=0;

         for (int i=0;i<=100;i++){
             if(i%2!=0){
                 oddSum=oddSum+i;
             }
             else {
                 evenSum=evenSum+i;
             }
         }

        System.out.println("奇數的和:"+oddSum);
        System.out.println("偶數的和:"+evenSum);

    }
}

image-20220725194945779

練習2:用while或for迴圈輸出1-1000之間能被5整除的數,並且每行輸出3個

package li.bolog.struct;

public class ForDemo03 {
    public static void main(String[] args) {
        //用while或for迴圈輸出1-1000之間能被5整除的數,並且每行輸出3個

        for (int i=1;i<=1000;i++){
            if(i%5==0){
                System.out.print(i+"\t");
            }
            if(i%(5*3)==0){//每行輸出的第三個值都是15的倍數,因此除以15
                System.out.println();//或者System.out.println("\n");
            }
        }
    }
}

image-20220725195734188

image-20220725195745692

練習3:列印九九乘法表

package li.bolog.struct;

public class ForDemo04 {
    public static void main(String[] args) {
        //我們先列印第一列
        //我們先把固定的j用一個迴圈包起來
        //去掉重覆項,j<=i
        //調整樣式
        for(int i=1;i<=9;i++){
            for (int j=1;j<=i;j++){
                System.out.print(i+"*"+j+"="+(i*j)+"\t");
            }
            System.out.println();
        }
    }
}

image-20220725200751272

 

增強for迴圈:

Java5引入了一種主要用於數組或者集合的增強型for迴圈

Java增強for迴圈語法格式如下:

for(聲明語句:表達式){
    //代碼句子
}

聲明語句:聲明新的局部變數,該變數的類型必須和數組元素的類型匹配。其作用域限定在迴圈語句塊,其值與此時數組元素的值相等

表達式:表達式是要訪問的數組名,或者是返回值為數組的方法

package li.bolog.struct;

public class ForDemo05 {
    public static void main(String[] args) {
        int[] number={10,20,30,40};//定義了一個數組

        for(int i=0;i<4;i++){
            System.out.println(number[i]);
        }
        System.out.println("=========");
        //遍曆數組元素
        for(int x:number){
            System.out.println(x);
        }

    }
}

image-20220725201603261

 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.創建虛擬環境 conda create --name yourEnv python=3.6 --name:也可以縮寫為 【-n】 yourEnv:是新創建的虛擬環境的名字,創建完,可以裝anaconda的目錄下找到envs/環境名 目錄 python=3.6:是python的版本號。也可以指定為 ...
  • JavaWeb 多個Servlet整合優化 由於一個Servlet只能接收一個地址的http請求,如果系統複雜度提高,就會有很多Servlet類。例如,對銷售系統來說,可能會有OederInsertServlet, OrderUpdateServlet, OrderDeleteSerlvet, Or ...
  • Spring Data JPA是Spring Data的子模塊。使用Spring Data,使得基於“repositories”概念的JPA實現更簡單和容易。Spring Data JPA的目標是大大簡化數據訪問層代碼的編碼。作為使用者,我們只需要編寫自己的repository介面,介面中包含一些個 ...
  • python3.9安裝pyqt,並設置pycharm 前言 這個學期的暑假實訓需要使用pyqt開發gui界面,然後我的python不知道發生了什麼,安裝總是爆出各種奇怪的錯誤,安裝完後,開發和運行的過程中也發生了很多的離奇的問題,我浪費了很多的時間在解決各種報錯上,項目進度被耽誤了許多,幸運的是後來 ...
  • Java面向對象(八) 二十四、abstract 關鍵字 abstract 可以用來修飾的結構:類、方法。 abstract 修飾類:抽象類。 此類不能實例化。 抽象類中一定有構造器,便於子類實例化時調用。(涉及:子類對象實例化的全過程) 開發中,都會提供抽象類的子類,讓子類對象實例化,完成相關的操 ...
  • 上一講【RocketMQ】消息的拉取 消息消費 當RocketMQ進行消息消費的時候,是通過ConsumeMessageConcurrentlyService的submitConsumeRequest方法,將消息提交到線程池中進行消費,具體的處理邏輯如下: 如果本次消息的個數小於等於批量消費的大小c ...
  • 遇到問題和需求 我的電腦環境:先安裝py2再安裝py3,平時我工作中是使用python2,如何保證兩個版本共存且讓代碼來選擇要使用的版本。 遇到問題 在cmd中輸入python,進入的是py2的環境,但是通過pip install模塊是安裝到了python3目錄下 需求 工作中使用pytho2,在學 ...
  • 一、Http 1.什麼事Http Http(超文本傳輸協議)是一個簡單的請求-響應協議,它通常運行在TCP之上 文本:html,字元串,~.. 超文本:圖片,音樂,視屏,定位,地圖... 埠為80 Https:安全的,埠號443 2.兩個時代 http1.0 HTTP/1.0:客戶端可以與web ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...