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

Java菜单选1时调用运行University.java的实现方法咨询

跨文件调用实现方案

不需要把菜单代码整合到University.java里,Java本身就支持同项目下不同类的跨文件调用,只要两个文件在同一包路径(初学者没手动声明package的话,两个.java文件放在同一文件夹下编译运行就属于默认同包,不需要额外导包),直接调用对应类的公开方法就行,具体实现步骤如下:

  • 先找到University.java里的注册流程入口方法:因为这个类负责采集学生信息、处理选课逻辑,内部肯定有一个公开的启动方法,比如常见的命名是enrollNewStudent()、startRegistration()这类,你不用管它内部几百行逻辑有多复杂,只要找到这个对外暴露的public方法就行。
  • 修改InputMenu里主菜单选择1的分支逻辑,删掉原来没用的question()调用,直接实例化University对象,调用你找到的注册入口方法即可。

举个例子,如果University里的注册入口方法叫startEnroll(),case 1的代码就改成:

case 1:
    System.out.println ("You picked enroll a new student" );
    University uni = new University();
    uni.startEnroll(); // 替换成University类里实际的注册方法名
    // 注册流程走完后如果需要回到主菜单,在这里重新调菜单显示逻辑即可
    new InputMenu();
    break;
你现有代码的几个明显问题,不修的话跑不通
  • case 2分支里的Scanner = new Scanner(new File("students.txt"));是语法错误,Scanner是类名,必须给对象声明变量名,比如改成Scanner fileReader = new Scanner(new File("students.txt"));,另外这段代码要处理文件找不到的异常,要么在方法上声明抛出FileNotFoundException,要么用try-catch包裹。
  • 你写的question()方法逻辑完全不匹配需求:主菜单选项是1-3,这个方法里的switch只判断0和9,完全没有对应业务逻辑,而且case 9里递归new InputMenu()很容易造成栈溢出,建议直接删掉这个方法,把退出逻辑直接写在case 3分支里,打印完退出提示后直接调用System.exit(0)终止程序就行。
  • 不要反复创建读取System.in的Scanner对象,整个类里只需要创建一个Scanner实例全局复用,重复创建会导致输入流读取异常。另外调用nextInt()之后要记得调一次nextLine()吃掉缓冲区里的换行符,不然后续读取学生姓名、地址这类字符串输入的时候会直接跳过。
特殊情况处理

如果University类里没有封装单独的业务方法,所有逻辑都写在main方法里,也可以直接调用,但非常不推荐这么做:
University.main(new String[]{});
正规的写法是把业务逻辑从University的main方法里拆成独立的public方法,菜单类只负责接收用户选择,业务逻辑全部交给University类的对应方法处理,职责拆分更清晰,后续改功能也方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:27:37