C#实现点数耗尽即终止,需完成所有属性输入(允许输入0)
解决方案:满足点数耗尽即停止但必须输入所有属性的需求
原代码会重复执行多轮属性输入,且无法在点数耗尽时保证所有属性都被输入。以下是重构后的代码,既保证所有属性都能被输入(允许输入0),又会在点数降至0后不再消耗剩余点数:
int pontosDisponiveis = 27; // 定义所有需要输入的属性名称 var propriedades = new List<string> { "inteligência", "Força", "Fe", "Vitalidade", "Energia", "Magia", "Defesa", "Vigor" }; Console.WriteLine("Escolha o status de sua classe:"); Console.WriteLine($"Você tem : {pontosDisponiveis} de pontos para gastar"); foreach (var prop in propriedades) { int valor; if (pontosDisponiveis == 0) { // 点数已耗尽,只能输入0 Console.Write($"{prop}: (apenas 0 permitido) "); // 确保输入有效 while (!int.TryParse(Console.ReadLine(), out valor) || valor != 0) { Console.Write("Por favor, insira 0: "); } } else { Console.Write($"{prop}: "); // 验证输入是有效整数,且不超过剩余点数、非负 while (!int.TryParse(Console.ReadLine(), out valor) || valor < 0 || valor > pontosDisponiveis) { Console.Write($"Por favor, insira um valor entre 0 e {pontosDisponiveis}: "); } pontosDisponiveis -= valor; } Console.WriteLine($"Você tem : {pontosDisponiveis} de pontos para gastar"); } Console.WriteLine("Todas as propriedades foram definidas!");
代码说明:
- 使用属性列表统一管理所有需要输入的属性,避免重复编写相同的输入逻辑,后续增减属性只需修改列表即可。
- 针对点数耗尽的情况,强制用户输入0,确保流程继续完成所有属性的输入。
- 加入了输入验证逻辑,防止用户输入负数、超过剩余点数的数值或非整数内容,提升程序健壮性。
- 每输入一个属性后更新并显示剩余点数,清晰反馈当前状态。
内容的提问来源于stack exchange,提问作者Mateus Lopes Batista
相关产品推荐
相关产品推荐

