5

像往常一样,我只是另一个绝望的高中生,经过大量的谷歌搜索后才提出这个问题。

我正在研究其中一个可以在现实生活中应用的程序(但从来没有)。在这种情况下,找零计数器总结了硬币、五分钱、四分之一和剩余美分的数量,并在一个句子中显示它们。

我的问题是,我需要制作一个正确的句子格式,最后使用逗号和“and”,以我目前非常有限的知识无法管理。

  • 任何你看到货币划分的地方都是一个代表它的变量(美分、角钱等)
  • backupInput 是保存用户选择的美分数量的变量(1-100 之间的任何值)

我的程序中与我想问的部分有关的是:

    System.out.print(backupInput + ": ");

    // Outputting the quarters
    if (quarters > 0)
    {
      if (quarters == 1)
        System.out.print("one quarter, ");
      else
        System.out.print(quarters + " quarters, ");
    }

    // Outputting the dimes
    if (dimes > 0)
    {
      if (dimes == 1)
        System.out.print("one dime, ");
      else
        System.out.print(dimes + " dimes, ");
    }  

    // Outputting the nickels
    if (nickels > 0)
    {
      if (nickels == 1)
        System.out.print("one nickel, ");
      else
        System.out.print(nickels + " nickels ");
    }

    // Outputting the cents
    if (cents > 0)
    {
      if (cents == 1)
        System.out.print(" one cent");
      else
        System.out.print(cents + " cents ");
    }

问题是,任何这个输出都会给出类似的结果

7: 1 dime, 2 cents

虽然它应该是,但根据给出的示例格式:

7: 1 dime and 2 cents
65: 2 quarters, 1 dime and one nickel
66: 2 quarters, 1 dime, 1 nickel, and one cent

请记住,我几乎尝试了所有我能想到的东西,但在我所有的尝试中,它的效率太低了,甚至在所有情况下都不起作用。我不是想从这里的工作中拯救自己。我只是想了解正确操作背后的概念。

就是这样。该程序的其余部分运行良好且花花公子。如果你们中的任何人可以帮助我,请让像我这样的新手容易理解答案,以便更容易掌握这个概念:) 谢谢!

4

3 回答 3

5

有时更容易将问题分解一下。我可能会创建一个字符串数组:[“2 Quarters”,“1 dime”,“1 Nickel”,“one cent”]

然后查看我有多少(有效)数组元素并遍历 N 元素中的 N-1 个,输出以逗号分隔的行。然后(假设有多个数组元素)输出“and”,后跟最后一个数组元素。

还有其他“更高效”的方式,但我已经在这个行业工作了 40 年,任何一天我都会认为“易于理解和工作”而不是“高效”。

(当然,这不是给这只猫剥皮的唯一方法,可能还有其他同样简单的方法,但那是你和其他人发明的。)

(请注意,避免必须在每个if语句之间决定是否插入“and”的代码至关重要。当您一遍又一遍地重复相同的逻辑时,您往往会增加错误并造成维护噩梦。)

于 2012-10-30T20:30:35.423 回答
2

您当前的方法是计算硬币类型的计数,然后立即打印结果。

相反,如果您首先计算所有硬币的计数而不进行任何打印,那么您可以看到哪个是具有非零计数的最小硬币(因此是最后一个在输出中命名的硬币)。使用它,我认为您可以弄清楚如何将计数粘合在一起并打印所需的文本。

于 2012-10-30T20:27:19.807 回答
1

由于您正在学习Java,因此我不会给您完整的解决方案,但这里有一些方向:

  • 将您的输出存储在一个String变量中,而不是System.out.print一点一点地处理它
  • 在那String,删除尾随逗号,如果有的话(仅在情况下cents == 0nickels > 1,但后者可能是你的错误)
  • 用 替换最后一个逗号(" and"如果有)
  • 输出String

如果您仍然完全陷入困境,请告诉我们,我相信有人会提出现成的解决方案(如果还没有的话)。

于 2012-10-30T20:26:53.720 回答