У меня короткий класс:
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
}
Вы не сказали, почему вы пытались преобразовать все "int" в "T", но я уже могу сказать:
Вы не можете создать общий массив. Вместо того, чтобы давать размер конструктору, вы должны написать конструктор, чтобы взять массив из 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", потому что я всегда объявляю "окончательное" все, что могу.
Ваша top
переменная предназначена для хранения индекса в вашем массиве, представляющем вершину стека. Он не предназначен для хранения каких-либо фактических данных; это просто индекс. Поэтому, когда ваш класс Stack
общим, его не следует преобразовывать в тип T
Он должен оставаться int
.
Параметр для вашего конструктора, size
должен также иметь тип int
. Что касается создания общих массивов, обратитесь к разделу "Как создать общий массив".