[解決済み]
私は(願わくば)次の仕事のためにJavaを学んでいるC++の人です。そのため、私は自分でJavaでリンクリストを実装する練習をしています。標準の二重リンクリストの実装を終了しましたが、うまく機能しています。しかし、その後、順序付きリンクリストを作成しようとしましたが、「<」演算子をオーバーロードできないことが深刻な問題になることに気付きました。
このサイトで他の人の質問を調べましたが、まだうまくいきません。そのため、コードを投稿して、自分のしていることに合わせた回答を得ると思いました。
以降..
リンクリストクラス:
public class MyList<T> {
/*** ~Public Interface~ ***/
//insert, delete, size, print, etc.
...
/*** Private Data Members ***/
//node begin, end, T data
....
/** Private node class **/
//Represents the nodes in the list
private class node implements Comparable<T>{ //Don't know if this is right
node next;
node prev;
T data;
node(node p, node n, T d){
next = n;
prev = p;
data = d;
}
@Override
public int compareTo(T o) {
return (data <= o ? 1 : 0); //Get an error still here
}
/** Iterator **/
//iterator class
}
順序付きリンクリストクラス:
public class OrderedList<T> extends MyList<T> implements Comparable<T>{ //Pretty sure this is wrong
public void insert(T d){
if(empty()){
push_front(d);
} else {
MyList<T>.MyListIter it = begin();
int i = 0;
//This won't work obviously
for(; i < size() || it.current().compareTo(it.next()) == -1; ++i, it.next()){
//find node to place the new node before it
it.prev() //Need to go back one since we went forward in the loopcheck.
}
}
}
ここで本当に途方に暮れています。この順序付きリストの実装を完了するために、演算子のオーバーロードに似たものをどのように実現しますか?
また、Javaの継承についても把握しようとしているので、その点で何かおかしいと思ったら、遠慮なくチャイムを鳴らしてください。
皆さんありがとう。
アップデート:
さて、私は自分がしなければならないと思った変更を加えましたが、それでもエラーが発生しています。新しいコードは次のとおりです。
MyListクラス内のノードクラス:
private static class node<T> implements Comparable<T>{
node<T> next;
node<T> prev;
T data;
node(node<T> p, node<T> n, T d){
next = n;
prev = p;
data = d;
}
public int compareTo(T o) {
return ((Comparable<T>) this.data).compareTo(o);
}
}
注文リスト:
public class OrderedList> extends MyList {
compareToの使用法:
if(((Comparable<T>) it).compareTo(it.next()) == -1) found = true;
コンパイラーは私にそれらのキャストを強制しました、そして今エラーは次のとおりです:
MyList$MyListIter cannot be cast to java.lang.Comparable
リストイテレータクラスは次のようになります。
public class MyListIter{
そしてそれはMyListの中にあります。
編集[解決済み]
it.current()を実行して実際のデータにアクセスする代わりに、イテレータを使用していたときは、it.compareTo(..)を実行していましたが、もちろん、イテレータはデータではないため、何も知りません。 compareTo()。