在这里回顾我的基本ADT东西,并试图通过学习Java同时杀死两只鸟,而我正在努力编写一个简单的算法,用于合并排序和通用链表(我自己创建)。事实证明,这比我想象的要困难得多!有人可以帮帮我吗?我将开始研究基础知识,并将在我进一步了解时更新这篇文章。
我的通用链表代码如下:
public class NodeList<T> {
private Comparable head;
private NodeList tail;
public NodeList( Comparable item, NodeList list ) {
head = item;
tail = list;
}
}
我正在尝试在我创建的另一个类中访问此类,如下所示:
public class MyList<T> {
private NodeList<T> nodes;
private int size;
public MyList( ) {
nodes = null;
}
public MyList(T[] array ){
for(int countArray = 0; countArray <= array.length() ; countArray++) {
nodes= new NodeList( value, nodes );
size++;
}
}
应使用链表从数组中添加通用项。不幸的是,它没有,这是我遇到的第一个问题。我收到了错误:
找不到符号:方法长度()。
有人可以就如何解决这个问题给我一些建议吗?
非常感谢!
答案 0 :(得分:7)
你没有length()方法但是长度成员:array.length
此外,在使用之前,您需要在countArray达到array.length并初始化大小之前停止迭代:
final int arrayLength = array.length;
size = arrayLength;
nodes = null;
for(int i = 0; i < arrayLength; ++i) {
nodes = new NodeList(array[i], nodes);
}
或
nodes = null;
size = array.length;
for(T element : array) {
nodes = new NodeList(element, nodes);
}
答案 1 :(得分:2)
集合类上的方法是.size()
,或者数组上的方法是.length
属性。
但是你可以使用“增强”for循环(也就是foreach)循环遍历其中任何一个:
for( T element : array ) {
nodes = new NodeList( value, nodes );
size++;
}
答案 2 :(得分:1)
length
是数组上的field,而不是方法。删除括号。
for(int countArray = 0; countArray <= array.length ; countArray++) {
nodes= new NodeList( value, nodes );
size++;
}
这是编写整个构造函数的更好方法:
public MyList(T[] array ){
nodes = null;
for(T t : array) {
nodes = new NodeList(t, nodes);
}
size = array.length;
}
答案 3 :(得分:1)
除了其他人发布的内容之外,您可能还想使用通用参数T:
public class NodeList<T> {
private T head;
private NodeList<T> tail;
public NodeList( T item, NodeList list ) {
head = item;
tail = list;
}
}
答案 4 :(得分:1)
如果您想确保只有可比的项目:
public class NodeList<T extends Comparable<T> > {
private T head;
private NodeList<T> tail;
public NodeList( T item, NodeList<T> list ) {
head = item;
tail = list;
}
}
和
public class MyList<T extends Comparable<T>> {
...
}
此外,如果构造函数使用var args,则可以更方便地创建列表:
public MyList(T... array ) {
for( T item : array ) {
nodes = new NodeList<T>(item, nodes);
}
size = array.length;
}
这样你可以按如下方式调用构造函数:
new MyList<Long>(); //empty list
new MyList<Long>( 1L ); //one entry
new MyList<Long>( 1L, 2L, 3L ); //3 entries
Long[] array = new Long[] { 1L, 2L, 3L, 4L };
new MyList<Long>( array ); //use existing array
答案 5 :(得分:0)
是array.length而不是array.length()。
for(int countArray = 0; countArray <= array.length ; countArray++) {
将解决您的编译错误。