Error.java:23:Error:类、接口或枚举需要导入java.util.*;

Error.java:23:Error:类、接口或枚举需要导入java.util.*;,java,Java,我不知道为什么我的代码中会被告知java22的错误。 我到处找别人的问题。像这里 但我找不到合适的答案。 这似乎不仅仅是类、接口或枚举导入部分出错。有人提出了这个问题。 但如果是的话,我想知道,在这种情况下,问题的方向是什么 另外,我想知道我是否希望禁用案例2的num2。因为它是阶乘的,所以它应该只询问num1 谢谢你的帮助 这是信息 这是一个代码部分 import java.util.*; 公共类计算 { 公共静态void main(字符串[]args) { NumCalc calc=新的N

我不知道为什么我的代码中会被告知java22的错误。 我到处找别人的问题。像这里

但我找不到合适的答案。 这似乎不仅仅是类、接口或枚举导入部分出错。有人提出了这个问题。 但如果是的话,我想知道,在这种情况下,问题的方向是什么

另外,我想知道我是否希望禁用案例2的num2。因为它是阶乘的,所以它应该只询问num1

谢谢你的帮助

这是信息

这是一个代码部分

import java.util.*;
公共类计算
{
公共静态void main(字符串[]args)
{
NumCalc calc=新的NumCalc();
System.out.println(“欢迎使用Math NumCalc!\n请选择一个选项:”
+“\n\t1”+“-添加两个实数”
+“\n\t2”+“-减去两个实数”
+“\n\t3”+“-将两个实数相乘”
+“\n\t4”+“-设置两个实数”
+“\n\t5”+”-获取数字的阶乘”
+“\n\t6”+“-菜单”
+“\n\t0”+“-退出”
);
计算运行();
}
}
导入java.util.*;
公共类NumCalc
{
私有int选项=-1;
专用扫描仪扫描,num1,num2;
//私人int opt;
双ans=0.0;
//int类;
公共NumCalc()
{
扫描=新扫描仪(System.in);
}
//上课的起点
公开募捐
{
System.out.println(“\n?”+扫描);
int scan=scan.nextInt();
for(int i=0;i对于(i=1;i正如其他人所说,简单的解决方案是将两个
public
类拆分为两个独立的
.java
文件。这将解决您已经遇到的错误和以后将遇到的另一个错误……但“公共类太多”这不是您的Java编译器所抱怨的。出现该错误的真正原因是您不能将
import
语句放在
class
声明之后

错误消息很容易被误读。它似乎在抱怨您正在导入的内容——可能会引发类似“但我正在导入一个类!”这样的响应。但是请注意
^
指向的位置——不是指向
java.util.*
,而是指向
导入

Calc.java:22: error: class, interface, or enum expected
    import java.util.*;
    ^
1 error
这个错误实际上是在抱怨导入语句不合适——它根本不应该在那里。一旦你声明了你的第一个
,导入其他任何东西都为时已晚。它实际上是这样说的:在
Calc.java
的第22行,没有任何东西可以出现在顶级but类型声明——它提到的“
接口
,或
枚举
”——因此遇到以
导入
开头的行是“意外的”,意思是不允许的

您可以通过注释掉第二个
导入(第22行)并编译来验证这一点。您仍然会得到错误,但会有不同的错误

另一方面,您可以多次导入java.util.*;
。冗余语句将被忽略…只要它们位于正确的位置。您可以通过将第二个
import
移到第3行或第4行左右并编译来验证这一点。同样,您仍然会得到错误,但不是关于这一点

正确的顺序 单个
.java
文件(在语言规范中称为“编译单元”)包含以下三个部分,必须按以下顺序显示:

  • 零或一个
    声明
  • 零个或多个
    import
    语句
  • 零个或多个顶级类型声明,如
    枚举
    、或
    接口
  • 根据Java 1.8语言规范,]:

    compileationunit
    是Java程序语法()的目标符号()。它由以下产品定义:

    编译单元
    : []{}{}

    编译单元由三个部分组成,每个部分都是可选的[…]

    如果最后一句话让您感到疑惑:是的,一个完全空的
    .java
    文件将在没有警告的情况下编译…并且不会生成任何
    .class
    文件

    解决 正如其他人所指出的,一个文件中不能有多个顶级
    public
    类或其他类型声明。除非您愿意将
    Calc
    NumCalc
    中的一个嵌套在另一个文件中,否则它们必须拆分为
    Calc.java
    NumCalc.java

    实际上,您可以通过降低一个类对package default的可见性来避免这个问题,但这是脆弱的,Java通常不是这样做的。如果您试图在任何其他
    .Java
    文件中使用package default类,即使是同一个包中的一个文件,它也将无法编译,因为它找不到假定的包ible类--
    Calc
    中的任何一个都将位于错误命名的
    NumCalc.java
    中(而不是编译器将查找它的位置)
    import java.util.*;
    public class Calc
    {
    public static void main(String[] args)
    {
        NumCalc calc = new NumCalc();
        System.out.println("Welcome to Math NumCalc!\nPlease choose an option:" 
        + "\n\t1 " + "- add two real numbers" 
        + "\n\t2 " + "- subtract two real numbers"
        + "\n\t3 " + "- multiply two real numbers"
        + "\n\t4 " + "- devide two real numbers"
        + "\n\t5 " + "- get the factorial of an number"
        + "\n\t6 " + "- menu"
        + "\n\t0 " + "- exit"
        );
        calc.run();
    }
    }
    
    import java.util.*;
    public class NumCalc 
    {
    private int option = -1;
    private Scanner scan, num1, num2;
    //private int opt;
    double ans  = 0.0;
    //int category;
    
    public NumCalc()
    {
        scan = new Scanner(System.in); 
    }
    
    // entry point for class
    public void run()
    {
        System.out.println("\n? " + scan);
        int scan = scan.nextInt();
    
        for (int i=0;i < count; i++)
        {
            option = option + scan.nextInt(); 
        }
    
        System.out.println("Enter 1st num:");
        int num1 = scan.nextInt();
        System.out.println("Enter 2nd num");
        int num2 = scan.nextInt();
    
        switch (option)
        {
            case 6:
            ans = num1 + num2;
            System.out.println(num1 + " + " + num2 + "=" + ans);
            break;
            case 5:
            ans = num1 - num2;
            System.out.println(num1 + " - " + num2 + "=" + ans); 
            break;
            case 4:
            ans = num1 * num2;
            System.out.println(num1 + " * " + num2 + "=" + ans);
            break;            
            case 3:
            ans = num1 / num2;
            System.out.println(num1 + " / " + num2 + "=" + ans);
            break;
            case 2:
            num2 = boolean(false); // No 2nd number.
            int ans = 1; 
            for (i = 1;i <= n; i++)
            {
                ans *= n;
            }
            break;
            System.out.println("Factorial of" + num1 + " = ");
            case 1:
            //opt = opt + scan.nextInt();
            continue;
            default:
            close();
        }
    }
    }
    
    Calc.java:22: error: class, interface, or enum expected
        import java.util.*;
        ^
    1 error