You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何校验用户输入的课程是否属于预设数组的元素

校验逻辑放置位置

你可以选择两种方案:

  • 方案1:放在用户输入每一门课程的for循环内部,用户输完一门立刻校验,不合格就提示重新输入,避免全部输完再返工
  • 方案2:放在用户输入完全部课程之后,批量校验所有输入的课程,你原来的代码目前只校验了第一个课程subjects1[0],需要改成遍历整个subjects1数组校验所有内容

原有代码优化点

你现有的check方法只能实现完全匹配,没法支持单独输入课程编码的需求,需要调整匹配逻辑:判断输入的内容是完整课程名还是编码,若是编码就检查预设数组的元素里是否包含该编码字符串即可。

修改后的完整代码

import java.util.Arrays;
import java.util.Scanner;

public class CourseEnroll {
    // 优化后的校验方法,支持完整课程名和编码两种匹配
    private static boolean check(String[] courseArr, String input){
        for(String course : courseArr){
            // 完全匹配 或者 课程包含输入的编码(匹配括号里的编码部分)
            if(course.equals(input) || course.contains("(" + input + ")")){
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        String courseArr[] = {"(MATH6100) Calculus 1", "(ITE6101) Computer Fundamentals", "(ITE6102) Computer Programming 1", "(GE6100) Understanding the Self", "(GE6106) Purposive Comunication 1", "(ETHNS6101) Euthenics 1", "(PHYED6101) Physical Fitness", "(NSTP6101) National Service Training Program 1"};
        Scanner scanner = new Scanner(System.in);

        System.out.print("\nEnter the number of subjects you wish to enroll: ");
        int numberSubjects = scanner.nextInt();
        scanner.nextLine(); // 处理nextInt遗留的换行符

        // 先校验选课数量是否超过上限
        if(numberSubjects > 8 || numberSubjects < 1){
            System.out.println("Error: You can only enroll 1 to 8 subjects.");
            return;
        }

        String[] selectedSubjects = new String[numberSubjects];
        // 每输入一门课就实时校验
        for(int i = 0; i < numberSubjects; i++){
            System.out.println("Enter the course name or code for subject " + (i+1) + " (EX. MATH6100):");
            String input = scanner.nextLine().trim();
            // 调用校验方法
            if(check(courseArr, input)){
                selectedSubjects[i] = input;
            }else{
                System.out.println("Error: The course you entered does not exist, please re-enter.");
                i--; // 计数回退,让用户重新输入当前门数的课程
            }
        }

        // 输出最终选课结果
        System.out.println("\nYour selected subjects:");
        for(String sub : selectedSubjects){
            System.out.println(sub);
        }
        System.out.println("**********************************\n\tNothing Follows");

        System.out.print("\nIf you have entered errors please press Y to refresh the form (Y/N): ");
        String answer = scanner.nextLine().trim();
        if(answer.equalsIgnoreCase("Y")){
            System.out.println("Based on your answer, you need to refresh the page and try again.");
        }
        scanner.close();
    }
}

关键调整说明

  • 把校验逻辑放在了输入课程的for循环内,输入错误立刻提示重输,提升使用体验
  • 重写了check方法,同时支持完整课程名匹配和课程编码匹配
  • 补充了选课数量小于1或者超过8的错误提示逻辑
  • 修复了Scanner类nextInt后遗留换行符导致后续nextLine读取空值的bug

内容的提问来源于stack exchange,提问作者user16376117

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 01:51:03