我有多个Java文件,其中一个(Demo)是大多数函数所在的位置,Demoest1是main所在的位置。
我尝试打包演示文件并在其他文件中使用该包,但当我使用终端(javac…)编译时,DemoTest1不编译,因为它还有一个包含参数的函数,返回的值是演示文件的对象。
演示。java文件:
package xyz.mypackage;
class Demo{
private double val1;
private double val2;
private void setValues(double num1, double num2){
val1 = num1;
val2 = num2;
}
private double getValue1(){
return (this.val1);
}
private double getValue2(){
return (this.val2);
}
private double getAverage(){
return((this.val1 + this.val2) / 2);
}
public Demo(double double1, double double2){
this.val1 = double1;
this.val2 = double2;
}
static void decrDemo(Demo obj){
obj.setValues(obj.val1 - 1, obj.val2 - 1);
}
}
降级1。java文件:
import java.util.Scanner;
import xyz.mypackage.Demo;
public class DemoTest1{
static Demo addDemo(Demo obj1, Demo obj2){
return new Demo(obj1.getValue1() + obj2.getValue1(), obj1.getValue2() + obj2.getValue2());
}
static void incrDemo(Demo obj){
obj.setValues(obj.getValue1() + 5, obj.getValue2() + 5);
}
public static void main(){
Demo item = Demo();
System.out.printl("\nPlease enter 2 numbers: ");
Scanner input = new Scanner(System.in);
double val1 = input.nextDouble();
double val2 = input.nextDouble();
demo.setValues(val1, val2);
System.out.printl("\nThe average of the two values entered is: " + item.getAverage());
Demo obj1 = new Demo(5, 7),
obj2 = new Demo(14, 9);
Demo objR = addDemo(obj1, obj2);
incrDemo(obj1);
System.out.printl("\nobjR has the following values. val1: &d\tval2: &d", objR.getValue1(), objR.getValue2());
System.out.printl("\nobj1 has the following values. val1: &d\tval2: &d", obj1.getValue1(), obj1.getValue2());
}
}
错误输出:
Air:Project xyz$ javac Demo.java DemoTest1.java
DemoTest1.java:2: xyz.mypackage.Demo is not public in xyz.mypackage;
cannot be accessed from outside package
import xyz.mypackage.Demo;
^
./Demo.java:3: duplicate class: xyz.mypackage.Demo
class Demo
^
DemoTest1.java:6: cannot access Demo
bad class file: ./Demo.java
file does not contain class Demo
Please remove or make sure it appears in the correct subdirectory of
the classpath.
static Demo addDemo(Demo obj1, Demo obj2)
如果我按照正确的说明操作,它应该会运行,但我想DemoTest1中并没有包含演示,因为我使用了打包,所以我不理解DemoTest1。或者我是否需要以不同于使用javac的方式编译文件。。然后用java运行Demoest1?
编辑:
更改文件夹层次结构和修复语法错误使其成功编译,但在尝试运行它(java DemoTest1)时,我发现:
Exception in thread "main" java.lang.NoSuchMethodError: main
编辑2:
异常已修复。虽然main()足够了,但它需要main(字符串args[])。
现在,它工作得很完美,正如预期的那样。感谢您的帮助和学习机会!
解决方案:
对于任何寻找类似问题的人。我写了xyz。mypackage在使用包时,它必须位于这些文件夹/子文件夹中(我认为,它本身就是包的常规语法,无论文件夹如何),还必须添加默认构造函数,因为我添加了一个特殊构造函数,我错误地认为,如果没有参数,它将只使用常规构造函数。
除了一些小的语法错误(没有正确使用println或使用%d而不是&f等)之外,另一个问题是main()不能为空,它需要有一个参数(字符串args[])。