Java对象数组开发遇到Scanner类型不匹配及未定义方法错误
格林维尔县学校数据追踪程序编译报错排查
核心报错信息还原
Exception in thread "main" java.lang.Error: Unresolved compilation problems: Type mismatch: cannot convert from Scanner to int The method toViewOrNotToView() is undefined for the type ObjectArrayDriver at ObjectArrayDriver.main(ObjectArrayDriver.java:85)
报错原因逐一定位
两个编译错误全部触发在ObjectArrayDriver类main方法的第85行,对应问题分别为:
- Scanner转int的类型不匹配错误
本质是代码将Scanner实例对象直接赋值给了int类型的索引变量,没有调用Scanner提供的输入读取方法获取实际的用户输入值。常见的错误写法是直接将Scanner对象赋值给int变量,遗漏了.nextInt()的方法调用。 toViewOrNotToView()方法未定义错误
该方法的定义位置与调用位置不匹配:你在A_of_Objects类中定义了这个交互方法,但在ObjectArrayDriver的main方法中没有配置实例调用逻辑,直接无前置对象触发调用,导致编译器认为驱动类本身不存在这个方法。
对应修正步骤
- 打开
ObjectArrayDriver.java定位到第85行代码- 检查int类型索引变量的赋值逻辑:如果赋值来源直接是Scanner对象,替换为调用
Scanner.nextInt()读取用户输入的整数索引,同时补充0-9的索引范围校验,避免后续触发数组越界异常 - 检查
toViewOrNotToView()的调用逻辑:由于该方法是A_of_Objects类的实例方法,需要通过初始化完成的学校对象数组元素进行调用,而非在驱动类中直接无对象调用
- 检查int类型索引变量的赋值逻辑:如果赋值来源直接是Scanner对象,替换为调用
常见错误写法与修正对比
错误代码片段:
Scanner userInput = new Scanner(System.in); // 直接把Scanner对象赋值给int变量,触发类型不匹配 int selectIndex = userInput; // 无对象直接调用A_of_Objects类的实例方法,触发方法未定义 toViewOrNotToView();
修正后代码片段:
Scanner userInput = new Scanner(System.in); System.out.println("请输入需要查询的学校索引(0-9):"); // 正确调用Scanner方法读取int类型输入 int selectIndex = userInput.nextInt(); // 增加索引边界校验 if(selectIndex < 0 || selectIndex >= 10) { System.out.println("输入的索引超出可查询范围"); return; } // 通过学校对象数组的实例调用交互方法 schoolArray[selectIndex].toViewOrNotToView();
内容的提问来源于stack exchange,提问作者Liam
相关产品推荐
相关产品推荐

