打印对象的数组列表

时间:2016-03-17 15:15:49

标签: java

我正在尝试做一些Java练习。现在我正在练习教科书中的练习,我遇到了一个问题。这个特殊的问题需要我创建一个名为" Purse"然后创建"硬币"可以添加到给定的钱包。这部分我已经能够做到。练习的最后一部分是使用toString方法打印钱包。我将在下面展示我的课程。

钱包

package exercisePurse;

import java.util.ArrayList;

public class Purse {

    private ArrayList<Coin> coins;

    public Purse(){

        coins = new ArrayList<Coin>();

    }

    public void addCoin(Coin a){

        coins.add(a);

    }

    public String getCoins(){

        String allCoins = coins.toString();

        return allCoins;

    }

}

硬币

package exercisePurse;

public class Coin 

{

    String coin;
    int value;

    public Coin(String coinName, int coinValue){

        coin = coinName;
        value = coinValue;

    }

}

测试者课程

package exercisePurse;

import java.util.ArrayList;

public class CoinTester 

{

    public static void main(String args[]){

        Purse purse1 = new Purse();
        purse1.addCoin(new Coin("Quarter", 2));
        purse1.addCoin(new Coin("Dime", 3));
        purse1.addCoin(new Coin("Nickle", 4));
        purse1.addCoin(new Coin("Penny", 10));

        System.out.println(purse1.getCoins());

    }

}

运行结果

[exercisePurse.Coin@2a139a55, exercisePurse.Coin@15db9742, exercisePurse.Coin@6d06d69c, exercisePurse.Coin@7852e922]

具体来说,我知道我的问题区域在这里

public String getCoins(){

        String allCoins = coins.toString();

        return allCoins;

    }

我想要的是钱包显示硬币名称和值。所以像这样:

purse1 [Quarters 2,Dimes 3,Nickles 2,Pennies 5]

任何帮助都表示赞赏,对不起,如果之前已经提出过这个问题,因为我知道有关于使用toString的帖子我在这种情况下无法弄清楚如何实现解决方案。

编辑:

我需要特别按照这些说明来考虑完成练习:

Implement a class Purse. A purse contains a collection of coins. For simplicity, we
will only store the coin names in an ArrayList<String>. (We will discuss a better representation
in Chapter 8.) Supply a method
void addCoin(String coinName)
Add a method toString to the Purse class that prints the coins in the purse in the
format
Purse[Quarter,Dime,Nickel,Dime]

5 个答案:

答案 0 :(得分:2)

  CREATE TRIGGER update_wp_posts
  AFTER INSERT
  ON persons
  FOR EACH ROW
  UPDATE wp_posts
  SET wp_posts.post_content = ?what_should_be_here? 
  WHERE wp_posts.ID = NEW.post_ID;

当您从钱包中取出硬币时,请重复列表并打印出所有硬币信息。

public class Coin{
    String coin;
    int value;

    public Coin(String coinName, int coinValue){
        coin = coinName;
        value = coinValue;
    }

    @Override
    public String toString(){
        StringBuilder sb = new StringBuilder();
        sb.append("Coin name:").append(this.coin).append(",")
        .append("Coin value:").append(this.value);

        return sb.toString();
    }
}

答案 1 :(得分:1)

它正在打印Coin对象的引用而不是值。你要做的是:

  1. 覆盖toString()上的Coin方法。

    public String getCoins(){
        String allCoins = coins.toString();
        return allCoins;
    }
    
    public class Coin {
        private String coin;
        private int value;
    
        public Coin(String coinName, int coinValue){
            this.coin = coinName;
            this.value = coinValue;
        }
    
        public String toString(){
            return this.coin + " " + String.valueOf(this.value);
        }
    
        /* Getter-Setters */
    }
    
  2. 或者迭代列表并准备结果字符串:

    public String getCoins() {
        /* Assuming you include `purseName` member in the purse class for storing purse name */
        StringBuilder sb = new StringBuilder(this.purseName + "[");
        for(Coin c : coins) {
            sb.append(c.getCoin() + " " + c.getValue() + ", ");
        }
        return sb.append("]").toString();
    }
    
  3. 提示:使用getter-setters来获取和设置班级成员。
    或者,如果您未使用public,则可以将展示次数设置为getter-setters

答案 2 :(得分:1)

正如there所说:当你调用List.toString()时,它会逐个打印出element.toString(),但是你没有自定义这个元素的方法:{{1}对象,所以它的地址打印出来。

要制作您想要的内容,只需为Coin课程实施toString()方法,如下所示:

Coin

答案 3 :(得分:0)

覆盖Coin上的toString()方法

public String toString() {
    return coin + "s" + value;
}

答案 4 :(得分:-1)

所有“非原始”数据类型都带有to[TYPE]()方法,用于其原始“等效”。 (toString()toDouble()toInteger()等等。)

有了它,它将在现场“转换”以返回某些信息。

例如,假设你有这门课程。

public class Foo{
   private String _foo = "bar";  
   private int foobar = 0;
   public String toString(){
      return _foo;
   }
   public Integer toInteger(){
      return foobar;
   }
}

public class FooBar{
   public static void main(){
      Foo bar;
      System.out.println(bar);
      Integer z = 5 + bar;
      System.out.println(z);
    }

}

对main的调用将写入

bar
 5

这可以在任何班级和(几乎)任何情况下完成。

添加to[TYPE]()方法并返回您想要/需要返回的数据。

基本上,你会为这种情况做的是

public class FOOBAR{
   public static void main(){
   java.util.ArrayList<Foo>baz;
   Foo bar;
   Foo foobar;
   baz.add(bar);
   baz.add(foobar)
      for(Foo f : baz){
         System.out.println(f);

      } 
   }
}

对main的调用将输出

bar
bar