Java學習筆記3(語句)

3.2語句概述

Java裏的語句可以分爲以下6類。
1.方法調用語句,如:
System.out.println(“Hello”);
2.表達式語句,即表達式尾加上分號。如:
x=23;
3.複合語句,可以用{}把一些語句括起來構成複合語句,例如:
{z=123+x;
System.out.println(“Hello”);
4.一個分號也是一條語句,稱作空語句。
5.控制語句,控制語句分爲分支語句,開關語句和循環語句。將在後面3.3~3.5講解
6.package語句和import 語句與類、對象有關,將在Java學習筆記4中講解。

3.3 if條件分支語句

3.3.1 if語句

if語句是單條件單分支語句,即根據一個條件來控制程序執行的流程。
if語句的語法格式:
if(表達式){
若干語句
}
需要注意的是,在if條件語句中,其中的複合語句中如果只有一條語句,{}可以省略不寫,但爲了增強程序的可讀性最好不要省略(這是一個很好的編程風格)
在下面的例子2中,將變量a、b、c的數值按大小順序進行互換(從小到大排列)
例子2:
Example3_2.java
package example3_2;

public class Example3_2 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	int a = 9,b = 5,c = 7, t = 0;
	if(b<a) {
		t=a;
		a=b;
		b=t;
	}
	if(c<a) {
		t=c;
		c=a;
		a=t;
	}
	if(c<b) {
		t=c;
		c=b;
		b=t;
	}
	System.out.println("a="+a+",b="+b+",c="+c);
}

}

3.3.2 if-else語句

if-else語句是單條件多分支語句,即根據一個條件來控制程序執行的流程。
if-else語句的語法格式:
if(表達式){
若干語句
}
else{
若干語句
}
例如下面便是有語法錯誤的if-else語句。
if(x>0)
y=10;
z=20;
else
y=-100;
正確的寫法應該是:
if(x>0)
{y=10;
z=20;
}
else
y=-100;
需要注意的是,在if-else語句中,其中的複合語句中如果只有一條語句,{}可以省略不寫,單未來增強程序的可讀性最好不要省略(這是一個很好的編程風格)。
例子3中有兩條if-else語句,其作用是根據成績輸出相應的信息,運行效果如圖所示:
在這裏插入圖片描述
Example 3_3.java
package example3_3;

public class Example3_3 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	int math = 65,english = 85;
	if(math>60) {
		System.out.println("數學及格了");
	}
	else {
		System.out.println("數學不及格");
	}
	if(english>90){
		System.out.println("英語是優");
	}
	else {
		System.out.println("英語不是優");
	}
	System.out.println("我在學習if-else語句");
}

}

3.3.3 if - else if - else語句

if - else if - else語句是多條件分支語句,即根據多個條件來控制程序執行的流程。
if - else if - else語句的語法格式:
if(表達式){
若干語句
}
else if(表達式){
若干語句
}

else{
若干語句
}
注意,if - else if - else語句中的else部分是可選項,如果沒有else部分,當所有表達式的值都爲false時,結束當前if - else if - else的執行(該語句什麼都不做)。
另括號可省略同上。這裏不再贅述。

3.4 switch開關語句

switch 語句是單條件多分支的開關語句,它的一般格式如下(其中break語句是可選的)。
格式如下:
switch(表達式)
{case 常量1:
若干個語句
break;
case 常量2:
若干個語句
break;

case 常量n:
若干個語句
break;
default:
若干語句
}
下面的例子4使用了switch語句判斷用戶從鍵盤輸入的正整數是否爲中獎號碼。
例子4:
Example 3_4.java
package example3_4;

import java.util.Scanner;

public class Example3_4 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	int number = 0;
	System.out.println("輸入正整數(回車確定)");
	Scanner reader = new Scanner(System.in);
	number = reader.nextInt();
	switch(number) {
	case 9:
	case 131:
	case 12:
		System.out.println(number+"是三等獎");
		break;
	case 209:
	case 596:
	case 27:
		System.out.println(number+"是二等獎");
		break;
	case 875:
	case 316:
	case 59:
		System.out.println(number+"是一等獎");
		break;
	default:
		System.out.println(number+"未中獎");
	}
}

}
需要強調的是,switch表達式中的值可以是byte,short,int, char型,單不可以是long型數據。如果將例子4中的
int number = 0;
更改爲
long number = 0;
將導致編譯錯誤。

3.5 循環語句

3.5.1 for循環語句

for語句的語法格式:
for(表達式1;表達式2;表達式3){
若干語句
}
下面的例子5計算8+88+888+8888+…的前12項和。
例子5
Example3_5.java
package example3_5;

public class Example3_5 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	long sum = 0,a = 8,item = a, n = 12,i = 1;
	for(i=1;i<=n;i++) {
		sum=sum+item;
		item=item*10+8;
	}
	System.out.println(sum);
}

}

3.5.2 while循環語句

while語句的語法表達式:
while(表達式){
若干語句
}

3.5.3 do-while循環語句

do-while 循環語法格式如下:
do{
若干語句
}while(表達式);
do-while循環和while循環的區別是do-while循環體至少被執行一次。
下面的例子6用while語句計算1+1/2!+1/3!+1/4!的前20項和。
例子6
Example3_6.java
package example3_6;

public class Example3_6 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	double sum = 0,item = 1;
	int i = 1,n = 20;
	while(i<=n) {
		sum = sum + item;
		i = i+1;
		item = item*(1.0/i);
	}
	System.out.println("sum="+sum);
}

}

3.6 break和continue語句

break和continue語句是用關鍵字break或continue加上分號構成的語句,
例如:
break;
在循環體中可以使用break語句和continue語句。在一個循環中,例如循環50次的循環語句中,如果在某次循環中執行了break語句,那麼整個循環語句結束。如果在某次循環中執行了continue語句,則本次循環結束,即不再執行本次循環中循環體中continue語句後面的語句,而進入下一次循環。
下面的例子7使用了break和continue語句。
例子7
Example3_7.java
package example3_7;

public class Example3_7 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	int sum = 0,i,j;
	for(i=1;i<=10;i++) {
		if(i%2 == 0) {//計算1+3+5+7+9
			continue;
		}
		sum = sum + i;
	}
	System.out.println("sum="+sum);
	for(j=2;j<=100;j++) {//求100以內的素數
		for(i=2;i<=j/2;i++) {
			if(j%i==0)
				break;
		}
	if(i>j/2) {
		System.out.println(""+j+"是素數");
		}
	}
}

}

3.7 for語句與數組

JDK 1.5對for語句的功能給予擴充、增強,以便更好地遍歷數組,語法格式如下:
for(聲明循環變量:數組的名字):{

}
其中,聲明的循環變量類型必須和數組的類型相同。這種形式的for語句類似自然語言中的"for each"語句,可以將這種形式的for語句翻譯成"對於循環變量依次取數組的每一個元素的值"。
下面的例子8分別使用for語句的傳統方式和改進方式遍歷數組。
例子8
Example3_8.java
package example3_8;

public class Example3_8 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	int a[] = {1,2,3,4};
	char b[] = {'a','b','c','d'};
	for(int n=0;n<a.length;n++) {//傳統方式
		System.out.println(a[n]);
	}
	for(int n=0;n<b.length;n++) {//傳統方式
		System.out.println(b[n]);
	}
	for(int i:a) {//循環變量i依次取數組a的每一個元素的值(改進方式)
		System.out.println(i);
	}
	for(char ch:b) {
		System.out.println(ch);
	}
}

}
需要特別注意的是:for(聲明循環變量:數組的名字)中的“聲明循環變量”必須是變量聲明,不可以使用已經聲明過的變量。例如,上述例子8中第三個for語句不可以如下分開寫成一條變量聲明和一條for語句:
int i = 0;
for(i:a){
System.out.println(i);
}

3.8 應用舉例

在2.4節介紹了Scanner類,可以使用該類創建一個對象,
Scanner reader = new Scanner(System.in);
然後reader對象調用下列方法,讀取用戶在命令行輸入的各種基本類型的數據。
nextBoolean(),nextByte(),nextShort(),nextInt(),nextLong(),nexFloat(),nextDouble().
上述方法執行時都會阻塞,等待用戶在命令行輸入數據回車確認。例如,如果用戶在鍵盤輸入一個byte取值範圍內的整數89,那麼reader對象調用hasNextByte(),hasNextInt(),hasNextLong(),hasNextDouble()返回的值都是true,但是,需要注意的是,如果用戶在鍵盤輸入呆小數點的數字,例如12.21那麼reader對象調用hasNextDouble返回的值是true,而調用hasNextByte(),hasNextInt()以及hasNextLong()返回的值都是false。
在鍵盤輸入數據時,經常讓reader對象先調用hasNextXXX()方法等待用戶在鍵盤輸入數據,然後再調用nextXXX()方法獲取用戶輸入的數據。
在下面的例子9中,用戶在鍵盤輸入若干個數字,每輸入一個數字都需要按回車鍵確認,最好在鍵盤輸入一個非數字字符串結束整個輸入操作過程。程序將計算出這些數的和以及平均值。
效果如圖所示:
在這裏插入圖片描述
例子9
Example3_9
package example3_9;
import java.util.*;
public class Example3_9 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Scanner reader = new Scanner(System.in);
	double sum = 0;
	int m = 0;
	while(reader.hasNextDouble()){
	double x = reader.nextDouble();
	m=m+1;
	sum=sum+x;
	}
	System.out.printf("%d的個數的和爲%f\n",m,sum);
	System.out.printf("%d的個數的平均值是%f\n",m,sum/m);
}

}

小結

(1)Java語言的控制語句和C很類似

(2)Java提供了遍歷數組的循環語句(更加方便簡潔,碼~)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章