TQC+ 物件導向程式語言 Java 6 609 堆疊擴充
第6類:物件導向程式設計與例外處理

TQC+ 物件導向程式語言 Java 6 609 堆疊擴充

來自的免費背景照片 zh.pngtree.com

題目前後相關,請閱讀完這個題組的五個題目之後再作答,每題答案皆能獨立執行。請將需要重複或共同使用的程式片段撰寫成函式,以供在類別中呼叫使用,避免在不同的類別中重複寫相同的程式碼,否則將酌量扣分。

題目一:

題目說明:

請開啟檔案 JPD06_1.java,設計「堆疊」程式,請依下列題意完成作答。將 JPD06_1.java 內的 class JPD06_1 修改為 class JPA06_1,將檔案另存為 JPA06_1.java 後編譯為 JPA06_1.class,所有題目中有使用到的類別也請編譯後一併儲存。

設計說明:

(1) 請使用陣列寫一個 BoundedStack 類別。

(2) 在宣告時便需要指定一個 BoundedStack 堆疊的大小。

(3) BoundedStack 有三個方法:push (存入堆疊資料)、pop (從堆疊中取出資料)及測試一個 BoundedStack 實例是否為空的 empty 方法 (Boolean 值)。

(4) 在 push 方法中,若判斷已超出堆疊最大容量,則顯示【stack-overflow】。

(5) 在 pop 方法中,若堆疊區為空值,則顯示【stack-is-empty】。

(6) 在測試是否為空值的方法,若為空值,請傳回【true】,否則傳回【false】。

(7) 請依照程式 class JPD06_1 内提供的順序依序印出,顯示如執行結果參考畫面。

執行結果參考畫面:



JPD06_1.java 檔案下載

程式碼:

class BoundedStack {
	int size, index = 0;
	String[] stack;
	
	BoundedStack(int size) {
		this.size = size;
		stack = new String[size];
	}
	
	void push(String data) {
		if(index < size) {
			stack[index] = data;
			index++;
		}
		else
			System.out.println("stack-overflow");
	}
	
	String pop() {
		if(index > 0)
			return stack[--index];
		else
			return "stack-is-empty";
	}
	
	boolean empty() {
		return index == 0;
	}
}

public class JPA06_1 {
    public static void main(String args[]) {
        BoundedStack s = new BoundedStack(3);
        s.push("abc");
        s.push("def");
        s.push("ghi");
        s.push("jkl");
        
        System.out.println(s.pop());
        System.out.println(s.pop());
        System.out.println(s.pop());
        System.out.println(s.empty());
    }
}

JPA06_1.java 檔案下載



題目二:

題目說明:

請開啟 JPD06_2.java,並設計一個 UnboundedStack 類別,請依下列題意完成作答。將 JPD06_2.java 内的 class JPD06_2 修改為 class JPA06_2,將檔案另存為 JPA06_2.java 後編譯為 JPA06_2.class,所有題目中有使用到的類別也請編譯後一併儲存。

設計說明:

(1) 請使用 LinkedList 寫一個 UnboundedStack 類別。

(2) UnboundedStack 有三個方法:push (存入堆疊資料)、pop (從堆疊中取出資料) 及測試一個 UnboundedStack 實例是否是空值的 empty 方法 (Boolean 值)。

(3) 在 pop 方法中,若堆疊區為空值,則顯示【Stack is empty!】。

(4) 在測試是否為空值的方法,若為空值,請傳回【true】,否則傳回【false】。

(5) 請依照程式 class JPD06_2 内提供的順序依序印出,顯示如執行結果參考畫面。

執行結果參考畫面:



JPD06_2.java 檔案下載

程式碼:

import java.util.LinkedList;

class UnboundedStack {
	LinkedList list = new LinkedList();
	
	void push(String data) {
		list.addFirst(data);
	}
	
	String pop() {
		if(!list.isEmpty()) {
			String data = (String) list.getFirst();
			list.removeFirst();
			return data;
		}
		else
			return "Stack is empty!";
	}
	
	boolean empty() {
		return list.size() == 0;
	}
}

public class JPA06_2 {
    public static void main(String args[]) {
        UnboundedStack s = new UnboundedStack();
        s.push("abc");
        s.push("def");
        s.push("ghi");
        s.push("jkl");

        System.out.println(s.pop());
        System.out.println(s.pop());
        System.out.println(s.pop());
        System.out.println(s.empty());
        System.out.println(s.pop());
        System.out.println(s.empty());
    }
}

JPA06_2.java 檔案下載



題目三:

題目說明:

請開啟 JPD06_3.java,請使用前兩題的答案並以 Java 的抽象類別及繼承,完成以下幾個在功能上逐步擴充的堆疊 (stack),請依下列題意完成作答。將 JPD06_3.java 内的 class JPD06_3 修改為 class JPA06_3,將檔案另存為 JPA06_3.java 後編譯為 JPA06_3.class,所有題目中有使用到的類別也請編譯後一併儲存。

設計說明:

(1) 請使用前兩題的答案並以 Java 的抽象類別及繼承,完成以下幾個在功能上逐步擴充的堆疊 (Stack)。這幾個類別的繼承結構如下:

(2) 請寫一個 Stack 類別,Stack 提供了一個 top 方法,top 先使用 pop 傳回一個堆疊頂端的值,再使用 push 還原該堆疊的儲存值。此外,Stack 的子類別所產生的實例都只可以存放 String。

(3) 請再寫一個 TraceUnboundedStack 類別,這個類別繼承 UnboundedStack。

(4) TraceUnboundedStack 的 getSize 方法請傳回 stack.size() 後的數值。

(5) 每次呼叫 push 方法,請先印出【Pushing: + value】,再於下方印出此 value 值。

(6) 每次呼叫 pop 方法,請先印出【Poping: + value】,再於下方印出此 value 值。

(7) 請依照程式 class JPD06_3 内提供的順序依序印出,顯示如執行結果參考畫面。

執行結果參考畫面:



JPD06_3.java 檔案下載

程式碼:

import java.util.LinkedList;

abstract class Stack {
	abstract void push(String data);
	abstract String pop();
	abstract boolean empty();
	
	String top() {
		String data = pop();
		push(data);
		return data;
	}
}

class BoundedStack extends Stack {
	int size, index = 0;
	String[] stack;
	
	BoundedStack(int size) {
		this.size = size;
		stack = new String[size];
	}
	
	void push(String data) {
		if(index < size) {
			stack[index] = data;
			index++;
		}
		else
			System.out.println("stack-overflow");
	}
	
	String pop() {
		if(index > 0)
			return stack[--index];
		else
			return "stack-is-empty";
	}
	
	boolean empty() {
		return index == 0;
	}
}

class UnboundedStack extends Stack {
	LinkedList list = new LinkedList();
	
	void push(String data) {
		list.addFirst(data);
		System.out.println("Pushing: " + data);
	}
	
	String pop() {
		if(!list.isEmpty()) {
			String data = (String) list.getFirst();
			list.removeFirst();
			System.out.println("Poping: " + data);
			return data;
		}
		else
			return "Stack is empty!";
	}
	
	boolean empty() {
		return list.size() == 0;
	}
}

class TraceUnboundedStack extends UnboundedStack {
	int getSize() {
		return list.size();
	}
}

public class JPA06_3 {
    public static void main(String args[]) {
        TraceUnboundedStack s2 = new TraceUnboundedStack();
        s2.push("abc");
        s2.push("def");
        s2.push("ghi");
        s2.push("jkl");
        System.out.println(s2.getSize());
        System.out.println(s2.top());
        System.out.println(s2.pop());
        System.out.println(s2.pop());
        System.out.println(s2.pop());
        System.out.println(s2.empty());
        System.out.println(s2.pop());
        System.out.println(s2.empty());
        System.out.println(s2.getSize());
    }
}

JPA06_3.java 檔案下載



題目四:

題目說明:

請開啟 JPD06_4.java,以 generic 的方式改寫類別程式,請依下列題意完成作答。將 JPD06_4.java 内的 class JPD06_4 修改為 class JPA06_4,將檔案另存為 JPA06_4.java 後編譯為 JPA06_4.class,所有題目中有使用到的類別也請編譯後一併儲存。

設計說明:

(1) 請將 Stack 及 UnboundedStack 類別以 generic 的方式改寫,使得 UnboundedStack 能產生可以儲存數字的實例,也可以產生能儲存 String 的實例等等。

(2) 請依照程式 class JPD06_4 提供的順序依序印出,顯示如執行結果參考畫面。

執行結果參考畫面:



JPD06_4.java 檔案下載

程式碼:

import java.util.LinkedList;

abstract class Stack {
	abstract void push(Object data);
	abstract Object pop();
	abstract boolean empty();
	
	Object top() {
		Object data = pop();
		push(data);
		return data;
	}
}

class UnboundedStack extends Stack {
	LinkedList list = new LinkedList();
	
	void push(Object data) {
		list.addFirst(data);
		
	}
	
	Object pop() {
		if(!list.isEmpty()) {
			Object data = (Object) list.getFirst();
			list.removeFirst();
			
			return data;
		}
		else
			return null;
	}
	
	boolean empty() {
		return list.size() == 0;
	}
}

public class JPA06_4 {
    public static void main(String args[]) {
        UnboundedStack s = new UnboundedStack();
        s.push("abc");    
	s.push(2);    
	s.push("ghi");
        System.out.println(s.top());
        System.out.println(s.pop());
        System.out.println(s.pop());
        System.out.println(s.pop());
        System.out.println(s.pop());
    }
}

JPA06_4.java 檔案下載



題目五:

題目說明:

請開啟 JPD06_5.java,為題目四增加例外處理的功能,請依下列題意完成作答。將 JPD06_5.java 内的 class JPD06_5 修改為 class JPA06_5,將檔案另存為 JPA06_5.java 後編譯為 JPA06_5.class,所有題目中有使用到的類別也請編譯後一併儲存。

設計說明:

(1) 請為題目四增加例外處理的功能,使得 pop 一個空的堆疊時,可以印出【Stack is empty!】。

執行結果參考畫面:



JPD06_5.java 檔案下載

程式碼:

import java.util.LinkedList;

abstract class Stack {
	abstract void push(Object data);
	abstract Object pop();
	abstract boolean empty();
	
	Object top() throws Exception {
		Object data = pop();
		push(data);
		return data;
	}
}

class UnboundedStack extends Stack {
	LinkedList list = new LinkedList();
	
	void push(Object data) {
		list.addFirst(data);
		
	}
	
	Object pop() {
		if(!list.isEmpty()) {
			Object data = (Object) list.getFirst();
			list.removeFirst();
			
			return data;
		}
		else
			throw new EmptyException("Stack is empty!");
	}
	
	boolean empty() {
		return list.size() == 0;
	}
}

class EmptyException extends RuntimeException {		// 自訂的例外類別一定要是 Throwable 的衍生類別,也可以 extends Exception,但就要再新增一些 throws EmptyException。
	EmptyException(String str) {
		System.out.println(str);
	}
}

public class JPA06_5 {
    public static void main(String args[]) throws Exception {
        try {
            UnboundedStack s = new UnboundedStack();
            s.push("abc");
            s.push(2);
            s.push("ghi");
            System.out.println(s.top());
            System.out.println(s.pop());
            System.out.println(s.pop());
            System.out.println(s.pop());
            System.out.println(s.pop());
        } catch(EmptyException e) {}
    }
}

JPA06_5.java 檔案下載



TQC+ 物件導向程式語言 Java 6 第六類:物件導向程式設計與例外處理




如果覺得文章內容還不錯的話,麻煩請幫我點個讚!感謝

可以多點幾次喔~~

第一次點讚需使用 Google 或 Facebook 帳號註冊

發表迴響