Java骰子程序求和异常求助:首次正确,后续计算错误
Java骰子程序求和错误问题修复
问题根源分析
- 骰子点数显示错误:主程序中打印单个骰子点数时,错误调用了
getSumValues()(返回累加值),而非getValue()(返回当前点数)。 - 累加变量未重置:
Die类的reset()方法未重置sumValues,导致每次掷骰子时该变量持续累加历史点数,后续显示值越来越大。 - 冗余变量存在:
Die类中的total变量未被使用,属于无效代码。
修复后的代码
DiceOOP类
import java.util.Scanner; public class DiceOOP { public static void main(String[] args) { Die die1 = new Die(); Die die2 = new Die(); int total; char answer = 'y'; Scanner scanner = new Scanner(System.in); while (answer == 'y') { die1.roll(); die2.roll(); total = die1.getValue() + die2.getValue(); // 修复:调用getValue()获取当前骰子点数 System.out.println("Dice 1 value is : " + die1.getValue()); System.out.println("Dice 2 value is : " + die2.getValue()); die1.reset(); die2.reset(); System.out.println("The total value rolled between both dice is: " + total); System.out.println("\nDo you want to roll the dice again? (y/n)"); answer = scanner.next().charAt(0); } } }
Die类
public class Die { public int value; // 若无需记录骰子历史累加点数,直接删除sumValues相关代码 // public int sumValues; // 删除未使用的冗余变量total // public int total; public void roll() { value = (int) (6 * Math.random()) + 1; // 若无需累加功能,删除该行 // sumValues += value; } public int getValue() { return value; } // 若无需sumValues,删除该方法 /* public int getSumValues() { return sumValues; } */ public void reset() { value = 0; // 若保留sumValues,需添加重置逻辑 // sumValues = 0; // 删除对冗余变量total的重置 // total = 0; } }
额外说明
如果业务需求不需要记录单个骰子的历史累加点数,建议直接删除sumValues相关的所有代码,既简化逻辑又避免错误。若确实需要保留累加功能,务必在reset()方法中重置sumValues,同时确保显示当前点数时调用getValue()而非getSumValues()。
内容的提问来源于stack exchange,提问作者Pillis
相关产品推荐
相关产品推荐

