私は、4つのタイプ(整数、ダブル、ストリング、キャラクタ)のうちの1つのみをとる汎用のマルチウェイツリーを作成しています。私は、匹敵するインターフェイスと私の挿入機能に問題があります。ここに私のコンソール出力されるマルチウェイツリーに匹敵するインターフェイスの問題
public class BTree<T extends Comparable<? super T>>
{
private int m=0, height=0, numkeys=0;
private BTreeNode<T> root;
boolean ready=false;
class BTreeNode<T extends Comparable<? super T>>
{
boolean leaf = true;
int keyTally = 1;
Comparable<T> keys[] = new Comparable[m-1];
BTreeNode<T> references[] = new BTreeNode[m];
BTreeNode(T key)
{
keys[0] = (Comparable<T>) key;
for (int i=0; i<m; i++)
references[i] = null;
}
}
public BTree(int c)
{
root=null;
m=c;
}
// Not finished - can't test due to other bug
public boolean insertElement(T elem)
{
insert(elem, root, height);
numkeys++;
return true;
}
// And now the ploblem function
private BTreeNode<T> insert(T elem, BTreeNode<T> node, int hvar)
{
int i;
BTreeNode<T> temp = null;
if (hvar == 0)
{
for (i = 0; i < node.keyTally; i++)
if (elem.compareTo(node.keys[i]) < 0)
break;
}
else
{
for (i = 0; i < node.keyTally; i++)
{
if ((i+1 == node.keyTally) || elem.compareTo(node.keys[i]) < 0)
{
Node n = insert(elem, node.references[i++], hvar-1);
if (n == null)
return null;
temp.keys[0] = n.keys[0];
temp.references[0] = n;
break;
}
}
}
for (int j = node.keyTally; j > i; j--)
node.keys[j] = node.keys[j-1];
node.children[i] = temp;
node.keyTally++;
if (node.keyTally < m)
return null;
else
{
BTreeNode<T> newNode = null;
newNode.keyTally = m/2;
for(i=0; i<m/2; i++)
newNode.references[i] = node.references[m/2+i];
return newNode;
}
return null;
}
そして:
BTree.java:169: error: method compareTo in interface Comparable<T#2> cannot be applied
to given types;
if (elem.compareTo(node.keys[i]) < 0)
^
required: CAP#1
found: Comparable<T#1>
reason: actual argument Comparable<T#1> cannot be converted to CAP#1 by method
invocation conversion
where T#1,T#2 are type-variables:
T#1 extends Comparable<? super T#1> declared in class BTree
T#2 extends Object declared in interface Comparable
where CAP#1 is a fresh type-variable:
CAP#1 extends Object super: T#1 from capture of ? super T#1
BTree.java:176: error: method compareTo in interface Comparable<T#2> cannot be
applied to given types;
if ((i+1 == node.keyTally) || elem.compareTo(node.keys[i]) < 0)
^
required: CAP#1
found: Comparable<T#1>
reason: actual argument Comparable<T#1> cannot be converted to CAP#1 by
method invocation conversion
where T#1,T#2 are type-variables:
T#1 extends Comparable<? super T#1> declared in class BTree
T#2 extends Object declared in interface Comparable
where CAP#1 is a fresh type-variable:
CAP#1 extends Object super: T#1 from capture of ? super T#1
BTree.java:178: error: cannot find symbol
Node n = insert(elem, node.references[i++], hvar-1);
^
symbol: class Node
location: class BTree<T>
where T is a type-variable:
T extends Comparable<? super T> declared in class BTree
BTree.java:191: error: cannot find symbol
node.children[i] = temp;
^
symbol: variable children
location: variable node of type BTree<T>.BTreeNode<T>
where T is a type-variable:
T extends Comparable<? super T> declared in class BTree
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
4 errors
私はそれを文句にするために同等のインターフェースと間違ってやっているのか理解していないここで私はこれまで書いてきた関連するコードですcompareToメソッドについてまた、文字列型を使用するとどうなるのでしょうか?アルファベット順にどれが最初に来るのかが分かると思います。ありがとう:)
ありがとうございました!私は単純に 'elem.compareTo(node.keys [i])'を 'node.keys [i] .compareTo(elem)'に変更しなければなりませんでした。 – Tim