Класс стека Java - PullRequest
       18

Класс стека Java

0 голосов
/ 29 ноября 2011

Хорошо, я написал свой собственный класс стека, не используя встроенный класс.Класс стека содержит объекты List of Entry и размер стека (оба поля экземпляра).В классе стека у меня есть метод push, который добавляет объект Entry в стек.При добавлении размер стека должен увеличиваться на единицу.

Это отлично работает, я проверил, и это работает.Я, вероятно, должен также объяснить, что содержится в моем классе Entry.Класс Entry в основном имеет конструктор, который принимает число и хранит его.

Так что для класса Stack мой метод push выглядит следующим образом:

public class Stack{

private List<Entry> entries = new ArrayList<Entry>();
private int size;

public void push(Entry entry)
{
  if(entry == null)
  String message = "The Parameter given was illegal(null)";
  throw new IllegalArgumentException(message);
}
entries.add(entry) // adds the entry object to the stack (or entries List)
size ++ // increments the size by 1. 
}

Опять же, это прекрасно работает, я могу добавлять объекты Entry в мой стек и увеличивать размер, как следует,Теперь нам нужно создать новый класс с именем NumberStack, который в основном скрывает детали и вызывает метод push в классе стека из этого класса.Я покажу вам, как выглядит мой класс NumberStack:

public class NumberStack {


private Stack numStack = new Stack();


public void push(final float i) {


numStack.push(new Entry(i));
} 

Итак, в основном он делает то же самое, что и метод push в классе Stack, но скрывает детали.Теперь это не работает!Ничто не добавляется в стек (список записей), когда я вызываю этот метод.Если я пытаюсь нажать два числа с помощью моего метода Push NumberStack.он должен вызвать метод push в классе Stack и добавить объекты Entry.Но ничего не происходит.Опять же, если я просто нажму прямо в своем классе стека, он будет работать отлично.

Почему метод push в моем классе NumberStack не работает?Это не имеет никакого эффекта, ничто не добавляется в стек.

РЕДАКТИРОВАТЬ:

Я пытался проверить это:

public static void main(String[] args){

System.out.println("Debugging...");
NumStack numStack = new NumStack();
Stack stack = new Stack();
System.out.println("Size before pushing from NumStack = " + stack.size());
numStack.push(5);
System.out.println("Size after pushing from NumStack method push =  " + stack.size());
stack.push(new Entry(5));
System.out.println("Size after pushing directly from Stack  = " + stack.size());
}

Вышло выше:

Размер до нажатия из NumStack = 0

Размер после нажатия из метода NumStack push = 0

Размер после нажатия непосредственно из стека = 1

Любая помощь очень ценится Спасибо.

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

В первую очередь:

public void push(Entry entry)
{
  if(entry == null)
  String message = "The Parameter given was illegal(null)";
  throw new IllegalArgumentException(message);
}
entries.add(entry) // adds the entry object to the stack (or entries List)
size ++ // increments the size by 1. 
}

никогда не будет работать.Вы хотите

public void push(Entry entry)
{
  if(entry == null)  
  **{**  
  String message = "The Parameter given was illegal(null)";
  throw new IllegalArgumentException(message);
  **}**
entries.add(entry) // adds the entry object to the stack (or entries List)
size ++ // increments the size by 1. 
}

Кроме того, операторы печати неверны:

System.out.println("Size after pushing from NumStack method push =  " + stack.size());

должно быть:

System.out.println("Size after pushing from NumStack method push =  " + **numStack.size()**);

Это ошибка, так как вы ссылаетесь на неправильный экземпляр.

0 голосов
/ 29 ноября 2011

Внутри класса NumberStack вы создаете объект Stack с именем numStack. Когда вызывается numStack.push(5);, он переходит к методу push-метода класса NumberStack и помещается в объект стека с именем numStack. Поэтому в этом объекте увеличивается размер переменной экземпляра.Но при тестировании вы создаете еще один экземпляр класса Stack, который называется stack.Но размер переменной экземпляра в этом объекте по-прежнему равен 0.

Но внутри метода main вы печатаете размер из экземпляра стека. Вот почему вы получаете ответ 0.

...