0

重複の可能性:
Java方法:ジェネリック配列の作成

import java.util.EmptyStackException;
import java.util.Vector;

public class Stack<E> extends Vector<E> {
    private E a[];
    private int top;

    public void Stack() {
        a = new E[100];
        top = -1;
    }

    public void Stack(int n) {
        a = new E[n];
        top = -1;
    }

    public E pop() {
        E obj;
        int len = size();
        if (top == -1)
            throw new EmptyStackException();
        else
            obj = a[top--];
        return obj;
    }

    public void push(E e) {
        if (e == null)
            throw new NullPointerException();
        else if (top == size() - 1)
            System.out.println("Stack full");
        else {
            a[++top] = e;
            System.out.println("pushed :" + e);
        }

    }

    public int size() {
        int i;
        for (i = 0; a[i] != null; i++)
            ;
        return i;
    }

}

これは、Javaのスタックジェネリッククラスです。Stack()とStack(int n)の2つのコンストラクター内の配列宣言でエラーが発生します。どちらの場合も、エラーは「ジェネリックアレイの作成」です。助けてください

4

2 に答える 2

1

ジェネリック配列は作成できません。したがって、オブジェクト配列を使用します。


import java.io.*;
 import java.util.EmptyStackException;
 import java.util.Vector;
 public class Stack extends Vector 
 {
   private Object a[];
   private int top;
   public void Stack() 
  {
    a=new Object[100];
    top=-1;
  }
  public void Stack(int n) 
  {
    a=new Object[n];
    top=-1;
  }
  public E pop() 
  {
    E   obj;
    int len = size();
    if (top == -1)
        throw new EmptyStackException();
    else
       obj=(E) a[top--]; 
    return obj;
  }
  public void push(E e) 
  {
    if(e==null)
        throw new NullPointerException();
    else if(top==size()-1)
        System.out.println("Stack full");
    else
    {
       a[++top]=e;
       System.out.println("pushed :"+e);
    }


}
public int size() 
{
    int i;
    for(i=0;a[i]!=null;i++);
    return i;
}
}
于 2012-04-11T12:59:50.750 に答える
1

クラスにコンストラクターはありません。これらはメソッドです。建設業者の場合は、voidタイプを削除してください。コンストラクターには戻り型がありません。また、クラス名は小文字のスタックで始まり、コンストラクターはスタックで始まります。クラスの名前をStackに変更し、void型を削除します。

あなたはこのようにする必要があります

      public  Stack(Class<E> cls) 
 {
      a = (E[]) Array.newInstance( cls);

   top=-1;
 }

public  Stack(Class<E> cls,int n) 
  {
   a = (E[]) Array.newInstance( cls,n);
    top=-1;
  }

ジェネリックアレイを参照してください

以下は、mainメソッドでオブジェクトを作成する作業クラスです。

class Stack<E> extends Vector<E> {
    private E a[];
    private int top;

    public   Stack(Class<E> cls) 
    {


      a = (E[]) Array.newInstance( cls);

      top=-1;
    }

    public   Stack(Class<E> cls,int n) 
    {


      a = (E[]) Array.newInstance( cls,n);

      top=-1;
    }

    public E pop() {
        E obj;
        int len = size();
        if (top == -1)
            throw new EmptyStackException();
        else
            obj = a[top--];
        return obj;
    }

    public void push(E e) {
        if (e == null)
            throw new NullPointerException();
        else if (top == size() - 1)
            System.out.println("Stack full");
        else {
            a[++top] = e;
            System.out.println("pushed :" + e);
        }

    }

    public int size() {
        int i;
        for (i = 0; a[i] != null; i++)
            ;
        return i;
    }

  public static void main(String...strings ){
      Stack<Integer> st=new Stack<Integer>(Integer.class,n);
  }  

}
于 2012-04-11T12:55:43.270 に答える