1 / 29

# 程序與函數的類別方法 - PowerPoint PPT Presentation

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

## PowerPoint Slideshow about '程序與函數的類別方法' - humphrey

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

- 便於分析

- 加速開發

- 維護簡單

- 容易偵錯

Top-down Design

Top-down Design 的設計方法需注意下列問題：

• 模組的獨立性
• 模組之間的結合
• 模組之間的溝通

JAVA的類別方法

{

…………..

…………..

}

public :方法可以在任何程式任何地方呼叫

private :只能在同一類別內class呼叫

JAVA的類別方法

private static void writeTriangle()

{

// 變數宣告

int i, j;

// 巢狀迴圈

for ( i = 1; i <= 5; i++)

{

for ( j = 1; j <= i; j++)

System.out.print("*");

System.out.print("\n");

}

}

// 類別方法: 顯示1加到5

ch5_3_1.java

JAVA的類別方法

{

// 變數宣告

int i;

int total = 0;

// 迴圈敘述

for ( i = 1; i <= 5; i++ )

{

System.out.print("|" + i);

total += i;

}

System.out.println("\n從小到大的總和: " + total);

}

// 主程式

ch5_3_1.java

JAVA的類別方法

Ch5_3_2.java

static void printTable(int lower, int upper)

{

// 變數宣告

int step = 10; // 增量

int c = lower;

double f;

// do/while迴圈敘述

System.out.println("攝氏 華氏");

do

{

f = (9.0 * c) / 5.0 + 32.0;

System.out.println(c + "\t" + f);

c += step;

} while ( c <= upper);

}

JAVA的類別方法

ch5_3_3

// 類別方法: 計算n到N的數字

static int nAdd2N(int begin, int end)

{

// 變數宣告

int i;

int total = 0;

// 迴圈敘述

for ( i = begin; i <= end; i++ )

total += i;

}

// 類別方法: 攝氏轉成華氏

static double c2F(int c)

{

double f;

// 轉換溫度

f = (9.0 * c) / 5.0 + 32.0;

return f; // 傳回值

}

// 主程式

10

x

JAVA的類別呼叫方法

call by value

10

x

func(int x)

{

x=x*x;

System.out.println(x);

}

100

main()

{

int x=10;

func(x);

}

JAVA的類別呼叫方法

1

11

x[0]

call by reference

2

12

x[1]

3

13

x[2]

main()

{

int x[3]={1,2,3};

func(x);

}

func(int x[])

{

int i;

for(i=0 ; i<3 ; i++)

x[i]+=10;

}

JAVA的類別變數和變數範圍

JAVA成員變數在宣告後，如果沒有指定初值，將擁

ch5_4_1

JAVA的類別變數和變數範圍

ch5_4_2.java

class class_name

{

………………………

public void method_name()

{

}

}

Case study : Square

private static int square(int n)

{

………………

………………

………………

}

Case study : MAX

private static int max(int a, int b, int c)

{

…….

}

• 主程式：
• 輸入三個整數
• 呼叫max求此三整數之最大值

Case study : isPrimer

private static int primer(int n)

{

………………

………………

………………

}

If n is a primer, return 1;otherwise return 0

Case Study : Play dice

(int) Math.ceil(Math.random()*6);

Homework : Play Dice game

3點或12點，那麼玩家輸。如果第一次擲出4點、5點、6點、8點、9點

、10點，則這個點數成為玩家的目標點數。玩家必須繼續投擲這兩顆

7點，則判定玩家輸。

Homework : Play Dice game

private static int rolldice()

{

………………

}

player rolled point

rolldice

player rolled point

4,5,6,8,9,10

2,3,12

case(point)

target=point

L

print player loses

rolldice

F

7,11

T

F

7

Point=target

Point==7

w

L

print player win

print player loses

target

T

w

print player win

Final 120

5!

5!

return 5*24

5*4!

5*4!

return 4*6

4*3!

4*3!

return 3*2

3*2!

3*2!

return 2*1

2*1!

2*1!

return 1

1

1

ch5_5_1.java

5!=5*4*3*2*1

5!=5*(4*3*2*1)

5!=5*4!

n!=n*(n-1)!

Fibonacci 數列

Fibonacci數列:

0,1,1,2,3,5,8,13,21

Fibonacci數列可遞迴定義，如下：

Fibonacci(0)=0

Fibonacci(1)=1

Fibonacci(n)=Fibonacci(n-1)+Fibonacci(n-2)

f(3)

return f(2) + f(1)

return f(1) + f(0)

return 1

return 1

return 0

Fibonacci 數列

Case study : 以遞迴來求GCD

GCD(32,12)

=GCD(12,8)

=GCD(8,4)

Hanoi塔

solution:

Hanoi塔

solution:

1 to 3

1 to 2

3 to 2

1 to 3

2 to 1

2 to 3

1 to 3

Hanoi塔

solution:

1 to 3

1 to 2

3 to 2

1 to 3

2 to 1

2 to 3

1 to 3

source

temp

destination

move n-1 rings

from S to T

move n’th ring

from S to D

move n-1 rings

from T to D

Hanoi塔

ch5_5_1.java

• 演算法：
• 將n-1個碟子由柱子1移到柱子2，柱子3作為暫存區。
• 將最後一個碟子由柱子1移到柱子3。
• 將n-1個碟子由柱子2移到柱子3，柱子1作為暫存區。
• 請撰寫一個程式來解決Hanoi塔問題。請使用一個具有下列四個參數
• 的遞迴函式。
• 1.要移動的碟子數
• 2.這些碟子的開始所在柱子位置。
• 3.這些碟子最後要移到的柱子位置。
• 4.被當作暫存區的柱子位置。