流程控制
參考資料:《Java從入門到精通》/明日科技編著. 4版. 北京:清華大學出版社,2016
一、復合語句
Java的復合語句由“{”開始,“}”結束,又稱為塊語句。
復合語句都是由上至下被執行;
復合語句中可以嵌套復合語句。
public class Compound {
public static void main(String[] args) {
int x = 20;
{
int y = 35;
System.out.println(y);
{
boolean c = true;
System.out.println(c);
}
}
String string = "hello";
System.out.println(string);
//System.out.println(y); //錯誤代碼,在作用域之外使用變量y
}
}
復合語句為局部變量創造了一個作用域,在作用域中定義的變量只能在作用域中被使用。如果在某個變量的作用域之外使用該變量,則會發生錯誤。
二、條件語句
1、if條件語句
if條件語句是一個重要的編程語句,用于告訴程序在某個條件成立的情況下執行某段語句,而在另一個情況下執行另外的語句。if條件語句分為三種,如下所示:
(1)簡單的if條件語句
if(布爾表達式){
語句序列
}
布爾表達式:必要參數,表達式必須返回一個boolean值。
語句序列:非必要參數,可以是一條或者多條,甚至0條都可以。當布爾表達式的值為true時,執行這些語句。
public class Getif {
public static void main(String[] args) {
int a = 10;
if(a == 10){
System.out.println(a);
}
}
}
注意:當語句序列只有一條時,可以省略“{}”。
int a = 10;
if(a == 10)
System.out.println(a);
(2)if...else語句
if(布爾表達式){
語句序列1
}
else{
語句序列2
}
if后面的布爾表達式的值為true,則執行語句序列1;
if后面的布爾表達式的值為false,則執行語句序列2。
public class Getif {
public static void main(String[] args) {
int a = 80;
if(a > 60){
System.out.println("Pass");
}
else {
System.out.println("Fail");
}
}
}
(3)if...else if多分支語句
if(布爾表達式1){
語句序列1
}
else if(布爾表達式2){
語句序列2
}
...
else if(布爾表達式n){
語句序列n
}
else{
語句序列n+1
}
可以對多種情況進行處理,甚至任意種情況。
只執行其中表達式為true的語句,其他語句不執行。
所有表達式都為false,則輸出else后面的語句。
public class GetSource {
public static void main(String[] args) {
int a = 55;
if(a > 90){
System.out.println("優秀");
}
else if(a > 80){
System.out.println("良好");
}
else if(a > 70){
System.out.println("中等");
}
else if(a > 60){
System.out.println("及格");
}
else {
System.out.println("不及格"); //輸出不及格
}
}
}
2、switch多分支語句
在java語言中,可以使用switch語句將所有情況組織起來,以一個簡單明了的方式來實現“多選一”的選擇。
swicth(表達式){
case 常量1 :
語句塊1
break;
case 常量2 :
語句塊2
break;
...
case 常量n :
語句塊n
break;
defaults:
語句塊n+1
break;
}
其中,表達式必須是整型、字符型或字符串類型。對應的,常量也必須是整型、字符型或字符串類型。
如果表達式的值和某個case后面的常量值相同,則執行該case語句后面的若干語句,直到遇到break語句為止。
如果表達式沒有匹配到常量,則執行defaults后面的語句。
可以沒有defaults,沒有匹配到的話,switch則不作處理。
public class Demo1 {
public static void main(String[] args) {
String a = "hello";
switch (a){
case "hello1" :
System.out.println("hi");
break;
case "nihao" :
System.out.println("nihao");
break;
case "hello" :
System.out.println("yes,you are right");
break;
default:
System.out.println("sorry");
break;
}
}
}
注意:
在同一個switch語句,case的常量值必須互不相同。
case語句后面的常量表達式的值可以為整數,但絕不可為實數。例如,下面的代碼不合法的:
case 2.1 //代碼錯誤
三、循環語句
循環語句就是在滿足一定的條件下,反復執行某一個操作。在Java中提供了三種常用的循環語句,分別是while循環語句、do...while循環語句和for循環語句。
1、while循環語句
while語句也稱條件判斷語句,它的循環方式為利用一個條件來控制是否要繼續執行這個語句。
while(表達式){
執行語句
}
當表達式的返回值為true時,執行{}中的語句;
執行完{}中的語句后,重新判斷表達式的返回值;
當表達式的返回值為false時,退出循環。
public class Demo2 {
public static void main(String[] args) {
int x = 1;
int sum = 0;
while (x <= 10){
sum = sum + x;
x++;
}
System.out.println(sum);
}
}
2、do...while循環
while循環先判表達式是否成立,然后執行循環體,而do...while循環先執行一次循環后,再判斷表達式是否成立。也就是說do...while循環的循環體語句至少被執行一次。
do{
執行語句
}
while(表達式); //這里有個分號,千萬別忘了
do...while循環和while循環還有一個明顯的差別,就是do...while循環在結尾多了一個分號。
public class Gess {
public static void main(String[] args) {
int a = 10;
do {
System.out.println("hello world");
a--;
} while(a > 6); //輸出4次hello world
}
}
3、for循環語句
for循環用來重復執行循環體,直到某個條件得到滿足后中止循環。
(1)for循環語句
for(表達式1;表達式2;表達式3){
語句序列
}
表達式1:初始化表達式,負責完成變量的初始化。
表達式2:條件表達式,返回值為boolean型的表達式,指定循環條件。
表達式3:循環的操作表達式,負責修整變量,改變循環條件。
public class Demo2 {
public static void main(String[] args) {
int sum = 0;
for (int i=2;i<=100;i+=2){
sum = sum + i;
System.out.println(sum); //計算2~100之間所有偶數之和
}
}
}
(2)foreach語句
foreach語句是for語句的特殊簡化版,不能完全取代for語句,但是任何foreach語句都能改寫成佛如語句版本。foreach不是一個關鍵字。
for(元素變量x : 遍歷對象obj){
引用了x變量的Java語句;
}
foreach語句中的元素變量x,不必對其進行初化。
public class Demo2 {
public static void main(String[] args) {
int arr[] = {2,4,6};
for(int x : arr){ //遍歷數組
System.out.println(x);
}
}
}
四、循環控制
循環控制包含兩個方面的內容,一方面是控制循環變量的變化方式,另一方面是控制循環的跳轉。控制循環的跳轉需要用到break和continue兩個關鍵詞,break是中斷循環,continue是執行下一次循環。
1、break語句
使用break語句可以跳出switch結構,在循環中,同樣可以使用break語句跳出當前循環體,從而中斷當前循環。
public class BreakTest {
public static void main(String[] args) {
for(int i=0;i<=100;i++){
System.out.println(i);
if(i == 10){
System.out.println("循環終止");
break; //中斷循環
}
}
}
}
注意:如果遇到循環嵌套的情況,break只會跳出包含它的最內層循環,也就是說只跳出一層循環。
public class BreakNest {
public static void main(String[] args) {
for(int i=0;i<3;i++){
for(int j=0;j<10;j++){
System.out.println("i=" + i + " j=" + j);
if(j == 4){
break;
}
}
}
}
}
//break語句中斷了內層循環,但是并沒有影響外層循環。
輸出結果:
i=0 j=0
i=0 j=1
i=0 j=2
i=0 j=3
i=0 j=4
i=1 j=0
i=1 j=1
i=1 j=2
i=1 j=3
i=1 j=4
i=2 j=0
i=2 j=1
i=2 j=2
i=2 j=3
i=2 j=4
如果想讓break跳出外層循環,Java提供了“標簽”功能,如下:
標簽名:循環體{
break 標簽名;
}
public class BreakNest {
public static void main(String[] args) {
Loop:for(int i=0;i<3;i++){ //給外層循環添加標簽
for(int j=0;j<10;j++){
System.out.println("i=" + i + " j=" + j);
if(j == 4){
break Loop;
}
}
}
}
}
//用帶有標簽的break跳出外層循環
輸出結果:
i=0 j=0
i=0 j=1
i=0 j=2
i=0 j=3
i=0 j=4 //當j變量的值等于4時,i的值沒有增加,直接結束外層循環。
2、continue語句
continue語句是針對break語句的補充,contiune語句不是立即中止循環體,而是結束本次循環,回到循環的條件判斷語句,重新開始執行循環。
在for循環語句中,循環體中遇到continue語句后,先執行循環的增量部分,然后進行條件判斷。
在while和do...while循環語句中,遇到continue語句則直接回到條件判斷部分。
public class ContinueTest {
public static void main(String[] args) {
for(int i=1;i<=20;i++){
if(i%2 == 0 ){ //判斷i是否為偶數
continue; //先執行i++,然后跳到下一次循環
}
System.out.println(i); //輸出1~20之間的奇數
}
}
}
與break一樣,continue也支持標簽的功能,使得可以指定continue語句跳出指定的循環體。如下所示:
標簽名:循環體{
continue 標簽名;
}
五、課后實踐
1、編寫Java程序,使用for循環打印菱形。
public class Out{
public static void main(String[] args) {
//設置菱形的大小
int size = 5;
//菱形的上半部分
for(int i = 1;i <= size; i++) {
for (int j = 1; j <= size - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= i * 2 - 1; k++) {
System.out.print("*");
}
System.out.println(); //起換行作用
}
//菱形的下半部分
for(int i = 1; i <= size -1; i++){
for(int j = 1; j <= i; j++){
System.out.print(" ");
}
for(int k=1; k <= 2 * (size -i) -1; k++){
System.out.print("*");
}
System.out.println(); //起換行作用
}
}
}
輸出結果如下所示:
*
***
*****
*******
*********
*******
*****
***
*
注意:
System.out.print()輸出不換行;
System.out.println()輸出自動換行。
for(int x=1; x<=5; x++){
System.out.print("*");
}
輸出結果:
*****
for(int x=1; x<=5; x++){
System.out.println("*"); //自動換行
}
輸出結果:
*
*
*
*
*
2、打印一個空心菱形。
public class out{
public static void main(String[] args) {
//設置菱形的大小
int size = 5;
//菱形的上半部分
for(int i = 1;i <= size; i++) {
for (int j = 1; j <= size - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= i * 2 - 1; k++) {
//if語句判斷“*”號是否位于開頭或結束,若不是則輸出空格
if(k == 1 || k == i * 2 - 1){
System.out.print("*");
}
else {
System.out.print(" ");
}
}
System.out.println();
}
//菱形的下半部分
for(int i = 1; i <= size -1; i++){
for(int j = 1; j <= i; j++){
System.out.print(" ");
}
for(int k=1; k <= 2 * (size -i) -1; k++){
//if語句判斷“*”號是否位于開頭或結束,若不是則輸出空格
if(k == 1 || k == 2 * (size -i) -1){
System.out.print("*");
}
else {
System.out.print(" ");
}
}
System.out.println();
}
}
}
輸出結果如下:
*
* *
* *
* *
* *
* *
* *
* *
*
標簽:語句,03,Java,int,流程,循環,public,表達式,out
來源: https://www.cnblogs.com/xuliang-daydayup/p/12900880.html