You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

收银程序output2方法优化求助:按需输出找零对应面额

解决Cash Register找零动态输出的问题

嘿,我完全懂你不想写那种冗长又死板的硬编码输出——每次加新面额都要改输出语句,太麻烦了!这里有个更灵活的方法,核心思路是把面额信息和对应的数量变量打包成一组,然后遍历这组数据,只输出数量大于0的项。

举个Java的实现例子,假设你已经算出了各个面额的数量(hundred, fifty这些变量):

首先,我们可以先定义一个简单的结构来存储面额的描述和对应的数量(如果用Java 16+,可以用record,非常方便):

record Denomination(String name, int count) {}

然后,把所有的面额和对应的数量放进一个列表里:

List<Denomination> denominations = List.of(
    new Denomination("hundred dollar bills", hundred),
    new Denomination("fifty dollar bills", fifty),
    new Denomination("twenty dollar bills", twenty),
    new Denomination("ten dollar bills", ten),
    new Denomination("five dollar bills", five),
    new Denomination("one dollar bills", one),
    // 如果有硬币的话也可以加进来
    new Denomination("quarters", quarters),
    new Denomination("dimes", dimes),
    new Denomination("nickels", nickels),
    new Denomination("pennies", pennies)
);

接下来,遍历这个列表,只构建有数量的部分:

StringBuilder changeOutput = new StringBuilder("Your change will be: ");
boolean firstItem = true;

for (Denomination d : denominations) {
    if (d.count() > 0) {
        if (!firstItem) {
            changeOutput.append(", ");
        }
        changeOutput.append(d.count()).append(" ").append(d.name());
        firstItem = false;
    }
}

// 最后输出结果
System.out.println(changeOutput);

这样做的好处:

  • 不用硬编码每个面额的输出语句,后续要加新面额(比如2美元纸币),只需要在列表里加一行就行
  • 自动跳过数量为0的面额,完全符合你的需求
  • 代码更整洁,维护起来轻松很多

如果你的Java版本低于16,没法用record,可以用一个简单的静态内部类代替:

static class Denomination {
    String name;
    int count;

    Denomination(String name, int count) {
        this.name = name;
        this.count = count;
    }
}

用法和上面完全一样。

另外,如果你想让输出的格式更友好(比如最后一项用“and”连接),可以在遍历的时候稍微调整逻辑,但核心思路还是一样的——通过数据驱动的方式来生成输出,而不是硬编码每一种情况。

内容的提问来源于stack exchange,提问作者Alex Suero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:49:50