1. 程式人生 > 其它 >1-002-Java流程控制筆記

1-002-Java流程控制筆記

Java流程控制筆記

使用者互動Scanner

java.util.Scanner是Java5的新特徵,可以通過Scanner類來獲取使用者的輸入

基本語法:

Scanner s = new Scanner(System.in)

通過Scanner類的next()和nextLine()方法獲取輸入的字串,在讀取前一般需要使用hasNext()和hasNextLine()判斷是否還有輸入的資料

next():

package com.king.scanner;

import java.util.Scanner;

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

//建立一個掃描器物件,用於接收鍵盤資料
Scanner scanner = new Scanner(System.in);

System.out.println("使用next方式接收:");

//判斷使用者有無輸入字串
if(scanner.hasNext()){
//使用next方式接收
String str = scanner.next();//程式會等待使用者輸入完畢
System.out.println("輸入的內容為"+str);
}

//凡是屬於IO流的類如果不關會一直佔用資源,要養成用完就關的習慣
scanner.close();

}
}

輸入hello world!輸出為hello

nextLine():

package com.king.scanner;

import java.util.Scanner;

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

//從鍵盤接收資料
System.out.println("使用nextLine方式接收:");

//判斷是否還有輸入
if (scanner.hasNextLine()){
String str = scanner.nextLine();
System.out.println("輸出的內容為"+str);

}

scanner.close();
}
}

輸入hello world!輸出為hello world!

  • next():

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

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

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

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

  • nextLine()

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

    2. 可以獲得空白

不判斷直接讀取:

package com.king.scanner;

import java.util.Scanner;

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

//從鍵盤接收資料
System.out.println("使用nextLine方式接收:");

String str = scanner.nextLine();

System.out.println("輸出的內容為"+str);

scanner.close();
}
}

案例:

輸入多個數字,求其總和和平均數,每輸入一個數字用回車確認,通過輸入非數字來結束輸入並輸出執行結果

package com.king.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;

//通過迴圈判斷是否還有輸入,並在裡面對每一次進行求和和統計
while (scanner.hasNextDouble()){
double x = scanner.nextDouble();
m = m + 1;//m++;
sum = sum + x;
System.out.println("你輸入了第" + m + "個數據,當前結果sum=" + sum);
}

System.out.println(m + "個數的和為:" + sum);
System.out.println(m + "個數的平均值為" + (sum / m));

}
}

順序結構

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

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

由若干個依次執行的處理步驟組成,它是任何一個演算法都離不開的基本演算法結構

選擇結構

if單選擇結構

if(布林表示式){
//如果布林表示式true將執行的語句
}

if雙選擇結構

if(布林表示式){
//如果布林表示式true將執行的語句
}else{
//如果布林表示式false將執行的語句
}

if多選擇結構

if(布林表示式 1){
//如果布林表示式 1 true將執行的語句
}else if(布林表示式 2){
//如果布林表示式 2 true將執行的語句
}else if(布林表示式 3){
//如果布林表示式 3 true將執行的語句
}else{
//如果以上布林表示式都不為true將執行的語句
}

巢狀的if結構

if(布林表示式 1){
    //如果布林表示式 1true將執行的語句
    if(布林表示式 2){
    //如果布林表示式 2 true將執行的語句
	}
}

switch多選擇結構

switch(expression){
    case value : 
        //語句
        break;//可選
    case value :
        //語句
        break;//可選
    case value :
        //語句
        break;//可選
    default : //可選
        //語句
}
  • switch語句中的變數型別可以是:byte、short、int或者char

  • 從Java SE 7開始switch支援字串String型別,同時case標籤必須為字串常量或者字面量

case穿透現象

switch(expression){
    case value : 
        //語句
        break;//可選
    case value :
        //語句
        break;//可選
    case value :
        //語句
        break;//可選
    default : //可選
        //語句
}
//case穿透現象是如果沒有break則相應case語句執行後後面case語句會繼續執行
例:
package com.king.struct;

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

        switch (grade){
            case 'A' :
                System.out.println("優秀");
                break;
            case 'B' :
                System.out.println("良好");
            case 'C' :
                System.out.println("及格");
            case 'D' :
                System.out.println("再接再厲");
            case 'E' :
                System.out.println("掛科");
                default :
                    System.out.println("未知等級");
        }
    }
}
/*由於case穿透現象
執行結果為:
及格
再接再厲
掛科
未知等級
如果case 'D' :
   	System.out.println("再接再厲");
   	break;
其他不變
則輸出結果為:
及格
再接再厲
*/

新特性String型別

public class SwitchDemo {
    public static void main(String[] args) {
        String name = "三天";

        switch (name){
            case "三日":
                System.out.println("三日");
                break;
            case  "三天":
                System.out.println("三天");
                break;
                default:
                    System.out.println("弄啥嘞!");
                    break;
        }
    }
}
//字元的本質還是數字
//反編譯   java---class(位元組碼檔案)---反編譯(IDEA)

迴圈結構

while 迴圈

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

  • 大多數情況是會讓迴圈停止下來,需要一個讓表示式失效的方式來結束迴圈

  • 少部分情況需要迴圈一直執行,比如伺服器的請求響應監聽等

  • 迴圈條件一直為true會造成無限迴圈【死迴圈】,應避免死迴圈

例:計算1+2+3+...+100=?

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

        int i = 0;
        int sum = 0;

        while (i <= 100){
            sum = sum + i;
            i++;
        }

        System.out.println(sum);

    }
}

do...while 迴圈

do{
    //迴圈內容
}while(布林表示式);

while與do...while區別:

  • while先判斷後執行,do...while先執行後判斷

  • do... while總能保證迴圈體會至少執行一次

【重要】for迴圈

for(初始化;布林表示式;更新){
    //程式碼語句
}
  • for迴圈結構是支援迭代的一種通用結構,是最有效最靈活的迴圈結構

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

IDEA快捷生成for迴圈

//100.for可以在IDEA中快捷生成:
		for (int i = 0; i < 100; i++) {
            
        }

計算0到100之間的奇數和偶數的和

package com.king.struct;

public class ForDemo {
    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 += i;
            }else{
                evenSum += i;
            }
        }
        
        System.out.println("奇數的和:"+oddSum);
        System.out.println("偶數的和:"+evenSum);

    }
}

輸出1-1000之間能被5整除的數,並且每行輸出3個

package com.king.struct;

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

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

        //println 輸出完會換行
        //print 輸出完不會換行

    }
}

列印九九乘法表

package com.king.struct;

public class ForDemo {
    public static void main(String[] args) {
        //列印九九乘法表

        for (int j = 1; j <= 9; j++) {
            for (int i = 1;i <= j; i++){
                System.out.print(j+"*"+i+"="+(j*i) + "\t");
            }
            System.out.println();
        }
        
    }
}
/*輸出結果:
1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81
*/

增強型for迴圈

for(宣告語句:表示式){
    //程式碼句子
}

示例:

package com.king.struct;

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

        int[] numbers = {10,20,30,40,50};//定義了一個數組

        for (int i = 0; i < 5; i++) {
            System.out.println(numbers[i]);
        }

        System.out.println("===================================");

        //遍歷陣列的元素,輸出結果
        for(int x:numbers){
            System.out.println(x);
        }

    }
}

break continue

  • break在任何迴圈語句的主體部分,均可用break控制迴圈的流程。break用於強行退出迴圈,不執行迴圈中剩餘語句。(break語句也可在switch語句中使用)

  • continue語句在迴圈語句體中,用於終止某次迴圈過程,即跳過迴圈體中尚未執行的語句,接著進行下一次是否執行迴圈的判定。

  • goto關鍵字

    標籤是指後面跟一個:的識別符號,例如:lable:

    //求101~150之間所有質數
    
    outer:for(int i = 101;i < 150;i++){
        for(int j = 2;j<i/2;j++){
            if(i % j == 0){
                continue outer;
            }
        }
        System.out.print(i+" ");
    }
    

流控制列印三角形

//列印三角形 5行
package com.king.struct;

public class TestDemo {
    public static void main(String[] args) {
        //列印三角形  5行

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

    }
}
/*輸出結果:
     *
    ***
   *****
  *******
 *********

*/