#java #methods #linked-list
#java #методы #связанный список
Вопрос:
У меня проблемы с мозгом, и по какой-то причине я не могу понять, как написать метод, в котором параметры пусты.
У меня есть метод здесь (пустой)
public void removeRepeat() {
}
Это для связанного списка, и я хочу удалить повторы. У меня есть другие методы ниже, которые я собираюсь использовать для этого:
public boolean remove(Object element) {
Node<T> current = head;
if(isEmpty()) {
return false;
}
if(current.getValue() == element){
head = head.getNext();
size--;
return true;
}
while(current.getNext().getValue() != element) {
current = current.getNext();
if(current == null) {
return false;
}
}
if(current.getNext().getNext() == null) {
tail = current;
}
current.setNext(current.getNext().getNext());
size--;
return true;
}
У меня также есть метод set и еще много чего, но мой вопрос, как правило, заключается в том, как написать метод, если параметров нет. Мне просто создать новую переменную? Как мне получить доступ к списку, который он хочет, чтобы я изменил? Я думаю создать цикл for для проверки повторений, а затем удалить повторяющийся элемент, но я не уверен, как построить цикл for.
for (int i=0; i< ???; i )
Комментарии:
1. Вы можете получить доступ ко всем переменным экземпляра из своего метода
Ответ №1:
Вообще говоря, существует четыре основных способа доступа к переменной внутри метода в Java:
- Укажите переменную в качестве параметра:
public void removeRepeat(SomeObject obj)
{
// do something with obj
}
- Пусть переменная будет членом (похоже, это верно для
head
вашего второго фрагмента кода):
SomeObject obj = new SomeObject();
public void removeRepeat()
{
// do something with obj
}
- Объявите переменную локально, то есть внутри метода:
public void removeRepeat()
{
SomeObject obj = new SomeObject();
// do something with obj
}
- Должен ли он быть доступен статически где-нибудь:
// some other class
public class SomeClass
{
public static final Object obj = new SomeObject();
}
...
// then in your class:
public void removeRepeat()
{
SomeObject obj = SomeClass.obj;
// do something with obj
}
Я рекомендую ознакомиться с некоторыми основами Java, это должно прояснить некоторые заблуждения, которые у вас могут возникнуть по этому поводу.
Ответ №2:
Судя по вашему remove(Object element)
методу, у вас есть класс, который содержит a head
и tail
поле, а также size
поле.
Если вы добавляете новый метод removeRepeat()
в тот же класс, вы можете продолжить и получить доступ к этим полям, как в remove(Object)
методе. Например,
public void removeRepeat() {
// Make a method-local copy of the class's "head" field.
Node<T> current = head;
// Iterate through the list here:
while (current != null) {
// do something
current = current.getNext();
}
etc...
}