因此,我不熟悉Notepad ++,并且在Blue J中有一个可用的程序。 我尝试将其转移,但继续收到错误:
“ Average.java:5:错误:UserInput类是公共的,应在名为UserInput.java的文件中声明public class UserInput ^
注意:Average.java使用未经检查或不安全的操作。
注意:使用-Xlint:进行重新编译:未选中以获取详细信息。 1个错误”
我认为这与我编写每个类的方式有关,但是我不确定如何修复。
答案 0 :(得分:2)
文件中仅允许使用一个公共类,并且该公共类应与该文件具有相同的名称。
第一个解决方案在错误中定义得很好。 “ UserInput [...]应该在名为UserInput.java 的文件中声明。”
第二种解决方案是更改类的可见性
在 A.java
中public class A {}
class B{}
protected class C{}
private class D{}
public class E{} //THIS IS NOT ALLOWED, it should be in E.java
请注意,即使在一个文件中只能定义一个公共类,也不一定要有一个公共类。
X.java
protected class X{} //this is valid.
但是不要在该文件中添加其他类作为公共类,只有X
在X.java
中是公共类
答案 1 :(得分:1)
在Java中,每个Java文件只能声明1个公共类。因此,要快速解决您的问题,您只需将UserInput
类拆分到自己的名为UserInput.java
的文件中,就这么简单。
尽管有点复杂,但是您可以研究Inner Classes
或Local Classes
,这将允许您在一个文件中声明一个或多个其他类。
已阅读
以下是LocalClass
(代码取自Local Inner Classes Documentation)的示例
public class LocalClassExample {
static String regularExpression = "[^0-9]";
public static void validatePhoneNumber(String phoneNumber1, String phoneNumber2) {
final int numberLength = 10;
// Valid in JDK 8 and later:
// int numberLength = 10;
class PhoneNumber {
String formattedPhoneNumber = null;
PhoneNumber(String phoneNumber) {
// numberLength = 7;
String currentNumber = phoneNumber.replaceAll(
regularExpression, "");
if (currentNumber.length() == numberLength)
formattedPhoneNumber = currentNumber;
else
formattedPhoneNumber = null;
}
public String getNumber() {
return formattedPhoneNumber;
}
// Valid in JDK 8 and later:
// public void printOriginalNumbers() {
// System.out.println("Original numbers are " + phoneNumber1 +
// " and " + phoneNumber2);
// }
}
PhoneNumber myNumber1 = new PhoneNumber(phoneNumber1);
PhoneNumber myNumber2 = new PhoneNumber(phoneNumber2);
// Valid in JDK 8 and later:
// myNumber1.printOriginalNumbers();
if (myNumber1.getNumber() == null)
System.out.println("First number is invalid");
else
System.out.println("First number is " + myNumber1.getNumber());
if (myNumber2.getNumber() == null)
System.out.println("Second number is invalid");
else
System.out.println("Second number is " + myNumber2.getNumber());
}
public static void main(String... args) {
validatePhoneNumber("123-456-7890", "456-7890");
}
}
此代码将打印出来
First number is 1234567890
Second number is invalid
正如@AxelH所说,这对于一个没有太多知识的人来说可能有点复杂,但这是一个有趣的小练习。有关更简单的信息,请参考@AxelH答案。
答案 2 :(得分:0)
UserInput类是公共的,应该在名为UserInput.java的文件中声明
我想这个例外是不言自明的。只需将File name重命名为UserInput.java即可!