PDA

View Full Version : Làm sao để phục hồi Stack trong Java



phamhoangle
19-03-2007, 12:33
Mình phải tạo 1 recursive method để in ra số thứ i từ trên xuống trong 1 Stack chứa các số nguyên. Nếu i lớn hơn số phần tử trong Stack thì method này phải throw ra 1 exception.
Yêu cầu là method này ko được làm thay đổi stack.
Giới hạn : chỉ được dùng 4 method trong class Stack :
- peek()
- pop()
- push()
- empty

Method của mình như sau :

int view(Stack<Integer> st, int i) throws EmptyStackException {

if((i == 1) && (st.empty() == false)) return st.peek();

int a = st.pop();
if(st == emtpy) {
throw new EmptyStackException("invalid index");
}
else {
int k = view(st,i-1);
}
st.push(a);
return k ;
}

Vấn đề là khi method này throw ra 1 exception (trong trường hợp i ko thỏa mãn) , no thoát ngay khỏi method và ko thực hiện st.push(a) nữa. Khi đấy st sẽ thành empty ???

Có cách nào mà sau khi throw ra exception, st vẫn được bảo toàn ko ?

Ai giải quyết giúp mình với.

truongngocdai
19-03-2007, 13:04
bạn dùng ObjectOutputStream và ObjectInputStream, hai thứ đó chuyên dùng để ghi/đọc Object vào/từ file

phamhoangle
19-03-2007, 13:55
Mình ko hiểu 2 cái đó dùng trong trường hợp này để làm j ?

truongngocdai
19-03-2007, 21:09
mình được học nhưng chưa thử :D

bete
20-03-2007, 14:59
Tui nghĩ có lẽ bạn thiếu phần catch và rethrow exception

-thân
---------------------------------------
Tui nghĩ như vầy:



thủ tục view(Stack st, int i)
if i là 0: return
else /* i > 0 */
if stack rỗng: throw exception
else /* stack không là rỗng */
pop từ st vô v;
thử gọi view(st, i-1);
if có exception
push từ v vô trở lại st;
throw exception (truyền ngược ra ngoài)
else /* không có exception*/
in ra v nếu i là 1
push từ v vô trở lại st;
end if
end if
end if


(có gì sai sót mong được góp ý, xin cám ơn)

-thân

quockhanh81
08-04-2007, 23:13
bạn gọi method này ở đâu thì nên kèm với một surround try và catch.
vd
try {
// xủ lý hàm view.....
}catch(EmptyStackException e){
// in xem nó thong bao loi gi
System.out.println(e.getMessage());
}