Java中如何为Scanner设置输入数值范围,实现考试分数0-100合法性校验
实现方案
你可以封装一个独立的分数读取校验方法,避免每个科目重复写校验逻辑,输入不合法时循环提示用户重新输入,直到输入符合0-100的范围要求。
修改后的完整代码如下:
package com.company; import java.util.Scanner; public class CbseCalculator { // 封装校验分数的方法,传入科目名称,返回合法的分数值 private static float getValidMarks(Scanner sc, String subject) { float marks; while (true) { System.out.println("请输入" + subject + "的考试分数"); marks = sc.nextFloat(); // 0-100范围校验 if (marks >= 0 && marks <= 100) { break; } System.out.println("输入无效,分数必须在0到100之间,请重新输入"); } return marks; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); float physics = getValidMarks(sc, "物理"); float chemistry = getValidMarks(sc, "化学"); float math = getValidMarks(sc, "数学"); float english = getValidMarks(sc, "英语"); float computer = getValidMarks(sc, "计算机科学"); float total = 500; float obtained = (physics + chemistry + math + english + computer); float percentage = (obtained/total)*100; System.out.println("最终所得百分比为: "+percentage); sc.close(); } }
逻辑说明
- 单独封装
getValidMarks方法处理分数输入和校验,减少重复代码,后续要新增科目也可以直接复用该方法 - 用
while(true)做循环校验,只有当输入分数满足>=0且<=100的条件时才跳出循环返回分数,否则一直提示用户重新输入 - 如果需要兼容用户输入非数字的场景,可以额外加
InputMismatchException异常捕获处理,避免程序直接崩溃。
内容的提问来源于stack exchange,提问作者Neetesh Khanal
相关产品推荐
相关产品推荐

