提问人:Christopher Prinze 提问时间:11/13/2021 最后编辑:Nowhere ManChristopher Prinze 更新时间:11/14/2021 访问量:87
为什么代码会打印两次语句,但方式不同?
Why does the code print the statement twice, but differently?
问:
我的问题陈述是:
编写一个程序,用于创建泛型类的两个实例 LinkedList。
第一个实例是 stadiumNames,将保存 键入 String。
第二个实例是 gameRevenue,将持有 键入 Double。
在一个循环中,读取期间进行的球类比赛的数据 一个季节。
比赛的数据由体育场名称和 为那场比赛赚了多少钱。
将游戏数据添加到 stadiumNames 和 gameRevenue。
由于可以在特定体育场进行多场比赛,因此 stadiumNames 可能具有重复的条目。
读取所有比赛的数据后,阅读体育场名称并显示该体育场所有比赛的总金额。
我正在尝试从用户那里获取每个输入,然后将每个输入相加并得到其总和,起初似乎是正确的,但随后它打印了另一个完全不同的数量。为什么?任何帮助都表示赞赏。
每个输入 和 都添加到一个 .stadiumName
gameRevenue
linkedList
请注意,我已经编写了两个链表,但它不允许我发布大量代码。谢谢。
boolean Data = true;
while (Data) {
stadiumNames.add(name);
gameRevenue.add(rev);
System.out.println("Do you want another game? ");
String yesorno = scan.next();
if (yesorno.equals("No"))
break;
else {
if (yesorno.equals("yes"))
System.out.println("Enter stadium name: ");
name = scan.next();
System.out.println("Enter amount of money for the game: ");
rev = scan.nextDouble();
for (int i = 0; i < stadiumNames.size(); i++) {
if (stadiumNames.get(i).equals(name)) {
rev += gameRevenue.get(i);
System.out.println("The total amount of money for " + name + " is " + rev);
}
}
}
}
答:
0赞
Nowhere Man
11/14/2021
#1
如果要在用户输入数据时打印运行总计,则应为每次计算重置。total
while (true) {
System.out.println("Do you want another game? ");
String yesorno = scan.next();
if (yesorno.equals("No"))
break; // else not needed
System.out.println("Enter stadium name: ");
name = scan.next();
System.out.println("Enter amount of money for the game: ");
rev = scan.nextDouble();
stadiumNames.add(name);
gameRevenue.add(rev);
double total = 0.0;
// recalculating the total for the last stadium
for (int i = 0; i < stadiumNames.size(); i++) {
if (stadiumNames.get(i).equals(name)) {
total += gameRevenue.get(i);
}
}
System.out.println("The total amount of money for " + name + " is " + total);
}
但是,可能需要计算多个不同体育场的总数,并且需要在循环后为此创建和填充地图。
使用Map::merge
功能来累积每个体育场名称的总数很方便。while
Map<String, Double> totals = new LinkedHashMap<>();
for (int i = 0; i < stadiumNames.size(); i++) {
totals.merge(stadiumNames.get(i), gameRevenue.get(i), Double::sum);
}
totals.forEach((stad, sum) -> System.out.println("The total amount of money for " + stad + " is " + sum));
旁注:不建议将其用于财务计算,因为浮点数学不精确。double
评论