# 循環語句
# 已知次數 for
| for(表達式1; 表達式2; 表達式3) |
| { |
| 語句序列; |
| } |
| |
| |
| |
| graph LR |
| A[表達式1]-->B{表達式2?} |
| B-->|不成立|C[ ] |
| B-->|成立|D[語句序列] |
| D-->E[表達式3] |
| E-->B |
# 例子:計算累加和
例子在裡面喔
計算1+2+3+...+n 的總和並顯示結果。
| public class App { |
| public static void main(String[] args) { |
| |
| int sum=0; |
| for(int i=1; i<=100; i++) |
| sum += i; |
| System.out.println(sum); |
| |
| } |
| } |
# 例子:乘法表 (巢狀迴圈)
例子在裡面喔
按照三角形式顯示九九乘法表
格式如下:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
......
1*9=9 2*9=18 3*9=27 ... 9*9=81
| public class App { |
| public static void main(String[] args) { |
| |
| for(int i=1; i<=9; i++){ |
| for(int j=1; j<=i; j++){ |
| String ouput = j + "*"+i+"="+(j*i)+"\t"; |
| System.out.print(ouput); |
| } |
| System.out.println(""); |
| } |
| |
| } |
| } |
- 表達式之間的
;
是不能省略的 for(;;)
在語法上是正確的,表示無限循環- 跟
if
一樣如果 for
只有執行一個指令 {}
是可以省略的
# 已知條件 while
do while
| graph LR |
| B{表達式?}-->|不成立|C[ ] |
| B-->|成立|D[語句序列] |
| D-->B |
| graph LR |
| A[語句序列]-->B |
| B{表達式?}-->|不成立|C[ ] |
| B-->|成立|D[語句序列] |
| D-->B |
# 例子:求 e 值
例子在裡面喔!!
使用下列級數近似計算 e 值,直到最後一個通項 ui<10-7 為止
e=1+1!1+2!1+...+n!1+...
ui=i!1=(i−1)!1/i=ui−1/i
| public class App { |
| public static void main(String[] args) { |
| |
| double e = 1.0,u = 1.0; |
| int n = 1; |
| |
| while(u >= 1.0E-7) { |
| u = u/n; |
| e = e+u; |
| n++; |
| } |
| String output = "e = " + e + "(n = " + n + ")"; |
| System.out.println(output); |
| |
| } |
| } |
| public class App { |
| public static void main(String[] args) { |
| |
| double e=1.0,u = 1.0; |
| int n= 1; |
| do { |
| u = u/n; |
| e = e+u; |
| n = n+1; |
| } while (u>=1.0E-7); |
| String output = "e = " + e + "(n = " + n + ")"; |
| System.out.println(output); |
| } |
| } |
# 標準輸入 Scanner
Scanner
是一個簡單的文字讀取器,可以解析字串成各個基本資料型態。
這個 Scanner
類別被放在 java.util
套件中,別忘了事先 import:
| import java.util.Scanner; |
System
物件裡面的靜態欄位 in
可以取得標準輸入流。我們可以用它來初始化 Scanner
物件:
| Scanner in = new Scanner(System.in); |
# 使用
Scanner
可以把一整行的字串切成很多的 token,預設是以空白 (或 tab) 為基礎隔開,
透過各種 next
的方法,解析並轉換成我們需要的資料型態,然後回傳。
這些就是使用方式及回傳型態:
回傳型態 | 方法 | 描述 |
---|
String | next() | 找下一個 token 並回傳。 |
BigDecimal | nextBigDecimal() | 找下一個 token 並轉換成 BigDecimal 回傳。 |
BigInteger | nextBigInteger() | 找下一個 token 並轉換成 BigInteger 回傳。 |
boolean | nextBoolean() | 找下一個 token 並轉換成 boolean 回傳。 |
byte | nextByte() | 找下一個 token 並轉換成 byte 回傳。 |
double | nextDouble() | 找下一個 token 並轉換成 double 回傳。 |
float | nextFloat() | 找下一個 token 並轉換成 float 回傳。 |
int | nextInt() | 找下一個 token 並轉換成 int 回傳。 |
long | nextLong() | 找下一個 token 並轉換成 long 回傳。 |
short | nextShort() | 找下一個 token 並轉換成 short 回傳。 |
String | nextLine() | 讀一整行的字串回傳。(包含空白,讀到換行為止) |
| import java.util.Scanner; |
| public class Main { |
| public static void main(String[] args){ |
| |
| Scanner in=new Scanner(System.in); |
| |
| System.out.println("我是Zrn,我想知道你的名字!"); |
| String name = s.next(); |
| System.out.println(name+",很高興認識你ヾ(•ω•`)o"); |
| System.out.println("輸入個數字吧~~"); |
| int number =s.nextInt(); |
| System.out.println("你輸入的數字乘以10為: "+number); |
| System.out.println("我是不是很厲害啊!!!"); |
| s.close(); |
| } |
| } |
# 讀完資料
很多時候我們會希望程式可以一直讀,讀到檔案結束或輸入結束,Scanner 當然也可以透過方法做到。
hasNext () 系列方法,回傳 boolean,表示接下來還有沒有東西:
回傳值 | 方法 | 描述 |
---|
boolean | hasNext() | 如果還有 token 可以讀回傳 true。 |
boolean | hasNextBigDecimal() | 如果下個 token 可以被解析成 BigDecimal 回傳 true。 |
boolean | hasNextBigInteger() | 如果下個 token 可以被解析成 BigInteger 回傳 true。 |
boolean | hasNextBoolean() | 如果下個 token 可以被解析成 boolean 回傳 true。 |
boolean | hasNextByte() | 如果下個 token 可以被解析成 byte 回傳 true。 |
boolean | hasNextDouble() | 如果下個 token 可以被解析成 double 回傳 true。 |
boolean | hasNextFloat() | 如果下個 token 可以被解析成 float 回傳 true。 |
boolean | hasNextInt() | 如果下個 token 可以被解析成 int 回傳 true。 |
boolean | hasNextLong() | 如果下個 token 可以被解析成 long 回傳 true。 |
boolean | hasNextShort() | 如果下個 token 可以被解析成 short 回傳 true。 |
boolean | hasNextLine() | 如果還有下一行回傳 true。 |
| Scanner in = new Scanner(System.in); |
| while(in.hasNext()){ |
| System.out.println(in.next()); |
| } |
| s.close(); |