私はJavaを学び始めています。私はコードに含まれている特定のインタフェースを持つ二重リンクリストを実装する必要があります。 私のメソッドinsertAtTheEnd()
は、いくつかの要素を挿入した後に要素に値null
があるので、正しく機能していないようです。 そのトピックについて同様の質問を確認し、問題への回答を適用しようとしましたが、それ以上は得られませんでした。どのように私はそれを動作させるためにこのメソッドを設定することができますので、どんな助けも高く評価されます。 ありがとう!また、ここでJavaで二重リンクされたリストにノードを追加する方法は?
public interface IValueElement
{
public String getName();
public void setName(String paramName);
public int getValue();
public void setValue(int paramValue);
}
public interface IListElement
{
public IValueElement getValueElement();
public void setValueElement(IValueElement value);
public IListElement getPredecessor();
public void setPredecessor(IListElement predecessor);
public IListElement getSuccessor();
public void setSuccessor(IListElement successor);
}
public interface IList
{
public IListElement getHead();
public void insertAtTheEnd(IValueElement value);
//...
}
public class List implements IList
{
public List()
{
if (head == null)
{
head = new ListElement(null);
}
else
{
return;
}
}
private IListElement head;
public IListElement getHead()
{
return head;
}
public void insertAtTheEnd(IValueElement value)
{
if (head.getSuccessor() != null)
{
IListElement l = head;
while (l.getSuccessor() != null)
l = l.getSuccessor();
IListElement q = new ListElement(value);
l.setPredecessor(q);
}
else
{
IListElement q = new ListElement(value);
q.setPredecessor(head);
q.setSuccessor(null);
head.setSuccessor(q);
head.setPredecessor(q);
}
}
}
はValueElementとListElementの私の実装である:
//ListElement.java
public class ListElement implements IListElement
{
public ListElement(IValueElement value)
{
this.valueElement = checkValueElementAttribute(value);
}
private IValueElement checkValueElementAttribute(IValueElement value)
{
return (value == null) ? new ValueElement(null, 0) : value;
}
private IValueElement valueElement;
public IValueElement getValueElement()
{
return this.valueElement;
}
public void setValueElement(IValueElement value)
{
if (value != null)
{
this.valueElement = value;
}
}
private IListElement predecessor;
public IListElement getPredecessor()
{
return this.predecessor;
}
public void setPredecessor(IListElement predecessor)
{
this.predecessor = predecessor;
}
private IListElement successor;
public IListElement getSuccessor()
{
return this.successor;
}
public void setSuccessor(IListElement successor)
{
this.successor = successor;
}
}
// ValueElement.java
public class ValueElement implements IValueElement
{
private String name;
public String getName()
{
return this.name;
}
public void setName(String paramName)
{
if (paramName != null)
{
this.name = paramName;
}
}
public ValueElement(String name, int value)
{
if (name == null || name.equals(""))
{
name = "default";
}
else
{
this.name = name;
}
this.value = value;
}
private int value;
public int getValue()
{
return this.value;
}
public void setValue(int paramValue)
{
if (paramValue != 0)
{
this.value = paramValue;
}
}
public String toString()
{
return "Name: " + this.name + " - Value: " + this.value;
}
}
すべきではないので、同じ要素に先行および後続の両方の設定が含まれています新人y構築オブジェクトは常に 'head'をnullとして持ちます。コンストラクタを完全に削除し、宣言したところで 'head'を初期化することができます。 – Kayaman
あなたの 'if'ブロックを見てください。 elseブロックとは異なり、それは何かの後継を設定しません。だから何かが欠けている。また、qは新しいエンドノードであるため、前のノードではなく 'l'の後継ノードでなければなりません。良い変数の命名はあなたを助けるでしょう。 –
@Kayaman:そうです、ヒントのおかげで。頭はヌルではないはずですが、これは間違いです。 – mark