我正在尝试创建类型为Object的自定义arrayList(coordinated)的linkedList(元素) 我正在寻找的输出是
Arraylist1 coord1 [2,5,1]
Arraylist2 coord2 [7,6,9]
LinkedList List1 [[2,5,1],[7,6,9]]
这是我的输出
[2 5 1] [7 6 9]
assignment1.arrayList@33909752
assignment1.arrayList@55f96302
我尝试使用没有运气的toString方法 有人可以告诉我如何在不指向内存的情况下打印输出。 我是否需要一种方法来访问特定位置(在linkList中)的特定元素并获取其坐标?
这是我的代码: 谢谢
public class arrayList {
private Object[] myList;
private int counter = 0;
private int capacity = 100;
public arrayList() {
myList = new Object[this.capacity];
}
public Object get(int index) {
if (index < counter) {
return myList[index];
} else {
throw new ArrayIndexOutOfBoundsException();
}
}
public void add(Object obj) {
myList[counter++] = obj;
}
public Object remove(int index) {
if (index < counter) {
Object obj = myList[index];
int temp = index;
myList[index] = null;
while (temp < counter) {
myList[temp] = myList[temp + 1];
myList[temp + 1] = null;
temp++;
}
counter--;
return obj;
} else {
throw new ArrayIndexOutOfBoundsException();
}
}
public int size() {
return counter;
}
public void display(Object obj1) {
System.out.print("[");
for (int i = 0; i < this.size(); i++) {
System.out.print(" " + this.get(i) + " ");
}
System.out.print("]");
System.out.println();
}
}
public class linkedList {
public Cube firstLink;
public Cube next;
linkedList() {
firstLink = null;
}
public void insertFirstLink(Object e) {
Cube newLink = new Cube(e);
newLink.next = firstLink;
firstLink = newLink;
}
public boolean isEmpty() {
return (firstLink == null);
}
public Cube removeFirst() {
Cube linkReference = firstLink;
if (!isEmpty()) {
firstLink = firstLink.next;
} else {
System.out.println("Empty Linked list!");
}
return linkReference;
}
public void display() {
Cube theLink = firstLink;
while (theLink != null) {
theLink.display();
theLink = theLink.next;
System.out.println();
}
}
public Cube find(Object obj) {
Cube theLink = firstLink;
if (!isEmpty()) {
while (theLink.obj != obj) {
if (theLink.next == null) {
return null;
} else {
theLink = theLink.next;
}
}
} else {
System.out.println("Empty List!");
}
return theLink;
}
public Cube removeLink(Object obj) {
Cube currentLink = firstLink;
Cube previousLink = firstLink;
while (currentLink.obj != obj) {
if (currentLink.next == null) {
return null;
} else {
previousLink = currentLink;
currentLink = currentLink.next;
}
}
if (currentLink == firstLink) {
firstLink = firstLink.next;
} else {
previousLink.next = currentLink.next;
}
return currentLink;
}
}
public class Cube {
public Object obj;
public Cube next;
public Cube(Object obj) {
this.obj = obj;
}
public void display() {
obj.toString();
System.out.println(obj);
}
public static void main(String[] args) {
arrayList coord1 = new arrayList();
coord1.add(new Integer(2));
coord1.add(new Integer(5));
coord1.add(new Integer(1));
arrayList coord2 = new arrayList();
coord2.add(new Integer(7));
coord2.add(new Integer(6));
coord2.add(new Integer(9));
coord1.display(coord1);
coord2.display(coord2);
linkedList position1 = new linkedList();
position1.insertFirstLink(coord1);
position1.insertFirstLink(coord2);
position1.display();
}
}
答案 0 :(得分:0)
根据API https://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#println(java.lang.Object)
您将对象放入System.out.println(x)
中将最终调用String.valueOf(x)
,而后者最终将调用x.toString()
。把这个#1
在linkedList.display()
中,它将调用Cube.display()
。 Cube.display()
将打印其封装的对象。该对象原来是arrayList
。从#1开始,方法调用将变为arrayList.toString()
。但是,arrayList
没有实现toString()
。不用担心,Java支持您。由于所有非基本类型都扩展了Object,所以arrayList将具有toString()
从Object继承的方法。这是对象实现,用于打印对象ID。如果您不喜欢它,可以在arrayList
范围内定义自己的toString()。
更新1
您可能想知道为什么第一个arraylist
可以打印出有意义的内容。这是因为您直接调用其arraylist.display()
而不是System.out.println(coord1)
更新2
您的代码中有一些反模式。
arrayList.display()
需要一个也引用自身的参数,但您却从未使用过它(即obj1
被完全忽略了)?
coord1.display()
足够好,您不需要coord1.display(coord1)
答案 1 :(得分:0)
您需要进行以下更改:
在arrayList类中,您需要更改方法display(Object obj1)并重写toString()方法:
public void display(Object obj1) {
System.out.println(obj1);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < counter - 1; i++) {
sb.append(myList[i] + ",");
}
sb.append(myList[counter - 1] + "]");
return sb.toString();
}
在linkedList类中,更改显示并覆盖toString(),如下所示:
public void display() {
System.out.println(this.toString());
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
Cube temp = firstLink;
sb.append("[");
while (temp != null) {
sb.append(temp.obj.toString());
temp = temp.next;
if (temp != null)
sb.append(",");
}
sb.append("]");
return sb.toString();
}
}
注意:它将以相反的顺序打印链表,因为LinkedList的实现是以相反的顺序存储数据。