Java程序整数读取问题:现有代码无法编译,如何实现整数输入?
嘿,我来帮你搞定这个整数读取的问题!你的代码里有几个关键问题导致编译失败,咱们一步步来修复:
问题分析
- 类名冲突:你自己定义了一个
Scanner类,和你导入的java.util.Scanner重名了。Java会优先使用你自定义的这个类,而不是标准库的Scanner,这就导致new Scanner(System.in)根本没法正确调用标准库的构造方法,直接编译报错。 - 代码位置错误:你在自定义的
Scanner类里直接写了Scanner in = new Scanner(System.in);和int num = in.nextInt();这些执行语句——Java不允许把执行代码直接放在类的成员区域,必须放在方法、构造器或者初始化块里。 - 缺少实际读取逻辑:你的
main方法里只定义了变量,没有真正执行读取整数的代码。
修正后的完整代码
我给你两种方案,一种是保留自定义类的写法,另一种是更简洁的直接在main方法里读取:
方案1:使用自定义类封装读取逻辑
import java.util.Scanner; // 把自定义类改名,彻底避免和标准库Scanner冲突 class NumberReader { // 把读取逻辑封装到方法里,符合Java语法规范 public int readInteger() { Scanner inputScanner = new Scanner(System.in); System.out.print("请输入一个整数:"); return inputScanner.nextInt(); } } public class Main { public static void main(String[] args) { // 控制台不解析HTML,直接输出文本即可 System.out.println("-- Binaere Suche --"); // 方式一:直接用标准库Scanner读取 Scanner mainScanner = new Scanner(System.in); System.out.print("请输入目标整数:"); int zahl = mainScanner.nextInt(); System.out.println("你输入的整数是:" + zahl); // 方式二:用自定义的NumberReader类读取 NumberReader reader = new NumberReader(); int anotherNumber = reader.readInteger(); System.out.println("你输入的另一个整数是:" + anotherNumber); // 关闭Scanner,避免资源泄漏 mainScanner.close(); } }
方案2:简化版(直接在main方法读取)
如果不需要自定义类,直接在main里完成读取更简单:
import java.util.Scanner; public class Main { public static void main(String[] args) { System.out.println("-- Binaere Suche --"); Scanner scanner = new Scanner(System.in); System.out.print("请输入要用于二分查找的整数:"); int zahl = scanner.nextInt(); // 这里可以添加你的二分查找业务逻辑 System.out.println("你输入的目标整数是:" + zahl); scanner.close(); } }
关键修正点说明
- 改掉自定义类的名字,彻底解决类名冲突问题,让导入的
java.util.Scanner能正常工作。 - 把读取代码放到方法里,符合Java的语法规则(类成员区域只能放变量声明、方法定义等,不能直接放执行语句)。
- 移除了控制台里的HTML标签,因为控制台不会解析HTML,直接输出纯文本更合适。
- 添加了关闭Scanner的代码,虽然JVM会自动回收资源,但手动关闭是良好的编程习惯。
内容的提问来源于stack exchange,提问作者Jo An
相关产品推荐
相关产品推荐

