2013-01-04 56 views
0
import java.util.ArrayList; 

class Stack { 
    private ArrayList stack; 
    private int pos; 

    Stack() { 
     stack = new ArrayList(); 
     pos = -1; 
    } 
    int pop() { 
     if(pos < 0) { 
      System.out.println("Stack underflow."); 
      return 0; 
     } 
     int out = stack.get(pos); 
     stack.remove(pos); 
     pos--; 
     return out; 
    } 
} 

我想寫一個基本的變量長度堆棧,這是我的代碼片段。當我運行這個,我得到一個錯誤:爲什麼int作爲Object傳遞?

Main.java:16: error: incompatible types 
    int out = stack.get(pos); 
        ^
required: int 
found: Object 

爲什麼這是作爲一個對象傳遞?

+1

'stack.get()'返回'Object'因爲'stack'是'ArrayList'。這與'out'的類型不兼容。指示錯誤發生的'^'是一條紅色的鯡魚。 – NullUserException

+0

@NullUserException錯誤是正確的,'^'字符位置只是有點怪異。它指的是返回類型,而不是'pos'中的類型,我承認使用'^'指向返回類型有點困難。 – cdhowie

回答

3

目前你沒有定義在ArrayList稱爲stack所以你會得到從ArrayList.get原始Object返回類型舉行泛型類型:

您需要更換

ArrayList stack; 

ArrayList<Integer> stack; 

和類似的

stack = new ArrayList(); 

stack = new ArrayList<Integer>(); // new ArrayList<>(); for Java 7 

也有看看使用java.util.Stack

+0

謝謝,它工作完美。我只是寫這個作爲自學Java的一種方式,否則我會使用內置的。 – cjm

1

stack沒有被告知哪些變量類型其持有,因此訴諸通用Object

ArrayList stack; 

應該是

ArrayList<Integer> stack; 
1

stack.get(int)該方法返回一個對象。這裏的int只是索引。如果你想在指數int讓你的籌碼的價值和它返回一個Integer你需要這樣做:

Integer x = stack.get([int index position]);

相關問題