Java对象未返回预期的数据
我有下面的方法,它将数据传递到一个也包含在内的对象中。如果我一步一步地调试程序,那么我可以看到正确的数据被传递到对象中的每个字段中。但是,一旦我尝试执行println,我就无法从对象返回正确的数据 对于循环的每次迭代,来自刮取的数据以如下方式传递到对象:Java对象未返回预期的数据,java,arrays,argument-passing,Java,Arrays,Argument Passing,我有下面的方法,它将数据传递到一个也包含在内的对象中。如果我一步一步地调试程序,那么我可以看到正确的数据被传递到对象中的每个字段中。但是,一旦我尝试执行println,我就无法从对象返回正确的数据 对于循环的每次迭代,来自刮取的数据以如下方式传递到对象: [Prague, Aer, Lingus, EI645, 24, Feb, 17:15, Arrived, 17:32] 并分配给所有字段,没有问题。当我调用print方法时,我会得到以下结果,而不是上面的一行 ===============
[Prague, Aer, Lingus, EI645, 24, Feb, 17:15, Arrived, 17:32]
并分配给所有字段,没有问题。当我调用print方法时,我会得到以下结果,而不是上面的一行
====================TEST=======================
com.beezer.DublinAirportArrivals.ArrivalDetails@25595f51
================END TEST=======================
我做错了什么
public HtmlParser(Properties config) throws IOException{
url = config.getProperty("url");
airline = config.getProperty("airline");
print("Fetching.........%s" , url);
}
public ArrayList<ArrivalDetails> process() throws IOException{
Document doc = Jsoup.connect(url).get();
Elements tableRow = doc.getElementsByTag("tr");
for(Element tr : tableRow){
if(tr.text().contains(airline)){
if(tr.text().contains("Arrived")){
String delims = "[ ]+";
String[] singleRowArray = tr.text().split(delims);
ArrivalDetails temp = new ArrivalDetails(singleRowArray);
capture.add(temp);
}
}
}
testPrint();
return capture;
}
public static void testPrint(){
System.out.println("====================TEST=======================");
System.out.println(capture.get(capture.size()-1));
System.out.println("================END TEST=======================");
}
您看到了的结果,但尚未在
ArrivalDetails
中覆盖它
此方法返回一个等于以下值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
重写它,以便控制该类实例的输出。在该方法中,您构造并返回将传递给System.out.println
的字符串
调用toString()
的原因是字符串转换,包括:
[T] 转换是通过调用引用对象的toString方法(不带参数)来执行的;但是如果调用toString方法的结果为null,则使用字符串“null”
用一些“胶水解释”扩展其他答案
打印结果
o.toString()
由于没有重写toString
,因此Object#toString
的原始实现适用。您需要向类中添加toString()
方法。这表示打印此类型的对象时要显示的内容。下面是一个可以添加到类中并可以修改的示例
@Override
public String toString() {
return origin + " " + date;
}
但是请注意,在编写类时,没有任何变量是可访问的。您在构造函数中创建它们,并且它们仅在构造函数中可见/可用。您需要使它们成为类变量。你可以这样改变它
public class ArrivalDetails {
String origin;
String airline1;
public ArrivalDetails(String[] singleRowArray) {
this.origin = singleRowArray[0];
this.airline1 = singleRowArray[1];
}
}
查看关于StackOverflow的其他问题,了解更多信息 你还没有重写你的ArrivalDetails
类的toString()
方法。你能给我解释一下吗?当你说println(capture.get(capture.size()-1))
时,Java的可能副本不知道你想显示什么。您希望它只打印原点吗?也许只是约会?您必须通过编写toString()
方法来指定要打印的内容。@mcgowan.b鉴于这个问题以及您的其他问题,我敦促您花一些时间了解Oracle提供的非常好的免费在线服务。下面回答了这个问题。太好了。如果我想使用我在println上获得的输出作为字符串,我该怎么做呢。我可以调用toString方法并使用返回字符串吗?如果您的意思是string s=myObject.toString()
可以这样做。
@Override
public String toString() {
return origin + " " + date;
}
public class ArrivalDetails {
String origin;
String airline1;
public ArrivalDetails(String[] singleRowArray) {
this.origin = singleRowArray[0];
this.airline1 = singleRowArray[1];
}
}