我正在尝试做一些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]
答案 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
对象的引用而不是值。你要做的是:
覆盖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 */
}
或者迭代列表并准备结果字符串:
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();
}
提示:应使用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