變數 (variable) :表示記憶體中,某一位址所存放的 值; 或當成參考(...

44
變變 (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; // 變變 Java 變變變變變

Upload: neith

Post on 19-Mar-2016

127 views

Category:

Documents


4 download

DESCRIPTION

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

TRANSCRIPT

變數 (variable) :表示記憶體中,某一位址所存放的值; 或當成參考( reference )時表示某一物件的位址。 變數的命名:可用的字元: 0…9 、 A...Z 、 a…z 、 under line(‘_’) 、’ $’ or Unicod

es 。命名的規則: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; // 常數一律大寫, 字以底線分隔,前加 fi

nal

Java 變數的介紹

識別字種類 習 慣 命 名 原 則 範 例

常 數 使用英文大寫字母和底線「_」符號 MAX_SIZE

變 數 使用英文小寫字母開頭,如果是兩個英文

字所組成,第二個之後的英文字以大寫開

size、screenSize

類 別 使用英文大寫字母開頭,如果是兩個英文

字組成,其它英文字使用大寫開頭

LargeCar、SmallCar

函數(方法) 使用英文小寫字母開頭,如果是兩個英文字組成,其它英文字使用大寫開頭

pressButton 、

scrollScreen

Java 變數命名慣例

type modifier data type bytes rangechar 1 -128 ~ 127

unsigned char 1 0 ~ 255int 4 -2147483648 ~ 2147483647

short int 2 -32768 ~ 32767long int 4 -2147483648 ~ 2147483647

unsigned int 4 0 ~ 4294967295unsigned short int 2 0 ~ 65535unsigned long int 4 0 ~ 4294967295

float 4 3.4E-38 ~ 3.4E+38double 8 1.7E-308 ~ 1.7E+308

C/C++ 各種資料型態的儲值範圍

*可使用 sizeof ( ) 來求出資料型態在記憶體中的儲存長度( bytes )。

Numeric Data TypesName Domain Storage sizebyte -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 16 bits

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

Operator Precedence chartPrecedence OperatorHighest 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

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

Java print() & println() 的使用範例(1)

line 1line 2line 3line 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

cc:cacaccackcackucackup

Java 陣列的宣告與使用範例 (1) Step 1:宣告參考( reference)

DataType[] arrayName; or

DataType arrayName[];

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]

1) Zero-based :index starting from zero.

2) 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

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; 均等效於 a = a + 1;

a--; --a; 均等效於 a = a - 1;

C/C++ 中前置運算與後置運算的差別:++a :先將變數 (a) 的值加 1 後,再參與運算。a-- :先參與運算後,再將變數 (a) 的值減 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;

a=20; b=20;

a=11; b=32;

a=209; b=21;

a=a+1;b=a+5+b;b=b-1;

解讀規則:1) 先做前置運算2) 計算敘述結果3) 進行後置運算

例如: 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;

a=a+1;k=a+5+b;b=b-1;b=k;

It’s another story in Java.1) 各變數的前置運算先作2) 計算此時右邊的結果(暫存)3) 接著處理需後置運算的變數4) 最後把 2) 得到的結果,代入左邊的變數

if ( 條件式 ) 敘述 Yes;

敘述 next;

敘述 Yes

敘述 next

條件式

if ( 條件式 ) 敘述 Yes;else 敘述 No;

敘述 next;

敘述 Yes

敘述 next

條件式

敘述 No

成立才做

no

yesnoyes

其中之ㄧ

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; 敘述 No2;};

敘述 next;

敘述 Yes2

敘述 next

條件式

敘述 Yes1

敘述 No2

敘述 No1

no yes

複合敘述:以 {} 括住將其當成一個敘述。

if ( 條件式 )

{ 敘述 Yes1;

敘述 Yes2;

}

else

敘述 No1; // end if

敘述 No2;

敘述 next;

敘述 Yes2

敘述 next

條件式

敘述 Yes1敘述 No1

敘述 No2

no yes

複合敘述:誤讀敘述。

敘述 Yes22

敘述 next

條件式 1

敘述 Yes21

敘述 No 條件式 2

將左邊流程圖以下列程式表示,這樣對嗎 ?

if ( 條件式 1 )

if ( 條件式 2 )

{ 敘述 Yes21;

敘述 Yes22;

}

else 敘述 No;

敘述 next;

else 會與最近的 if 配對

no

yes

yes

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

printf(“a>0\n”)

敘述 next

a!=0

a>0

printf(“a=0\n”)

a=0

no

yes

yes

no

程式碼與對應的流程圖

敘述 1

條件 1

敘述 2

條件 2

敘述 n-1

條件 n-1

敘述 n

敘述 next

yesyesyes

nono no

if- else-if………else => 多個條件選一!

Score Grade>=90 A>=80 B>=70 C>=60 D< 60 E

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

Transfer score to grade

程式碼對齊:將 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”);

對應展開上一頁的 if-else 的配對關係

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

條件判斷 迴圈內容

條件變換

敘述 next

初值設定祇會做一次

yes

no

迴圈內容

敘述 next

條件式

while-loop:while ( 條件式 ){ …………. 迴圈內容 ;};

敘述 next;

int total=0; k=1;while ( k<=n ){ total += k; ++k; }

敘述 next;

計算 1+2+…+n 的值

條件成立時才會做迴圈內容

yes

no

迴圈內容

敘述 next

條件式

do-while-loop:

do { ………….

迴圈內容 ;

};

while ( 條件式 ) ;

敘述 next;

do { printf(“Input your password:”);

scanf(“%s”, password);

}

while ( check(password) );

敘述 next;

檢查輸入的密碼

至少做一次

yes

no

相當於下列流程:迴圈內容 ;while ( 條件式 ){ …………. 迴圈內容 ;};

switch ( value )

{

case v1 : 敘述 1;

case v2 : 敘述 2;

…..

case vk : 敘述 k;

…..

default : 敘述 n;

};

敘述 next;

switch ( value )

{

case v1 : 敘述 1;

case v2 : 敘述 2;

…..

case vk : 敘述 k;

….. break;

default : 敘述 n;

};

敘述 next;

有 break

當所有情況都不符合時可有可無

value 可以是運算式

switch case => 多個條件選一!

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’

value=‘C’

value=‘P’ not ABC

BCnot ABC

Cnot ABC

Ex. switch-case with breakvalue=‘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’value=‘C’

value=‘P’ not ABC

BCC

break : 跳出迴圈 ,至敘述 next(迴圈後的下一敘述 )

continue: 跳至 條件變換 或 條件判斷 處break 可用於 for-loop, while, do-while, switch

continue 則用於 for-loop, while, do-while

for (k=1; k<10; ++ k){ ………. ….. break; ………. ….. continue; ……...};

next-statement;

while ( a>=1 ){ ………. ….. 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;

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

位元的介紹bit (binary digit) :位元 => 0 or 1

byte = 8 bits :位元組word = 2 bytes = 16 bits :字組

1 0 1 1 0 1 0 1

27 26 25 24 23 22 21 20

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

位 元 的 稱 呼 (與冪次有關)

& 0 10 0 01 0 1

| 0 10 0 11 1 1

^ 0 10 0 11 1 0

0 ^ A = A 具 inverse 的作用1 ^ A = ~A 能把 bit 設成反相

0 | A = A 具 set 的作用1 | A = 1 能把 bit 設成 1

0 & A = 0 具 reset 的作用1 & A = A 能把 bit 設成 0

位元的運算 : & | ^ ~ << >>

位元的運算 : & | ^ ~ << >>

A 0 1~A 1 0

將 A逐位元的反相

XOR (互斥或 ):相等時為 0 ;不相等時是 1

可做簡易的加密編碼

XOR (互斥或 ):

位元的運算例子 (1/2)

若 A = 0xD3 = (1101 0011)2

a) 將 bit4 設成 0 : A = A & 0xEF;

1 1 0 1 0 0 1 1

利用 & (and)運算1 1 1 0 1 1 1 1

b) 將 bit3 設成 1 : A = A | 0x08;

1 1 0 1 0 0 1 1

利用 | (or)運算0 0 0 0 1 0 0 0

位元的運算例子 (2/2)

若 A = 0xD3 = (1101 0011)2 (nibble: 4 bits)

c) 將 high nibble反相 :

A = A ^ 0xF0;

1 1 0 1 0 0 1 1

利用 ^ (xor)運算1 1 1 1 0 0 0 0

d) 保留 low nibble:

A = A & 0x0F;

1 1 0 1 0 0 1 1

利用 & (and)運算0 0 0 0 1 1 1 1

1 0 1 0 0 1 1 1

0 1 0 1 0 0 1 1

N = 0xA7

N = N>>1

位元的右、左移

1 0 1 0 0 1 1 1

0 1 0 0 1 1 1 0

N = 0xA7

N = N<<1

補零

補零

注意!符號位元可能會被改變!

A>>1 : A 除以 2 ,並且去餘數。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) 輸入三個科目的成績,計算總平均並統計有幾科不及格。

2) 可選擇計算矩形或圓形的面積。3) 輸入一元二次方程式: ax2 + bx + c = 0 的係數 a 、 b 、 c , 並計算 x 的值。4) 畫出 sin(x) 的圖形。(使用 Applet ) ( Math.sin(x), x :為徑度 (radian) =180 / 3.141592653度 )