1 / 44

變數 (variable) :表示記憶體中,某一位址所存放的 值; 或當成參考( reference )時表示某一物件的位址 。 變數的命名:

Java 變數的介紹. 變數 (variable) :表示記憶體中,某一位址所存放的 值; 或當成參考( reference )時表示某一物件的位址 。 變數的命名: 可用的字元: 0…9 、 A...Z 、 a…z 、 under line(‘ _ ’) 、’ $’ or Unicodes 。 命名的規則: 1) 變數的第一個字元,不可以是數字,餘為上述可用之字元。 2) 大 小 寫是不一樣的!( case sensitive )

neith
Download Presentation

變數 (variable) :表示記憶體中,某一位址所存放的 值; 或當成參考( reference )時表示某一物件的位址 。 變數的命名:

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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++各種資料型態的儲值範圍 *可使用 sizeof ( ) 來求出資料型態在記憶體中的儲存長度(bytes)。

  4. Java 各種資料型態的儲值範圍

  5. C/C++/Java 語言的數值資料表示法 10進位數值:與一般數值相同,此為預設的表示法。 8 進位數值:以 0(數值零)開頭的數值。 16 進位數值:以 0x 或 0X開頭的數值。 為避免產生變數判別上的混淆: 例如:就像是個變數名稱的十六進位數,0xAB。 所以在Java中,變數的首字字元不可以是數字。 10進位數值: 12 = (12)10 8 進位數值: 012 = (10)10 16進位數值: 0x12 = (18)10

  6. 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

  7. Java print() & println()的使用範例(2) System.out.println("012="+012 +" 12="+12 +" 0x12="+0x12 +"\n"); Output : 012=1012=120x12=18 System.out.println("c:\backup=>c:\\backup"); System.out.println("\"\\"); Output : cackup=>c:\backup c c: ca cac cack cacku cackup

  8. Java 陣列的宣告與使用範例 (1) • Step 1:宣告參考(reference) • DataType[]arrayName; or • DataType arrayName[]; • Ex. int[] aryValue; or int aryValue[]; • 現在我們祇是得到一個可以存取資料的reference,陣列的大小與所需的記憶體空間,系統並未配置給該矩陣變數。 • Step 2:產生真正的陣列 • arrayName = newDatatype[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

  9. 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

  10. Java 陣列的宣告與使用範例 (3) int i; // an integer variable int[] ia, ib; // Both ia & ibare 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

  11. 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 例如: (0111 1111)2 = ( 127 ) (1000 0000)2 = ( -128 ) (1000 0001)2 = ( -127 ) (1111 1111)2 = ( -1 ) 加 1 符號位元

  12. C / C++ /Java 的 運 算 子 算術運算子:+、-、*、/、%(mod) 關係運算子:>、>=、<、<=、==、!= 位元運算子:&(and)、|(or)、^(xor)、~(not)、 >>(shr)、<<(shl) 邏輯運算子:&&(and)、||(or)、!(not) 條件運算子:?: 遞增、遞減運算子:++、--

  13. 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.

  14. 條件運算子 =>?: (條件判斷式) ? (成立執行此部分) : (不成立執行此部分) ; 例如: (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 => 零

  15. 遞增、遞減運算子:++、-- 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;

  16. 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;

  17. if ( 條件式) 敘述Yes; 敘述next; if ( 條件式) 敘述Yes; else 敘述No; 敘述next; 條件式 yes 條件式 no yes 敘述Yes no 敘述No 敘述Yes 成立才做 敘述next 其中之ㄧ 敘述next

  18. 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”); elseSystem.out.print(“a<=0\n”); System.out.printf(“next statement”);

  19. 複合敘述:以{}括住將其當成一個敘述。 條件式 no yes if ( 條件式) {敘述Yes1; 敘述Yes2; } else { 敘述No1; 敘述No2; }; 敘述next; 敘述No1 敘述Yes1 敘述No2 敘述Yes2 敘述next

  20. 複合敘述:誤讀敘述。 條件式 no yes if ( 條件式) { 敘述Yes1; 敘述Yes2; } else 敘述No1; // end if 敘述No2; 敘述next; 敘述No1 敘述Yes1 敘述Yes2 敘述No2 敘述next

  21. 將左邊流程圖以下列程式表示,這樣對嗎? if ( 條件式1 ) if ( 條件式2 ) { 敘述Yes21; 敘述Yes22; } else 敘述No; 敘述next; 條件式1 no yes 條件式2 yes 敘述No 敘述Yes21 敘述Yes22 else 會與 最近的if配對 敘述next

  22. 程式碼與對應的流程圖 是描述左圖的程式碼? int a=-1; 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

  23. if- else-if………else => 多個條件選一! 條件1 條件2 條件n-1 no no no yes yes yes 敘述1 敘述2 敘述n-1 敘述n 敘述next

  24. Transfer score to grade if ( score>=90 ) System.out.print(“Grade A”); elseif ( score>=80 ) System.out.print(“Grade B”); elseif ( score>=70 ) System.out.print(“Grade C”); elseif ( score>=60 ) System.out.print(“Grade D”) else System.out.print(“Grade E”); 程式碼對齊: 將else 前移。

  25. 對應展開上一頁的if-else的 配對關係 if ( score>=90 ) System.out.print(“Grade A”); elseif ( score>=80 ) System.out.print(“Grade B”); elseif ( score>=70 ) System.out.print(“Grade C”); elseif ( score>=60 ) System.out.print(“Grade D”) else System.out.print(“Grade E”);

  26. 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

  27. while-loop: while ( 條件式) { …………. 迴圈內容; }; 敘述next; 條件式 yes 迴圈內容 no 條件成立時 才會做迴圈內容 敘述next int total=0; k=1; while ( k<=n ) { total += k; ++k; } 敘述next; 計算1+2+…+n的值

  28. 至少做一次 do-while-loop: do { …………. 迴圈內容; }; while ( 條件式) ; 敘述next; 迴圈內容 相當於下列流程: 迴圈內容; while ( 條件式) { …………. 迴圈內容; }; 條件式 yes no 敘述next do {printf(“Input your password:”); scanf(“%s”, password); } while(check(password) ); 敘述next; 檢查輸入的密碼

  29. switch case => 多個條件選一! switch ( value ) { case v1 : 敘述1; case v2 : 敘述2; ….. case vk : 敘述k; ….. break; default : 敘述n; }; 敘述next; switch ( value ) { case v1 : 敘述1; case v2 : 敘述2; ….. case vk : 敘述k; ….. default : 敘述n; }; 敘述next; value可以是 運算式 有break 當所有情況 都不符合時 可有可無

  30. switch case 與 if- else-if … else的比較: 都能做多個條件選一,兩者有何差異? 1) switch 中 case 的值必須是類整數型態的; 2) if- else-if … else 則可以使用更彈性的條件判斷式!

  31. 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

  32. 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”); break; default : System.out.print(“not ABC”); }; 敘述next; value=‘A’ A value=‘B’ BC value=‘C’ C value=‘P’ not ABC

  33. 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;

  34. // break case: int n,sum=0; // 初值設定 for (n=1; n<=10; ++n) { if ( n = = 5 ) break; sum += n; } // continue case int n, sum=0; for (n=1; n<=10; ++n) { if ( n = = 5) continue; sum += n; } sum = 1+2+3+4 = 10 sum = 1+2+3+4+6+7+8+9+10 = 50

  35. 位元的介紹 bit (binary digit):位元 => 0 or 1 byte = 8 bits:位元組 word = 2 bytes = 16 bits:字組 位 元 的 稱 呼 (與冪次有關)

  36. 位元的運算: & | ^ ~ << >> 0 & A = 0具reset的作用 1 & A = A能把bit設成0 0 | A = A具set的作用 1 | A = 1 能把bit設成1 0 ^ A = A具inverse的作用 1 ^ A = ~A能把bit設成反相

  37. 位元的運算: & | ^ ~ << >> 將A逐位元的反相 XOR (互斥或): XOR (互斥或): 相等時為 0;不相等時是1 可做簡易的 加密編碼

  38. 位元的運算例子 (1/2) 若 A = 0xD3 = (1101 0011)2 • 將 bit4設成 0: • A = A & 0xEF; b) 將 bit3設成1: A = A | 0x08;

  39. 位元的運算例子 (2/2) 若 A = 0xD3 = (1101 0011)2 (nibble: 4 bits) c) 將 high nibble反相: A = A ^ 0xF0; d) 保留 low nibble: A = A & 0x0F;

  40. 位元的右、左移 N = 0xA7 N = N>>1 補零 注意!符號位元可能會被改變! N = 0xA7 N = N<<1 補零

  41. A>>1:A除以2,並且去餘數。 A<<1:A乘以2,但有可能超過數值的範圍或導致變號。 可利用上述的特性,來加快數值的計算! 例如:a = 5*a; => a = (a<<2)+a; // a=a*4+a;

  42. 課 堂 練 習 1) 9 x 9 乘法表。 2) 隨機產生一個陣列並排序。 3) 輸入成績並列出等級: >=90 : A; >=80 : B; >=70 : C; >=60 : D; else F。

  43. 課 堂 練 習 1) 輸入三個科目的成績,計算總平均並統計有幾科不及格。 2) 可選擇計算矩形或圓形的面積。 3) 輸入一元二次方程式:ax2 + bx + c = 0的係數a、b、c, 並計算 x 的值。 4) 畫出sin(x)的圖形。(使用Applet) (Math.sin(x), x:為徑度(radian) =180 / 3.141592653度 )

More Related