【问题标题】:Can't use Scanner class, constructor is undefined, method is undefined无法使用 Scanner 类,构造函数未定义,方法未定义
【发布时间】:2026-02-12 04:05:01
【问题描述】:

当我想在我的项目中导入扫描仪类时,eclipse 显示一些错误:

 Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
  The constructor Scanner(InputStream) is undefined
  The method nextLine() is undefined for the type Scanner

这是我的代码:

import java.util.Scanner;

public class Scanner {

    public static void main(String[] args) {

        Scanner myScanner = new Scanner(System.in);
        System.out.println(myScanner.nextLine());

    }

}

【问题讨论】:

    标签: java eclipse


    【解决方案1】:

    问题在于您还声明一个名为Scanner 的类。这意味着当您随后声明一个Scanner 类型的变量并尝试调用构造函数时,编译器认为您在谈论您的 类。只需将您自己的课程更改为其他内容(例如Test):

    import java.util.Scanner;
    
    public class Test {
        public static void main(String[] args) {
            Scanner myScanner = new Scanner(System.in);
            System.out.println(myScanner.nextLine());
        }
    }
    

    或者,当您的意思是 java.util.Scanner 时,您可以完全限定名称 - 但这在可读性方面是个坏主意。

    // Please don't do this - but it would work.
    public class Scanner {
        public static void main(String[] args) {
            java.util.Scanner myScanner = new java.util.Scanner(System.in);
            System.out.println(myScanner.nextLine());
        }
    }
    

    【讨论】:

      【解决方案2】:

      试试

      java.util.Scanner myScanner = new java.util.Scanner(System.in);
      

      相反。否则,编译器会尝试实例化您的类,该类也称为Scanner。或者只是将您自己的 Scanner 类重命名为其他名称。

      【讨论】:

        【解决方案3】:

        尝试更改您的班级名称,例如:

        import java.util.Scanner;
        
        public class ScannerTest {
        
            public static void main(String[] args) {
        
                Scanner myScanner = new Scanner(System.in);
                System.out.println(myScanner.nextLine());
        
            }
        
        }
        

        【讨论】:

          【解决方案4】:

          请更改您的班级名称:

          public class Scanner {
          

          换成其他名字。编译器无法将 Scanner 视为 java.util.Scanner,因为它将它视为您的类(它没有这样的构造函数或方法,因此它会给您错误的通知)。

          【讨论】:

            【解决方案5】:

            您应该将类​​名与 Java 的 API 类不同。所以只需将类名从 Scanner 更改为 ScannerProgram

            import java.util.Scanner;
            
                 public class ScannerProgram {
            
                public static void main(String[] args) {
            
                    Scanner myScanner = new Scanner(System.in);
                    System.out.println(myScanner.nextLine());
            
                }
            
            }
            

            【讨论】:

              最近更新 更多