打印对象并获取Java中的特定内容

时间:2012-11-13 18:23:26

标签: java

我有一个项目,我面临的问题再次出现。

我们给出了这个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课程中我必须创建什么方法,所以我可以打印出来。你有什么建议吗?我想知道这背后的逻辑,而不是解决这个特定问题。

2 个答案:

答案 0 :(得分:4)

覆盖toString方法。

每当您打印任何类的实例时,都会调用toString方法。如果您不覆盖它,则会使用Object'stoString,这会返回一个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