我有一个项目,我面临的问题再次出现。
我们给出了这个Tester文件。不应该编辑它。 我希望你专注于这一行:
System.out.println(bb) ;
它打印对象吗?
import java.util.Arrays ;
/**
Presents some problems to the BillBoard class.
*/
public class BillboardTester
{
public static void main(String[] args)
{
int[] profits = new int[]{1, 2, 3, 1, 6, 10} ;
int k = 2 ;
System.out.println("Profits: " +
Arrays.toString(profits) + " k = " + k) ;
Billboard bb = new Billboard(profits, k) ;
System.out.println("Maximum Profit = " + bb.maximumProfit()) ;
System.out.println(bb) ;
k = 3 ;
profits = new int[]{7, 4, 5, 6, 1, 7, 8, 9, 2, 5} ;
System.out.println("Profits: " +
Arrays.toString(profits) + " k = " + k) ;
bb = new Billboard(profits, k) ;
System.out.println("Maximum Profit = " + bb.maximumProfit()) ;
System.out.println(bb) ;
}
}
然后通过打印对象,他期待这个结果:
Billboards removed (profit): 3(1) 0(1) => profit loss of 2
total value of billboards = 23
remaining maximum profit = 21
我不知道在实际的Billboard课程中我必须创建什么方法,所以我可以打印出来。你有什么建议吗?我想知道这背后的逻辑,而不是解决这个特定问题。
答案 0 :(得分:4)
覆盖toString
方法。
每当您打印任何类的实例时,都会调用toString
方法。如果您不覆盖它,则会使用Object's
类toString
,这会返回一个type@someNumber
形式的表示。
要打印自己的代表,只需覆盖它,然后调用toString
的实现。
@Override
public String toString() {
return this.getProfit();
}
您可以相应地更改返回的字符串。我不知道您的k
是什么,但您也可以在returned string
中加入。{/ p>
答案 1 :(得分:4)
覆盖toString
方法。打印对象依赖于Object
类中定义的方法。通过覆盖它,将使用您的实现而不是那个。
考虑println
的文档:
打印一个对象,然后终止该行。此方法首先调用 String.valueOf(x)获取打印对象的字符串值,然后 表现就像调用print(String)然后调用println()。
println
依赖String.valueOf(x)
调用x
的{{1}}方法。
一个例子:
toString
长话短说,您只需返回对象的public String toString() {
return "Billboards removed (profit):" + someParam + " => profit loss of " +
profitLoss + "\ntotal value of billboards = " + totalValue +
"\nremaining maximum profit = " + remainingProfit;
}
表示,即“描述”其内容。如果你有一个String
对象,那么你的Person
就可能是:
toString