Java向量循环输入校验问题:修正非法值替换逻辑
投注记录算法完整实现方案
针对你需要开发的6-15个1-60数字投注的算法,我整理了一套清晰的实现思路,重点解决当前非法值直接存入向量、无法重复询问修正的问题,具体如下:
一、核心需求梳理
先明确要实现的所有功能点:
- 投注数量校验:必须限制在6-15个数字,超出范围要提示用户重新输入
- 单数字合法性校验:每个数字必须是1-60之间的整数,非法值要定位到对应位置,重复询问直到输入合法
- 投注排序展示:将合法的投注数字按升序(或自定义顺序)展示
- 费用计算:根据投注的数字数量,按照预设规则计算总费用
二、关键问题解决:非法值实时修正
之前的问题是非法值直接存入向量,现在我们要做的是在输入环节就实时校验,或者批量输入后逐个检查错误值并替换,确保最终向量里全是合法值。下面用Python代码示例两种常见场景的实现:
场景1:逐个输入数字(实时校验)
这种方式用户逐个输入每个数字,输入时就做合法性校验,不合法就循环询问,避免非法值存入列表:
def get_valid_bet_count(): # 获取合法的投注数量(6-15) while True: try: count = int(input("请输入投注数字的数量(6-15个):")) if 6 <= count <= 15: return count else: print("错误:投注数量必须在6到15之间,请重新输入!") except ValueError: print("错误:请输入有效的整数!") def get_valid_number(position): # 获取单个合法数字(1-60),position用来提示用户是第几个数字 while True: try: num = int(input(f"请输入第{position+1}个投注数字(1-60之间的整数):")) if 1 <= num <= 60: return num else: print(f"错误:数字必须在1到60之间,请重新输入第{position+1}个数字!") except ValueError: print(f"错误:请输入有效的整数,请重新输入第{position+1}个数字!") def main(): # 1. 获取合法投注数量 bet_count = get_valid_bet_count() # 2. 逐个获取合法数字 bet_numbers = [] for i in range(bet_count): valid_num = get_valid_number(i) bet_numbers.append(valid_num) # 可选:检查重复数字(投注场景通常不允许重复,可根据需求开启) # if len(set(bet_numbers)) != bet_count: # print("警告:投注数字存在重复,请重新输入!") # main() # 3. 排序展示投注 sorted_bets = sorted(bet_numbers) print("\n您的投注数字已排序:") print(" ".join(map(str, sorted_bets))) # 4. 按数量计算费用(示例规则:6-10个每个2元,11-15个每个1.8元) if 6 <= bet_count <= 10: total_cost = bet_count * 2 else: total_cost = bet_count * 1.8 print(f"\n本次投注总费用:{total_cost}元") if __name__ == "__main__": main()
场景2:批量输入数字(事后修正)
如果用户习惯一次性输入所有数字(用空格分隔),我们可以先获取输入,拆分后逐个检查非法值并替换:
def get_valid_bet_count(): while True: try: count = int(input("请输入投注数字的数量(6-15个):")) if 6 <= count <= 15: return count else: print("错误:投注数量必须在6到15之间,请重新输入!") except ValueError: print("错误:请输入有效的整数!") def get_valid_number(position): while True: try: num = int(input(f"请输入第{position+1}个投注数字(1-60之间的整数):")) if 1 <= num <= 60: return num else: print(f"错误:数字必须在1到60之间,请重新输入第{position+1}个数字!") except ValueError: print(f"错误:请输入有效的整数,请重新输入第{position+1}个数字!") def fix_invalid_numbers(bet_list, count): # 批量修正非法值 for i in range(count): try: num = int(bet_list[i]) if not (1 <= num <= 60): bet_list[i] = str(get_valid_number(i)) except ValueError: bet_list[i] = str(get_valid_number(i)) return list(map(int, bet_list)) def main_batch(): bet_count = get_valid_bet_count() # 获取批量输入并校验数量 while True: input_str = input(f"请输入{bet_count}个1-60的数字,用空格分隔:") bet_list = input_str.split() if len(bet_list) != bet_count: print(f"错误:请输入恰好{bet_count}个数字,请重新输入!") continue break # 修正非法值 valid_bets = fix_invalid_numbers(bet_list, bet_count) # 排序展示 sorted_bets = sorted(valid_bets) print("\n您的投注数字已排序:") print(" ".join(map(str, sorted_bets))) # 费用计算(同场景1) if 6 <= bet_count <= 10: total_cost = bet_count * 2 else: total_cost = bet_count * 1.8 print(f"\n本次投注总费用:{total_cost}元") if __name__ == "__main__": main_batch()
三、关键细节说明
- 所有输入校验都用
while True循环,直到用户输入合法值,彻底避免非法值进入数据容器 - 针对错误位置给出明确提示,用户能清楚知道需要修正哪个数字
- 排序用语言内置的排序函数即可,简单高效
- 费用计算规则可以根据实际业务需求修改,比如不同数量档位对应不同单价,或者固定总价
内容的提问来源于stack exchange,提问作者B. Martins
相关产品推荐
相关产品推荐

