2017-03-19 2 views
0

これは私のコード全体です。問題は解決のためにArrayを使用する必要があります。関係なく、私は文字列、整数または任意の他のオブジェクトから使用されjava.lang.Integer型values[top++] = nextElement;で:私はそれをコンパイルするとスレッド "main"の例外java.lang.ArrayStoreException配列にオブジェクトを格納するとき

import java.lang.reflect.Array; 

public class MyStack<T> { 
    public MyStack (Class<T[]> _class,int size){ 
     final T[] values = (T[]) Array.newInstance(_class,size); 
     this.values = values; 
     this.size=size; 
    } 

    private T[] values; 
    private int top=0,size; 

    public void push(T nextElement){ 
     if(isFull()){ 
      System.out.println("full"); 
     } 
     else { 
      values[top++] = nextElement; 
     } 
    } 

    public T pop(){ 
     if(isEmpty()) { 
      System.out.println("empty"); 
      return null; 
     } 
     else { 
      return values[top--]; 
     } 
    } 

    public boolean isEmpty(){ 
     if (top==0)return true; 
     return false; 
    } 

    public boolean isFull(){ 
     if(top==size-1)return true; 
     else return false; 
    } 

    public static void main(String args[]){ 
     MyStack<Integer> myStack = new MyStack<Integer>(Integer[].class,9); 
     for (int i =0;i<10;i++) 
     { 
      myStack.push(i); 
     } 
     while(!myStack.isEmpty()){ 
      System.out.println(myStack.pop()); 
     } 
    } 
} 

は、それがスレッド「メイン」java.lang.ArrayStoreExceptionで例外をスローしません。 この問題を解決する方法はありますか?

答えて

1

コンストラクタにはClass<T[]>が必要ですが、Class<T>になる必要があります。valuesには可変シャドウも必要ありません。

public boolean isEmpty() { 
    return top == 0; 
} 

様またはisFull

public boolean isFull() { 
    return top == size - 1; 
} 
のために - 私はあなたが(ちょうどあなたが直接テストしている状態を返す) isEmptyため if elseチェーンを必要としない

public MyStack(Class<T> _class, int size) { 
    this.values = (T[]) Array.newInstance(_class, size); 
    this.size = size; 
} 

ようにそれを記述します。

関連する問題