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