Если вы хотите, чтобы значение temp
не зависело от экземпляра родительского класса display()
(LinkedListImp
?), Вам понадобится переменная статического класса.В Java ключевое слово static
отмечает переменную, которая принадлежит всему классу, а не отдельному экземпляру.Static в Java создает переменную, которая также известна как «переменная класса».По определению переменная класса не может быть локальной.Чтобы узнать больше о статических переменных, посмотрите, что должна сказать документация , или прочитайте этот вопрос StackOverflow, спецификация которого есть в ответе .
Но похоже, что вы пытаетесь использовать экземпляр класса, что означает, что вы не хотите статическую переменную.Вы абсолютно хотите, чтобы значение было привязано к классу.
Однако, чтобы это работало, вам необходимо заключить оба оператора в цикл while.В противном случае вы получите программу, которая перебирает все элементы связанного списка и печатает только последний.Это связано с тем, что в Java, если за оператором блока (if
, else
, for
, while
и т. Д.) Не следует фигурные скобки, он обрабатывает только следующую строку как содержимое блока.
public void display()
{
LinkedListImp temp = this;
while(temp.next!=null)
{
System.out.println("\n\t"+ temp.element +"\n");
temp=temp.next;
}
}
Чтобы изменить порядок здесь с помощью цикла, я бы использовал StringBuilder и собрал строку.
public void display()
{
LinkedListImp temp = this;
StringBuilder result = new StringBuilder();
while(temp.next!=null)
{
result.insert(0, "\n\t"+ temp.element +"\n"); // put the result at the front
temp=temp.next;
}
System.out.println(result.toString());
}
На основе ваших правок вы добавили рекурсиввызов метода, но это не обязательно с циклом.Если вы делаете рекурсию, удалите цикл.В этом случае рекурсия действует как как цикл.В этом случае просто распечатайте элемент после вызова дисплея со следующим элементом в обратном порядке или перед стандартным заказом.
public display() {
doDisplay(this);
}
private void doDisplay(LinkedListImpl item) {
if(item.next) // implicit != null
{
doDisplay(item.next);
}
System.out.println("\n\t" + temp.element + "\n"); // this line goes before
// the if statement for
// regular ordering
}