java流程控制 _ 2 _結構__順序、選擇、循環
順序結構
- java的基本結構就是順序結構,除非特别說明,否則就按照順序一句一句地執行。
- 順序結構是最簡單的算法結構
-
語句與語句之間,框與框之間是按照從上而下的順序進行的,它是由若幹個依次執行的處理步驟組成的,
它是任何一個算法都離不開的一種基本算法結構

選擇結構
if單選擇結構
- 我們很多時候需要去判斷一個東西是否可行,然後我們才去執行,這樣一個過程在程式中用if語句來表示。
- 文法:
if(布爾表達式){
//如果布爾表達式為true将執行的語句
}
package com.wlw.struct;
import java.util.Scanner;
public class IfDemo01 {
public static void main(String[] args) {
//if單選擇結構
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();
}
}
if雙選擇結構
- 對于一個需求用一個if搞不定,我們需要兩個判斷,需要一個雙選擇結構,是以就有了if-else結構
- 文法:
if(布爾表達式){
//如果布爾表達式為true将執行的語句
}else{
//如果布爾表達式為false将執行的語句
}
package com.wlw.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();
}
}
if多選擇結構
- 對于一個需求,有很多種選擇,需要一個多選擇結構
- 文法:
if(布爾表達式1){
//如果布爾表達式1為true将執行的語句
}else if(布爾表達式2){
//如果布爾表達式2為true将執行的語句
}else if(布爾表達式3){
//如果布爾表達式3為true将執行的語句
}else{
//如果以上語句全為false将執行的語句
}
package com.wlw.struct;
import java.util.Scanner;
public class IfDemo03 {
public static void main(String[] args) {
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();
}
}
嵌套if結構
- 使用嵌套的if…else語句是合法的。也就是說你可以在另一個if或者else if語句中使用if或者else if語句.你可以像if語句一樣嵌套else if…else.
- 文法:
if(布爾表達式1){
//如果布爾表達式1為true将執行的語句
if(布爾表達式2){
//如果布爾表達式2為true将執行的語句
}
}
switch多選擇結構
- 對于多選擇結構,還有一種方式是switch case語句
- switch語句判斷一個變量和一系列值中某個值是否相等,每個值稱為一個分支。
- switch語句中的變量類型可以是:byte、short、int、char、String(從javaSE7開始)
- case标簽必須是字元串常量 或 字面量。case具有***穿透*** 現象:如果case語句裡面沒有break;當比對到對應的value時,它也會把下面的case語句也輸出,直到最終結束,或遇到break;。(是以每一個case語句都要加上break;)
- 文法:
switch(expression){
case value:
//語句
break;//可選(但最好加上)
case value:
//語句
break;//可選(但最好加上)
//可以有任意數量的case語句
default://可選
//語句
}
package com.wlw.struct;
public class SwitchDemo01 {
public static void main(String[] args) {
//case穿透 switch 就是比對一個具體的值
char grade = 'B';
switch (grade){
case 'A':
System.out.println("優秀");
break;
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("及格");
break;
case 'D':
System.out.println("再接再勵");
break;
default:
System.out.println("未知等級");
}
}
}
package com.wlw.struct;
public class SwitchDemo02 {
public static void main(String[] args) {
String name = "大海";
// jdk7 新特性,表達式結構支援字元串!!!
//字元串的本質還是數字
//反編譯: 我們寫的 java檔案 -----經編譯----> class檔案(位元組碼檔案,直接檢視是亂碼)
//反編譯就是 将 class檔案(位元組碼檔案)-----反編譯---->我們能看懂的檔案(IDEA可以實作)
/*過程:
1.找到我們所寫檔案的class檔案的存放位址
2.從檔案夾的層面直接将我們要檢視的class檔案複制到我們項目的目錄下
3.輕按兩下檢視
*/
switch (name){
case "大海":
System.out.println("大海");
break;
case "陸地":
System.out.println("陸地");
break;
default:
System.out.println("What are you 弄啥嘞");
}
}
}
反編譯
我們寫的 java檔案 -----經編譯----> class檔案(位元組碼檔案,直接檢視是亂碼)
反編譯就是 将 class檔案(位元組碼檔案)-----反編譯---->我們能看懂的檔案(IDEA可以實作)
過程:
1. 找到我們所寫檔案的class檔案的存放位址
2.從檔案夾的層面直接将我們要檢視的class檔案複制到我們項目的目錄下
3.輕按兩下檢視
循環結構
while循環
- 結構
while(布爾表達式){
//循環内容
}
- 隻要布爾表達式為true,循環就會一直執行下去。
- 我們大多數情況是會讓循環停止下來的,我們需要一個讓 表達式失效 的方式來結束循環。
- 少部分情況需要循環一直執行, 比如伺服器的請求響應監聽等。
- 循環條件一直為true就會造成無限循環[死循環] ,我們正常的業務程式設計中應該盡量避免死循環。會影響程式性能或者造成程式卡死奔潰!
- 思考:計算1 +2+3+…+100=?
package com.wlw.struct;
public class WhileDemo01 {
public static void main(String[] args) {
//輸出1~100
int i = 0;
while (i < 100){
i++;
System.out.println(i);
}
}
}
package com.wlw.struct;
public class WhileDemo02 {
public static void main(String[] args) {
//死循環
while (true){
//等待客戶連接配接
//定時檢查
//.......
}
}
}
package com.wlw.struct;
public class WhileDemo03 {
public static void main(String[] args) {
//思考:計算1 +2+3+...+100=?
int i = 0;
int sum = 0;
while (i < 100){
i++;
sum = sum + i;
}
/* while (i <= 100){
sum = sum + i;
i++;
}*/
System.out.println(sum);
}
}
do…while循環
- 結構:
do{
//代碼語句
}while(布爾表達式);
- 對于while語句而言,如果不滿足條件,則不能進入循環。但有時我們需要即使不滿足條件,也要至少執行一次
- do…while循環與while循環相似,不同的是do…while循環至少會執行一次
- do…while循環與while循環的差別:
-
while 是先判斷後執行,do…while是先執行後判斷
2.do…while總是保證循環體至少會被執行一次!,這是主要差別
package com.wlw.struct;
public class DoWhileDemo01 {
public static void main(String[] args) {
//思考:計算1 +2+3+...+100=?
int i = 0;
int sum = 0;
/* do {
i++;
sum = sum + i;
}while (i < 100);
*/
do {
sum = sum + i;
i++;
}while (i <= 100);
System.out.println(sum);
}
}
package com.wlw.struct;
public class DoWhileDemo02 {
public static void main(String[] args) {
// while do...while
int a = 0;
while (a < 0){
System.out.println(a); //不會執行
a++; //不會執行
}
System.out.println("======================="); //執行
do {
System.out.println(a); // 輸出 0
a++;
}while (a < 0);
}
}
for循環*
- 結構:
for(初始值 ; 布爾表達式 ; 更新){
//代碼語句(循環體)
}
- 雖然所有循環結構都可以用while或者do…while表示,但Java提供了另一種語句一for循環,使一些循環結構變得更加簡單。
- for循環語句是支援疊代的一種通用結構,是最有效、最靈活的循環結構。
- for循環執行的次數是在執行前就确定的。文法格式如上:
package com.wlw.struct;
public class ForDemo01 {
public static void main(String[] args) {
int a = 1;//初始化條件
while (a <= 100){ //條件判斷
System.out.println(a);//循環體
a += 2; //疊代
}
System.out.println("while 循環結束!");
//所有的for循環都能用while來代替,但是for循環更高效
// 初始化 //條件判斷 //疊代
for (int i = 0 ; i <= 100 ; i++){
System.out.println(i);//循環體
}
System.out.println("for 循環結束!");
/*關于for循環有以下幾點說明:
最先執行初始化步驟(int i = 0)。可以聲明一種類型,但可初始化一個或多個留環控制變量,也可以是空語句。
然後,檢測布爾表達式(i <= 100)的值。如果為true,循環體被執行。
如果為false, 循環終止,開始執行着循環體後面的語句。
執行一次循環後,更新循環控制變量(i++)(疊代因子控制循環變量的增減)
再次檢測布爾表達式。循環執行上面的過程。
*/
//死循環
for (;;){
}
}
}
package com.wlw.struct;
public class FoeDemo02 {
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){ //偶數
evenSum += i; // evenSum = evenSum + i;
}else {
oddSum += i; //oddSum = oddSum + i;
}
}
System.out.println("偶數和evenSum:"+evenSum);
System.out.println("奇數和oddSum:"+oddSum);
}
}
package com.wlw.struct;
public class FoeDemo03 {
public static void main(String[] args) {
//用 while 或for循環輸出 1~ 1000 之間能被5整除的數,并且每行輸出三個
for (int i = 1; i <= 1000; i++) {
if(i % 5 == 0){
System.out.print(i + "\t");
}
if(i % (5*3) == 0){//換行
System.out.println();
//System.out.print("\n");
}
}
}
}
package com.wlw.struct;
public class ForDemo04 {
public static void main(String[] args) {
//列印九九乘法表
//1.先列印 1 開頭的 (即第一列)
//2.外面套一個循環 把其他幾列也列印出來(此時每一列都有九行)
//3.去掉重複的 i <= 9 ----> i <= j
//4.将j 與 i 的位置互換,這樣輸出結果看起來更順 (i 是代表第一個數 j是代表第二個數)
// 并增加換行語句
for (int j = 1; j <= 9; j++) {
for (int i = 1; i <= j; i++) {
//System.out.print(j+ "*" + i + "="+ (j*i) + "\t");
System.out.print(i + "*" + j + "="+ (i*j) + "\t");
}
System.out.println();//這一行列印結束,換行
}
}
}
增強for循環
- 結構
for(聲明語句 : 表達式){
//代碼句子
}
- 先做個了解,之後數組重點使用
- Java5 引入了一種主要用于數組或集合的增強型for循環。
- 聲明語句:聲明新的局部變量,該變量的類型必須和數組元素的類型比對。其作用域限定在循環語句塊,其值與此時數組元素的值相等。
- 表達式:表達式是要通路的數組名,或者是傳回值為數組的方法。
package com.wlw.struct;
public class ForDemo05 {
public static void main(String[] args) {
int[] numbers = {10,20,30,40,50};
//增強for循環 就是周遊數組的元素
for(int x : numbers){
System.out.println(x);
}
System.out.println("================");
for(int i = 0; i < numbers.length; i++){
System.out.println(numbers[i]);
}
}
}