Java 当打印列表时,它是乱七八糟的
可能重复: 为什么当我从filereader打印我的列表时是这样[myServiceOrder@3bc1cac, myServiceOrder@32fe621e, myServiceOrder@5adbb9b9, myServiceOrder@f7e4f49, myServiceOrder@2d874991, myServiceOrder@ceee5f1, myServiceOrder@183a37d9]Java 当打印列表时,它是乱七八糟的,java,Java,可能重复: 为什么当我从filereader打印我的列表时是这样[myServiceOrder@3bc1cac, myServiceOrder@32fe621e, myServiceOrder@5adbb9b9, myServiceOrder@f7e4f49, myServiceOrder@2d874991, myServiceOrder@ceee5f1, myServiceOrder@183a37d9] public class myServiceOrder implements Servi
public class myServiceOrder implements ServiceOrder, Comparable<myServiceOrder>{
private int number=0;
private String ownerName="";
private String make="";
private String model="";
private int year=0;
public myServiceOrder(int number, String ownerName, String make, String model, int year) {
this.number=number;
this.ownerName=ownerName;
this.make=make;
this.model=model;
this.year=year;
}
public myServiceOrder() {
// TODO Auto-generated constructor stub
}
@Override
public void setOrderNum(int orderNumber) {
number=orderNumber;
}
@Override
public void setYear(int year) {
this.year=year;
}
@Override
public void setOwner(String ownerName) {
this.ownerName=ownerName;
}
@Override
public void setMake(String make) {
this.make=make;
}
@Override
public void setModel(String model) {
this.model=model;
}
@Override
public String getOwner() {
return ownerName;
}
@Override
public String getMake() {
return make;
}
@Override
public String getModel() {
// TODO Auto-generated method stub
return model;
}
@Override
public int getOrderNum() {
// TODO Auto-generated method stub
return number;
}
@Override
public int getYear() {
// TODO Auto-generated method stub
return year;
}
@Override
public String getMakeModelYear() {
// TODO Auto-generated method stub
return make+ " "+ model+ " "+ year+ " ";
}
@Override
public boolean equals(ServiceOrder otherServiceOrder) {
if (getOrderNum()==otherServiceOrder.getOrderNum())
return true;
else
return false;
}
@Override
public int compareTo(ServiceOrder otherServiceOrder, int key) {
int comparisonResult=0;
if(key==1)
{
if(getOrderNum()< otherServiceOrder.getOrderNum())
comparisonResult= -1;
if(getOrderNum()== otherServiceOrder.getOrderNum())
comparisonResult= 0;
if(getOrderNum()> otherServiceOrder.getOrderNum())
comparisonResult= 1;
}
else if(key==2)
{
comparisonResult = getOwner().compareTo(otherServiceOrder.getOwner());
}
else if(key==3)
{
comparisonResult = getOwner().compareTo(otherServiceOrder.getOwner());
}
return comparisonResult;
}
@Override
public int compareTo(myServiceOrder arg0) {
// TODO Auto-generated method stub
return 0;
}
}
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class List extends LinkedList<myServiceOrder> {
private static LinkedList<myServiceOrder> newList = new LinkedList();
public void Print() throws Exception
{
System.out.println(newList);
}
public LinkedList<myServiceOrder> createServiceOrder(File inFile) throws Exception {
int number=0;
String ownerName="";
String make="";
String model="";
int year=0;
myServiceOrder serviceList = new myServiceOrder();
Scanner fileScan=new Scanner(inFile);
while (fileScan.hasNext())
{
String ignore;
number = fileScan.nextInt();
//System.out.println(number);
ignore = fileScan.nextLine(); // ignore the newline
ownerName = fileScan.nextLine();
// System.out.println(ownerName);
make = fileScan.nextLine();
// System.out.println(make);
model = fileScan.nextLine();
// System.out.println(model);
year = fileScan.nextInt();
// System.out.println(year);
ignore = fileScan.nextLine(); // ignore the newline
serviceList = new myServiceOrder( number, ownerName, make, model, year);
newList.add(serviceList);
}
fileScan.close();
// System.out.println(newList.viewAll());
return newList;
}
}
好的,我明白了,我的大脑是致密的。我还有第二个问题:我必须以三种不同的方式对列表进行排序,这取决于我在GUI中选择的选项,我假设我实现了Comparable,但在我的compareTo界面中,它是compareToObject o,int key。如果排序方法只是对象o,我如何使用该键。我应该尝试使用比较器吗?如果我的key=1,我如何告诉它在我的List类中以这种方式排序?myServiceOrder类中缺少对toString方法的重写的典型案例 请看一下实现中的示例。并解释为什么需要重写toString Argh直到现在才看到你的第二个问题,当时已经很晚了:
请参阅和,了解使用Comparable接口与使用Comparator接口之间的区别。打印的实际上是您打印的对象的哈希代码,而不重写toString方法。。既然您正在打印LinkedList,就不能这样做。。相反,您可以迭代列表并打印单个元素:-
public void Print() throws Exception
{
for (myServiceOrder so: newList) {
System.out.println(so)
}
}
现在,由于serviceOrder本身就是一个对象。。您需要在该类中重写toString
@Override
public String toString() {
return this.ownerName + this.make + "[" + this.model + " - " + String.valueOf(this.year) + "]";
}
Java如何知道您希望如何打印myService对象?您可以通过覆盖toString来判断:
@Override
public String toString() {
return "myServiceObject#" + number + "[" + ownername + ", " + make + ", " + model + ", " + year + "]";
}
这会自动调用LinkedList类的toString方法,在本例中,该方法会依次调用ServiceOrder对象列表中每个引用的toString。由于您没有提供自己的toString方法,因此使用了Object中的默认方法。这给出了有趣的输出myServiceOrder@3bc1cac这是Java打印引用变量的默认方式。如果您希望看到其他内容,则需要通过在ServiceOrder类中实现toString来告诉Java如何做到这一点。乱码是对象的哈希代码。要获得更友好的打印输出,您需要重写类中的toString方法。最好更关注格式设置,这样第二个问题就不会被代码formatting=\ux=打印LinkedList对象时自动迭代列表中的对象所隐藏。事实上,这发生在LinkedList.toString方法中clarification@Code-大师。。是的,那是真的。。我只是用这种方式打印,没有结尾的方括号[,和]。。我认为这不值得投反对票。我仍然有点困惑,在myServiceOrder类中,我的toString应该是什么样子,然后我如何打印,你可以在返回值中添加任何变量,你想打印的,并以你想要的任何方式格式化它。。这就是toString被覆盖的原因。。
System.out.println(newList);