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)。在这两种情况下,错误都是“通用数组创建”。请帮忙

4

2 回答 2

1

您的类中没有构造函数,这些是方法。对于构造函数,请删除 void 类型。构造函数没有返回类型。此外,您的类名以小写字母 stack 开头,构造函数以 Stack 开头。将您的类重命名为 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 回答
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 回答