Java:仅当特定值时才将整数值添加到字符串,正确格式化字符串
Java: Adding integer values to string only if a specific value, formatting string correctly
我正在 java 中为一个 class 项目制作存钱罐风格的程序,它可以加、减、比较和 increment/decrement 硬币。我试图将以下 toString 方法添加到代码中,以便它显示相应硬币值的正确单词。
如果 25 美分、10 美分、5 美分或 1 便士中的任何一个为 0,我希望它们完全不在字符串中。
如果只有 25 美分、10 美分、5 美分或 1 美分,我希望输出显示 25 美分、1 美分、5 美分或 1 美分。
所以基本上,如果银行在 4 个季度内有 1.01 美元、0 角硬币、0 个镍币和 1 便士,它将输出: $1.01:4 个季度,1 便士
我不知道该怎么做。我试图用 if 语句彻底地做到这一点,但我确信有更好的方法。这是我目前的代码,当有超过 1 个值设置为 0 或 1 时,它显然不起作用,看起来很荒谬。
public String toString() {
NumberFormat fmt = NumberFormat.getCurrencyInstance();
String str = fmt.format(amountInJar()); //amountInJar is a double value of the current currency
if (this.quarters > 1 && this.dimes > 1 && this.nickels > 1
& this.pennies > 1) {
str = str + ": " + quarters + " quarters, " + dimes + " dimes, "
+ nickels + " nickels, " + pennies + " pennies ";
} else if (quarters == 1) {
str = str + ": " + quarters + " quarter, " + dimes + " dimes, "
+ nickels + " nickels, " + pennies + " pennies ";
} else if (quarters == 0) {
str = str + ": " + dimes + " dimes, " + nickels + " nickels, "
+ pennies + " pennies ";
} else if (dimes == 1) {
str = str + ": " + quarters + " quarters, " + dimes + " dime, "
+ nickels + " nickels, " + pennies + " pennies ";
} else if (dimes == 0) {
str = str + ": " + quarters + " quarters, " + nickels
+ " nickels, " + pennies + " pennies ";
} else if (nickels == 1) {
str = str + ": " + quarters + " quarters, " + dimes + " dimes, "
+ nickels + " nickel, " + pennies + " pennies ";
} else if (nickels == 0) {
str = str + ": " + quarters + " quarters, " + dimes + " dimes, "
+ pennies + " pennies ";
} else if (pennies == 1) {
str = str + ": " + quarters + " quarters, " + dimes + " dimes, "
+ nickels + " nickels, " + pennies + " penny";
} else if (pennies == 0) {
str = str + ": " + quarters + " quarters, " + dimes + " dimes, "
+ nickels + " nickels ";
}
return str;
}
我知道使用 quarter(s)、dime(s)、nickel(s)、penny(ies) 进行格式化会更容易,但为了通过教师 Junit 测试,必须将其格式化为方法。
感谢您的帮助!
对每种硬币分别进行。要处理分隔符(“:”和“,”),一个方便的技巧是在每个项目之后添加一个分隔符,然后从末尾删除多余的分隔符。像这样:
str = str + ": ";
if(this.quarters > 1)
str = str + this.quarters + " quarters, ";
else if(this.quarters == 1)
str = str + "1 quarter, ";
if(this.dimes> 1)
str = str + this.dimes+ " dimes, ";
else if(this.dimes== 1)
str = str + "1 dime, ";
// same thing for nickels and pennies
str = str.substring(0, str.length() - 2); // cut off the last two characters, i.e. the extra comma and space
我正在 java 中为一个 class 项目制作存钱罐风格的程序,它可以加、减、比较和 increment/decrement 硬币。我试图将以下 toString 方法添加到代码中,以便它显示相应硬币值的正确单词。
如果 25 美分、10 美分、5 美分或 1 便士中的任何一个为 0,我希望它们完全不在字符串中。 如果只有 25 美分、10 美分、5 美分或 1 美分,我希望输出显示 25 美分、1 美分、5 美分或 1 美分。
所以基本上,如果银行在 4 个季度内有 1.01 美元、0 角硬币、0 个镍币和 1 便士,它将输出: $1.01:4 个季度,1 便士
我不知道该怎么做。我试图用 if 语句彻底地做到这一点,但我确信有更好的方法。这是我目前的代码,当有超过 1 个值设置为 0 或 1 时,它显然不起作用,看起来很荒谬。
public String toString() {
NumberFormat fmt = NumberFormat.getCurrencyInstance();
String str = fmt.format(amountInJar()); //amountInJar is a double value of the current currency
if (this.quarters > 1 && this.dimes > 1 && this.nickels > 1
& this.pennies > 1) {
str = str + ": " + quarters + " quarters, " + dimes + " dimes, "
+ nickels + " nickels, " + pennies + " pennies ";
} else if (quarters == 1) {
str = str + ": " + quarters + " quarter, " + dimes + " dimes, "
+ nickels + " nickels, " + pennies + " pennies ";
} else if (quarters == 0) {
str = str + ": " + dimes + " dimes, " + nickels + " nickels, "
+ pennies + " pennies ";
} else if (dimes == 1) {
str = str + ": " + quarters + " quarters, " + dimes + " dime, "
+ nickels + " nickels, " + pennies + " pennies ";
} else if (dimes == 0) {
str = str + ": " + quarters + " quarters, " + nickels
+ " nickels, " + pennies + " pennies ";
} else if (nickels == 1) {
str = str + ": " + quarters + " quarters, " + dimes + " dimes, "
+ nickels + " nickel, " + pennies + " pennies ";
} else if (nickels == 0) {
str = str + ": " + quarters + " quarters, " + dimes + " dimes, "
+ pennies + " pennies ";
} else if (pennies == 1) {
str = str + ": " + quarters + " quarters, " + dimes + " dimes, "
+ nickels + " nickels, " + pennies + " penny";
} else if (pennies == 0) {
str = str + ": " + quarters + " quarters, " + dimes + " dimes, "
+ nickels + " nickels ";
}
return str;
}
我知道使用 quarter(s)、dime(s)、nickel(s)、penny(ies) 进行格式化会更容易,但为了通过教师 Junit 测试,必须将其格式化为方法。
感谢您的帮助!
对每种硬币分别进行。要处理分隔符(“:”和“,”),一个方便的技巧是在每个项目之后添加一个分隔符,然后从末尾删除多余的分隔符。像这样:
str = str + ": ";
if(this.quarters > 1)
str = str + this.quarters + " quarters, ";
else if(this.quarters == 1)
str = str + "1 quarter, ";
if(this.dimes> 1)
str = str + this.dimes+ " dimes, ";
else if(this.dimes== 1)
str = str + "1 dime, ";
// same thing for nickels and pennies
str = str.substring(0, str.length() - 2); // cut off the last two characters, i.e. the extra comma and space