Как определить целочисленные переменные для универсального класса в Java?

1

У меня короткий класс:

public class Stack {

private int[] data;
private int Top;

Public Stack(int size) {

   data = new int[size];
   top = -1;

}

public void Push (int value) {

   top++;
   data[top] = value;

}

public int pop() {

   return data[top--];

}

public int top() {

   return data[top];

}

И я получаю кучу ошибок "не могу преобразовать из int в T"... И также получить ошибку в определении массива конструктора...

Это мой код, я новичок, помогите мне понять это:

public class Stack <T> {


    private T[] data;
    private T top;

    Public Stack(T size) {

    data = new T[size];// im getting error here "cannot create a generic array of T...
    top = -1; // what should I do with this?

    }

    public void Push (T value) {

    top++; //cannot convert from int to T
    data[top] = value; //cannot convert from int to T

    }

    public T pop() {

    return data[top--]; //cannot convert from int to T

    }

    public T top() {

    return data[top]; //cannot convert from int to T

   }
  • 0
    Значит, ваш код неполон, так как вы не показали метод main ()!
Теги:

2 ответа

2
Лучший ответ

Вы не сказали, почему вы пытались преобразовать все "int" в "T", но я уже могу сказать:

  • "Общественность" (видимость конструктора) должна быть без капитала.
  • Ваша переменная "top" должна быть int: независимо от типа T, переменная top является индексом.
  • Вы не можете создать общий массив. Вместо того, чтобы давать размер конструктору, вы должны написать конструктор, чтобы взять массив из T.

    public class Stack<T> {
    
        private final T[] data;
        private int top;
    
        public Stack(final T[] data) {
            this.data = data;
            top = -1;
        }
    
        public void Push(final T value) {
            top++;
            data[top] = value;
        }
    
        public T pop() {
            return data[top--];
        }
    
        public T top() {
            return data[top];
        }
    }
    

edit: Я также добавил "final" в поле "data", потому что я всегда объявляю "окончательное" все, что могу.

  • 0
    Спасибо чувак. это работает. но есть ли способ сохранить конструктор таким, какой он есть, и при этом сделать его универсальным? может быть с классом-оберткой? потому что я уверен, что должен изменить его параметры .. @ syme
  • 0
    Я не понимаю ваш новый вопрос, потому что он универсальный, и вы не можете создать универсальный массив.
Показать ещё 3 комментария
1

Ваша top переменная предназначена для хранения индекса в вашем массиве, представляющем вершину стека. Он не предназначен для хранения каких-либо фактических данных; это просто индекс. Поэтому, когда ваш класс Stack общим, его не следует преобразовывать в тип T Он должен оставаться int.

Параметр для вашего конструктора, size должен также иметь тип int. Что касается создания общих массивов, обратитесь к разделу "Как создать общий массив".

  • 0
    о, понял Благодарю. а по поводу отдыха? я имею в виду, теперь у меня все еще есть проблема с массивом @rgettman
  • 0
    Я обновил свой ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню