Download presentation
Presentation is loading. Please wait.
Published byศิริวรรณ เคนเนะดิ Modified 5年之前
1
Java變數的介紹 變數(variable):表示記憶體中,某一位址所存放的值; 或當成參考(reference)時表示某一物件的位址。
變數的命名: 可用的字元:0…9、A...Z、a…z、under line(‘_’)、’$’ or Unicodes。 命名的規則: 1) 變數的第一個字元,不可以是數字,餘為上述可用之字元。 2) 大小寫是不一樣的!(case sensitive) 3) Java的保留字 (reserved word or key word) 不可以當成變數名稱。 4) 可以用中文名稱當變數。 *建議儘量取有意義的變數名稱 例如: char my_account; // C/C++ style,以底線分開 int totalMoney; // 除第一個字外,其餘首字大寫來區分 class MyFirstClass; // class首字大寫來區分 final int MAX_USER; // 常數一律大寫, 字以底線分隔,前加 final
2
Java變數命名慣例
3
C/C++各種資料型態的儲值範圍 type modifier data type bytes range char 1 -128 ~ 127
unsigned 0 ~ 255 int 4 ~ short 2 ~ 32767 long 0 ~ unsigned short 0 ~ 65535 unsigned long float 3.4E-38 ~ 3.4E+38 double 8 1.7E-308 ~ 1.7E+308 *可使用 sizeof ( ) 來求出資料型態在記憶體中的儲存長度(bytes)。
4
Numeric Data Types Name Domain Storage size byte -27 ~ 27-1 short
Java 各種資料型態的儲值範圍 Numeric Data Types Name Domain Storage size byte -27 ~ 27-1 8-bit signed short -215 ~ 215-1 16-bit signed int -231 ~ 231-1 32-bit signed long -263 ~ 263-1 64-bit signed float -3.4E38~3.4E38 32-bit IEEE-754 double -1.7E308~1.7E308 64-bit IEEE-754 char 0~ (65535) 16 bits boolean true or false
5
Operator Precedence chart
Highest order casting ++ and -- (prefix) *, /, % +, - <, <=, >, >= ==, != && | | =, +=, -=, *=, /=, %= Lowest order ++ and -- (postfix)
6
C/C++/Java 語言的數值資料表示法
10進位數值:與一般數值相同,此為預設的表示法。 8 進位數值:以 0 (數值零)開頭的數值。 16 進位數值:以 0x 或 0X 開頭的數值。 為避免產生變數判別上的混淆: 例如:就像是個變數名稱的十六進位數,0xAB。 所以在Java中,變數的首字字元不可以是數字。 10進位數值: = (12)10 8 進位數值: 012 = (10)10 16進位數值: 0x12 = (18)10
7
Java print() & println()的使用範例(1)
Statement: System.out.println(2+1+"="+2+1); Displaying: 3=21 Statemetn: System.out.println(""+2+1+"="+2+1); Displaying: 21=21 System.out.print("line 1"); System.out.print("line 2\n"); System.out.println("line 3"); System.out.println("line 4\n"); 當第一個字串出現後 接下來其餘各項均當成字串處理 line 1line 2 line 3 line 4
8
Java print() & println()的使用範例(2)
System.out.println("012="+012 +" 12="+12 +" 0x12="+0x12 +"\n"); Output : 012=10 12=12 0x12=18 System.out.println("c:\backup=>c:\\backup"); System.out.println("\"\\"); Output : cackup=>c:\backup cacku cackup cack ca c c: cac
9
Java 陣列的宣告與使用範例 (1) Step 1:宣告參考(reference) DataType[] arrayName; or
Ex. int[] aryValue; or int aryValue[]; 現在我們祇是得到一個可以存取資料的reference,陣列的大小與所需的記憶體空間,系統並未配置給該矩陣變數。 Step 2:產生真正的陣列 arrayName = new Datatype[number_of_Elements]; Ex. aryValue = new int[10]; 現在我們有了: aryValue[0],aryValue[1],aryValue[2],aryValue[3],aryValue[4], aryValue[5],aryValue[6],aryValue[7],aryValue[8],aryValue[9] Zero-based :index starting from zero. The size of the array, aryValue.length =>10
10
宣告陣列並同時給予初值,此時甚至不必指定陣列的大小,會自動計算該陣列的大小。
Java 陣列的宣告與使用範例 (2) 宣告陣列並同時給予初值,此時甚至不必指定陣列的大小,會自動計算該陣列的大小。 DataType arrayName[] = {v1,v2, … ,vn }; or DataType [] arrayName = {v1,v2, … ,vn }; Ex. int aryInt[] = { 10, 20, 30, 40, 50 }; int[] aryInt = { 11, 22, 33, 44, 55 }; The size of the array aryInt, aryInt.length => 5
11
Java 陣列的宣告與使用範例 (3) int i; // an integer variable
int[] ia, ib; // Both ia & ib are array ia= new int[5]; ib= new int[5]; // requests for array // Error below, int[] required but int found. i= new int[5]; What following really are ? int ic[], id; // ic is an array, but id is an integer. ic= new int[5]; id= new int[5]; // Error ! Id is not an array ! 1) Type arrayName[]; // array requested, 2) arrayName= new Type[#OfElement]; // really obtained the array
12
設數值 x (>0) 為 r 進位,且共有 n 位數: 則(-x)的 r 補數表示法為:
C語言中負數的表示法 設數值 x (>0) 為 r 進位,且共有 n 位數: 則(-x)的 r 補數表示法為: ( -x ) => ( rn – x ) = x 的 (r-1)補數 + 1; x 的 r-1 補數表示法為: x => ( rn –1) – x x 的 r 補數的 r 補數 = ( rn – ( rn – x )) = x 例如: ( )2 = ( 127 ) ( )2 = ( -128 ) ( )2 = ( -127 ) ( )2 = ( -1 ) 加 1 符號位元
13
C / C++ /Java 的 運 算 子 算術運算子:+、-、*、/、%(mod)
關係運算子:>、>=、<、<=、==、!= 位元運算子:&(and)、|(or)、^(xor)、~(not)、 >>(shr)、<<(shl) 邏輯運算子:&&(and)、||(or)、!(not) 條件運算子:?: 遞增、遞減運算子:++、--
14
Java 運算式的簡寫表示法 a = a + (value); ==> a += (value); a = a + (expression); ==> a += (expression); Ex. a = a+2; same as a += 2; a = a + b*b; same as a += b*b; 其中的運算子可以是下述的任一個: +、-、*、/、%、&、|、^、>>、<< a &= (expression); a -= (expression); a >>= (expression); a ^= (expression); … , etc.
15
條件運算子 =>?: (條件判斷式) ? (成立執行此部分) : (不成立執行此部分) ; 例如: (x>0)?(x=x):(x=-x); //取x的絕對值 (x%2==1)? System.out.print(“odd”) : System.out.print(“even”); a = (x>=0)?(100):(50); *類C語言中,任何型態的資料,都可以視為數值,即使是 指標存的位址,也能當成是數值來看待。 *類C語言中,條件成立與否或其結果是真或假,是以數值 來表示:成 立、真、true => 非零值 不成立、假、false => 零
16
++a:先將變數(a)的值加1後,再參與運算。 a--:先參與運算後,再將變數(a)的值減1。 a=a+1; b=a+5+b; b=b-1;
遞增、遞減運算子:++、-- a++; ++a; 均等效於 a = a + 1; a--; --a; 均等效於 a = a - 1; C/C++中前置運算與後置運算的差別: ++a:先將變數(a)的值加1後,再參與運算。 a--:先參與運算後,再將變數(a)的值減1。 a=a+1; b=a+5+b; b=b-1; 例如:int a=10, b=20; 1) b = ++a +5+ b--; 2) a = a++ + 9; 3) b = (b++) + (++a); 4) a = (a--)*(++b); a=11; b=35; 解讀規則: 1)先做前置運算 2)計算敘述結果 3)進行後置運算 a=20; b=20; a=11; b=32; a=209; b=21;
17
It’s another story in Java.
各變數的前置運算先作 計算此時右邊的結果(暫存) 接著處理需後置運算的變數 最後把 2) 得到的結果,代入左邊的變數 a=a+1; k=a+5+b; b=b-1; b=k; 例如:int a=10, b=20; 1) b = ++a +5+ b--; 2) a = a++ + 9; 3) b = (b++) + (++a); 4) a = (a--)*(++b); a=11; b=36; a=19; b=20; a=11; b=31; a=210; b=21;
18
if ( 條件式 ) 敘述Yes; 敘述next; if ( 條件式 ) 敘述Yes; else 敘述No; 敘述next; yes no
成立才做 敘述next 敘述next 其中之ㄧ
19
System.out.println (“a>0”);
Ex. if statement if ( a>0 ) System.out.println (“a>0”); System.out.println(“next statement”); Ex. if-else statement if ( a>0 ) System.out.print(“a>0\n”); else System.out.print(“a<=0\n”); System.out.printf(“next statement”);
20
複合敘述: 以{}括住將其當成一個敘述。 if ( 條件式 ) { 敘述Yes1; 敘述Yes2; } else { 敘述No1;
}; 敘述next; 敘述No1 敘述Yes1 敘述No2 敘述Yes2 敘述next
21
複合敘述:誤讀敘述。 if ( 條件式 ) { 敘述Yes1; 敘述Yes2; } else 敘述No1; // end if 敘述No2;
敘述next; 敘述No1 敘述Yes1 敘述Yes2 敘述No2 敘述next
22
將左邊流程圖以下列程式表示,這樣對嗎? if ( 條件式1 ) if ( 條件式2 ) { 敘述Yes21; 敘述Yes22; }
else 敘述No; 敘述next; 條件式1 no yes 條件式2 yes 敘述No 敘述Yes21 敘述Yes22 else 會與 最近的if配對 敘述next
23
程式碼與對應的流程圖 是描述左圖的程式碼? int a=-1; a!=0 if ( a!=0 ) if ( a>0 )
System.out.print(“a>0\n”); else System.out.print(“a=0\n”); What is the output ? a!=0 no yes a>0 yes no printf(“a=0\n”) printf(“a>0\n”) a=0 敘述next
24
if- else-if………else => 多個條件選一!
條件1 條件2 條件n-1 no no no yes yes yes 敘述1 敘述2 敘述n-1 敘述n 敘述next
25
Transfer score to grade if ( score>=90 )
System.out.print(“Grade A”); else if ( score>=80 ) System.out.print(“Grade B”); else if ( score>=70 ) System.out.print(“Grade C”); else if ( score>=60 ) System.out.print(“Grade D”) else System.out.print(“Grade E”); 程式碼對齊: 將else 前移。
26
對應展開上一頁的if-else的 配對關係 if ( score>=90 ) System.out.print(“Grade A”); else if ( score>=80 ) System.out.print(“Grade B”); else if ( score>=70 ) System.out.print(“Grade C”); else if ( score>=60 ) System.out.print(“Grade D”) else System.out.print(“Grade E”);
27
{ total = total + k; // or total += k; }
for 迴圈 (for loop): for (初值設定; 條件判斷; 條件變換) { ……….. 迴圈內容; }; 敘述next; 祇會做一次 初值設定 條件變換 條件判斷 Ex. 求1+2+…+n的值 int n, total=0; scanf(“%d”, &n); for (k=1; k<=n; ++k ) { total = total + k; // or total += k; } printf(“1+…+%d=%d\n”, n, total); yes 迴圈內容 no 敘述next
28
while-loop: while ( 條件式 ) { …………. 迴圈內容; }; 敘述next; int total=0; k=1;
yes 迴圈內容 no 條件成立時 才會做迴圈內容 敘述next int total=0; k=1; while ( k<=n ) { total += k; ++k; } 敘述next; 計算1+2+…+n的值
29
do-while-loop: do { …………. 迴圈內容; }; while ( 條件式 ) ; 敘述next; 檢查輸入的密碼
至少做一次 do-while-loop: do { …………. 迴圈內容; }; while ( 條件式 ) ; 敘述next; 迴圈內容 相當於下列流程: 迴圈內容; while ( 條件式 ) { …………. }; 條件式 yes no 敘述next do { printf(“Input your password:”); scanf(“%s”, password); } while ( check(password) ); 敘述next; 檢查輸入的密碼
30
switch case => 多個條件選一! switch ( value ) { case v1 : 敘述1;
….. case vk : 敘述k; … break; default : 敘述n; }; 敘述next; switch ( value ) { case v1 : 敘述1; case v2 : 敘述2; ….. case vk : 敘述k; default : 敘述n; }; 敘述next; value可以是 運算式 有break 當所有情況 都不符合時 可有可無
31
switch case 與 if- else-if … else 的比較:
都能做多個條件選一,兩者有何差異? 1) switch 中 case 的值必須是類整數型態的; 2) if- else-if … else 則可以使用更彈性的條件判斷式!
32
Ex. switch-case without break
value=‘A’; switch (value) { case ‘A’ : printf(“A”); case ‘B’ : printf(“B”); case ‘C’ : printf(“C”); default : printf(“not ABC”); }; 敘述next; value=‘A’ ABCnot ABC value=‘B’ BCnot ABC value=‘C’ Cnot ABC value=‘P’ not ABC
33
Ex. switch-case with break
value=‘A’; switch (value) { case ‘A’ : System.out.print(“A”); break; case ‘B’ : System.out.print(“B”); case ‘C’ : System.out.print(“C”); default : System.out.print(“not ABC”); }; 敘述next; value=‘A’ A value=‘B’ BC value=‘C’ C value=‘P’ not ABC
34
break : 跳出迴圈,至敘述next(迴圈後的下一敘述) continue: 跳至 條件變換 或 條件判斷 處
break可用於for-loop, while, do-while, switch continue 則用於for-loop, while, do-while while ( a>=1 ) { ………. ….. break; ………. ….. continue; ……... }; next-statement; for (k=1; k<10; ++ k) { ………. ….. break; ………. ….. continue; ……... }; next-statement;
35
// break case: int n, sum=0; // 初值設定 for (n=1; n<=10; ++n)
{ if ( n = = 5 ) break; sum += n; } // continue case int n, sum=0; { if ( n = = 5) continue; sum = = 10 sum = = 50
36
1 27 26 25 24 23 22 21 20 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
位元的介紹 bit (binary digit):位元 => 0 or 1 byte = 8 bits:位元組 word = 2 bytes = 16 bits:字組 位 元 的 稱 呼 (與冪次有關) 1 27 26 25 24 23 22 21 20 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
37
位元的運算: & | ^ ~ << >>
位元的運算: & | ^ ~ << >> 0 & A = 具reset的作用 1 & A = A 能把bit設成0 0 | A = A 具set的作用 1 | A = 能把bit設成1 0 ^ A = A 具inverse的作用 1 ^ A = ~A 能把bit設成反相
38
位元的運算: & | ^ ~ << >>
位元的運算: & | ^ ~ << >> A 1 ~A 將A逐位元的反相 XOR (互斥或): XOR (互斥或): 相等時為 0;不相等時是1 可做簡易的 加密編碼
39
1 利用& (and)運算 1 利用| (or)運算 位元的運算例子 (1/2) 若 A = 0xD3 = (1101 0011)2
利用& (and)運算 將 bit4 設成 0: A = A & 0xEF; 1 利用| (or)運算 b) 將 bit3 設成1: A = A | 0x08;
40
1 利用^ (xor)運算 1 利用& (and)運算 位元的運算例子 (2/2)
若 A = 0xD3 = ( ) (nibble: 4 bits) 1 利用^ (xor)運算 c) 將 high nibble反相: A = A ^ 0xF0; 1 利用& (and)運算 d) 保留 low nibble: A = A & 0x0F;
41
位元的右、左移 1 1 N = 0xA7 N = N>>1 補零 注意!符號位元可能會被改變! N = 0xA7
N = N>>1 補零 注意!符號位元可能會被改變! N = 0xA7 1 N = N<<1 補零
42
A>>1:A除以2,並且去餘數。
可利用上述的特性,來加快數值的計算! 例如:a = 5*a; => a = (a<<2)+a; // a=a*4+a;
43
課 堂 練 習 1) 9 x 9 乘法表。 2) 隨機產生一個陣列並排序。 3) 輸入成績並列出等級: >=90 : A;
>=80 : B; >=70 : C; >=60 : D; else F。
44
1) 輸入三個科目的成績,計算總平均並統計有幾科不及格。
課 堂 練 習 1) 輸入三個科目的成績,計算總平均並統計有幾科不及格。 2) 可選擇計算矩形或圓形的面積。 3) 輸入一元二次方程式:ax2 + bx + c = 0 的係數a、b、c, 並計算 x 的值。 4) 畫出sin(x)的圖形。(使用Applet) (Math.sin(x), x:為徑度(radian) =180 / 度 )
Similar presentations