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
相关产品推荐
相关产品推荐

