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

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

第4章 條件判斷與迴圈 Java 2 程式設計入門與應用.
迴圈 迴圈基本觀念 while迴圈 do 迴圈 for迴圈 巢狀迴圈 迴圈設計注意事項 其他控制指令 迴圈與選擇的組合.
Loops.
南京理工大学 第2章 Java基本语法 本章我们将学习Java编程语言的基本语法,包括变量、操作符、表达式、语句、字符串、数组、控制流以及如何使用帮助文档。 使用下面的编程框架: public class Test{ public static void main(String []args){ //以下添加测试代码.
JAVA 程式設計 資訊管理系 - 網路組.
TQC+ 物件導向程式認證-JAVA.
第 5 章 流程控制 (一): 條件分支.
第二章 JAVA语言基础.
Chapter 5 迴圈.
程 式寫 作 的 建 議 *開闊的心胸、貼心的設計、需求創造進步。 *沒有人能在課堂上學會寫好程式; 就好像不下水永遠學不會游泳。
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
課程名稱:程式設計 授課老師:________
Visual C++ introduction
第二章 C# 基础知识.
C++Primer 3rd edition 中文版 Chap 5
流程控制結構 4-1 流程控制與UML活動圖 4-2 程式區塊與主控台基本輸入 4-3 條件控制敘述 4-4 迴圈控制敘述 4-5 巢狀迴圈
列舉(enum).
编译原理与技术 类型检查 2018/11/21 《编译原理与技术》-类型检查.
實作輔導 日期: 3/11 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第四章 流程控制(一) if,if-else 與 switch
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
C 程式設計— 控制敘述 台大資訊工程學系 資訊系統訓練班.
JAVA程序设计 第5章 深入理解JAVA语言----补充.
Java程式概觀.
C語言簡介 日期 : 2018/12/2.
C 語言簡介 - 2.
條件判斷指令 -if 指令 -switch 指令 迴圈指令 - for 迴圈 - while迴圈 - break、continue 指令
JAVA 程式設計 資訊管理系 - 網路組.
變數命名 保留字(Reserved Word)
實作輔導 3 日期: 4/14(星期六) 09:10~12:00、13:10~16:00
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
邏輯關係運算 == 等於 & 且 (logical and) ~= 不等於 | 或 (logical or) < 小於
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
Java程序设计 第2章 基本数据类型及操作.
程式設計實習課(四) ----C 函數運用----
陳維魁 博士 儒林圖書公司 第五章 控制結構 陳維魁 博士 儒林圖書公司.
第一單元 建立java 程式.
義守大學電機工程學系 陳慶瀚 第4章 VHDL Sequential語法 義守大學電機工程學系 陳慶瀚
第3章 Java語法的JSP程式 3-1 Java語言的基礎 3-2 JSP程式的基本架構 3-3 Java的變數與資料型態
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第二章Java基本程序设计.
第1讲 C语言基础 要求: (1) C程序的组成 (2) C语言的标识符是如何定义的。 (3) C语言有哪些基本数据类型?各种基本数
JAVA 程式設計 資訊管理系 - 網路組.
輸入&輸出 函數 P20~P21.
陳維魁 博士 儒林圖書公司 第三章 變數與繫結 陳維魁 博士 儒林圖書公司.
CH05. 選擇敘述.
期末考.
挑戰C++程式語言 ──第8章 進一步談字元與字串
第二章 Java基本语法 讲师:复凡.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
適用於多選一 可減少if 與 else配對混淆的錯誤.
變數、資料型態、運算子.
第2章 Java语言基础.
第6章 PHP基本語法介紹.
多重條件選擇敘述
Programming & Language Telling the computer what to do
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
C语言基本语句 判断循环.
Array(陣列) Anny
第二章 Java基础语法 北京传智播客教育
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

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

Java變數命名慣例

C/C++各種資料型態的儲值範圍 type modifier data type bytes range char 1 -128 ~ 127 unsigned 0 ~ 255 int 4 -2147483648 ~ 2147483647 short 2 -32768 ~ 32767 long 0 ~ 4294967295 unsigned short 0 ~ 65535 unsigned long float 3.4E-38 ~ 3.4E+38 double 8 1.7E-308 ~ 1.7E+308 *可使用 sizeof ( ) 來求出資料型態在記憶體中的儲存長度(bytes)。

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~ 216-1 (65535) 16 bits boolean true or false

Operator Precedence chart Highest order casting ++ and -- (prefix) *, /, % +, - <, <=, >, >= ==, != && | | =, +=, -=, *=, /=, %= Lowest order ++ and -- (postfix)

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

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

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

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

宣告陣列並同時給予初值,此時甚至不必指定陣列的大小,會自動計算該陣列的大小。 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

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

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

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

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.

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

++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;

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;

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

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”);

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

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

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

程式碼與對應的流程圖 是描述左圖的程式碼? 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

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

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 前移。

對應展開上一頁的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”);

{ 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

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的值

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; 檢查輸入的密碼

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 當所有情況 都不符合時 可有可無

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

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

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

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;

// 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 = 1+2+3+4 = 10 sum = 1+2+3+4+6+7+8+9+10 = 50

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

位元的運算: & | ^ ~ << >> 位元的運算: & | ^ ~ << >> 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設成反相

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

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;

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

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

A>>1:A除以2,並且去餘數。 可利用上述的特性,來加快數值的計算! 例如:a = 5*a; => a = (a<<2)+a; // a=a*4+a;

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

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