我正在开发一个项目,在这个项目中,我返回一系列Java方法的值,以便我可以显示结果。但它被打印出来,不同步。它应该如下:
return
"Name: " + getFirstName() + " " + getLastName() + "\n" +
"Id: " + getEmployeeId() + "\n" +
"Hourly Rate: $" + getHourlyRate() + "\n" +
timeCard.toString() +
"Weekly Pay: $" + getWeeklyPay();
但是当输出中应该是数字4时,timeCard.toString()的调用一直上升到顶部。这是下面的timeCard.toString()方法: public String toString() {
System.out.println("Weekly Hours: " + getWeeklyHours());
for(int i = 0; i < NUMDAYS; i++ )
{
System.out.println(" Day " + (i + 1) + ": " + getHoursByDay(i));
}
return "";//I had to place this hack here so the toString() format is valid.
}
就使用return关键字的输出而言,是否遵守了操作顺序?或者我的代码是否导致它出现故障?请提供有关此代码无法正常运行的原因的指导?我该如何解决?
以下是我得到的输出:
员工ID:
1001 员工小时费率:
56
输入第1天的小时数:
8
输入第2天的小时数:
8
输入第3天的小时数:
8
输入第4天的小时数:
8
输入第5天的小时数:
8
员工:
每周营业时间:40
Day 1: 8
Day 2: 8
Day 3: 8
Day 4: 8
Day 5: 8
姓名:Stanford Marceles
Id:1001
每小时费率:56.0美元
每周付款:2240美元
建立成功(总时间:29秒)
干杯,
答案 0 :(得分:1)
我没有仔细检查这一点,但它大概是你想要的。 (有几种方法可以做到。)
public String toString() {
StringBuffer buff = new StringBuffer();
buff.append("Weekly Hours: " + getWeeklyHours());
for(int i = 0; i < NUMDAYS; i++ )
{
buff.append(" Day " + (i + 1) + ": " + getHoursByDay(i));
}
return buff.toString();
}
答案 1 :(得分:1)
您的toString()
方法正在调用System.out.println()
,其中应该只返回时间卡的字符串表示形式。因此,在构建输出字符串时,代码会生成控制台输出。然后你打印字符串。这就是原因。
编辑:
回答你的评论,是的,你绝对可以在toString()
中使用循环。问题是你在返回循环之前返回每周小时字符串,当你返回一些东西时,你退出方法。所以你只需要按照以下几行进行更改:
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Weekly hours: " + getWeeklyHours()); // notice that I'm not returning anything
for (int i < 0; i < NUMDAYS; i++) {
builder.append(" Day " + (i + 1) + ": " + getHoursByDay(i));
}
return builder.toString(); // return once, at the end
}
如果您想要更加注意性能,可以将字符串连接分解为不同的附加到构建器。我只是想让代码易于阅读。 : - )
答案 2 :(得分:1)
toString()
不应该将字符串输出到控制台,但将字符串返回给调用函数。这也是您需要return "";
(该方法具有String返回类型)的原因。
该方法看起来应该更像:
public String toString() {
// Create string builder 'message' to hold the String generated
// StringBuilder is used because it has much less overhead for appending
StringBuilder message new StringBuilder();
message.append("Weekly Hours: ")
message.append(getWeeklyHours());
for(int i = 0; i < NUMDAYS; i++ )
{
// Append the Day and the hours for the specific day to the message
message.append("\n Day ");
message.append(i + 1);
message.append(": ");
message.append(getHoursByDay(i));
}
return message.toString(); // Returns the builder as a string
}
答案 3 :(得分:1)
您可以使用StringBuilder创建String,如下所示:
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Weekly Hours: " + getWeeklyHours()));
for(int i = 0; i < NUMDAYS; i++ ) {
builder.append(" Day " + (i + 1) + ": " + getHoursByDay(i)));
}
return builder.toString();
}
答案 4 :(得分:0)
toString()
方法返回您想要的字符串,而不是将其打印到System.out
。而不是打印它尝试使用StringBuilder并返回它的字符串表示。像这样:
public String toString() {
StringBuilder buf = new StringBuilder();
buf.append("Weekly Hours: ").append(getWeeklyHours());
for(int i=0; i<NUMDAYS; i++) {
buf.append(" Day ").append(i + 1)
.append(": ").append(getHoursByDay(i));
}
return buf.toString();
}