2017-12-08 9 views
1

私はこのコードをJavaでスタックの一般実装としています。 私は2000ジェネリックスタック内の要素をJavaで印刷できない

public class Stack_using_Array<E> { 
    int N; 
    int i; //starting index 
    private E arr[]; 
    @SuppressWarnings("unchecked") 
    Stack_using_Array(int N){ 
     arr=(E[]) new Object[N]; 
     i=0; 
    } 

    @SuppressWarnings("unchecked") 
    void push(E object) throws FullStackException{ 
     if(i==N-1){ 
      throw new FullStackException("stack is full"); 
     } 
     arr[i]=(E) new Object(); 
     arr[i]=object; 
     i++; 
    } 
    @SuppressWarnings("unchecked") 
    E pop() throws FullStackException{ 
     if(i==0){ 
      throw new FullStackException("stack is empty"); 
     } 
     arr[i]=(E) new Object(); 
     E ob=arr[i]; 
     arr[i]=null; 
     i--; 
     return ob; 
    } 
    public String toString(){ 
     String s=""+arr[i]; 
     return s; 
    } 
    public static void main(String []args){ 
     Stack_using_Array<Integer> stack= new Stack_using_Array<Integer>(); 
     try{ 
      stack.push(67); 
      stack.push(90); 
      stack.push(78); 
      System.out.println(stack.pop()); 
      System.out.println(stack.pop()); 
      System.out.println(stack.pop()); 
     } catch (FullStackException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

} 

いくつかの固定サイズで配列の実装を使用していたが、私はそれらを印刷しようとすると、結果が

[email protected] 
[email protected] 
[email protected] 

のように来て、それは多分オブジェクトのアドレスです。に、他の2行を

arr[i]=(E) new Object(); 

とも変更します。私は、

答えて

0

まず問題はpop()方法であるIntegers.pleaseヘルプを印刷し、この行を削除したい場合は、ここで新しい値をインスタンス化する必要はありませんインデックスと配列の位置を管理し、それは同じではありません。

E ob = arr[i-1]; 
arr[i-1] = null; 

第二の問題は:toStringメソッドを削除し、それはcompletly間違っていると、不要な例外を引き起こす可能性があります。

+0

これで機能しました。ありがとう@ラファエルギレン –

関連する問題