0

在我的_Mathematics包裹里。我已将源文件分成如下文件binsrc

_Mathematics ->

    Formulas ->

       src ->

           // source files containing mathematical formulas...
           // Factorial.java 

       bin ->

           // Factorial.class
           // class files containing mathematical formulas...

   Problems ->

       src ->

           // Permutation.java
           // source files containing mathematical problems...

       bin ->

           // Permutation.class
           // class files containing mathematical problems...

但是,当我用 编译文件时main(),会出现如下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: _Mathematics\Problems
\bin\Permutations (wrong name: _Mathematics/Problems/bin/Permutations)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

这是Permutation.java文件,main()位于何处。

package _Mathematics.Problems.bin;
import _Mathematics.Formulas.bin.Factorial;

public class Permutations {
    public static void main(String args[]) {
        System.out.printf("There are 10 students. Five are to be chosen and seated in a row for a picture.%nHow many linear arrangements are possible?%n" + 
            (new Factorial(10).r/new Factorial(5).r) + "%n%n");
        System.out.printf("How many permutations are there in the word 'permutation'?%n" + 
            new Factorial(11).r + "%n%n");
    }
}

这是我拥有的另一个文件Factorial.java

package _Mathematics.Formulas.bin;

public class Factorial {
    public int o;
    public long r;
    public Factorial(int num) {
        long result = 1;
        for(int i = num; i > 0; i--)
            result *= i;
        this.o = num;
        this.r = result;
    }
}

我应该保留package _Mathematics.Problems.bin;,还是应该将其更改为package _Mathematics.Problems.src;

我的代码有什么问题??

帮助将不胜感激。

4

2 回答 2

1

值得一提的两个问题:

bin目录通常用于可执行文件。这是因为(通常)您的操作系统将具有指向这些目录的环境设置,因此当您尝试运行程序时,它知道在哪里查找。当您运行 Java 程序时,Java 本身就是可执行文件(您的操作系统需要知道在哪里可以找到它)。操作系统不需要找到您实际的 Java 类文件,Java需要找到它们,为此它使用完全不同的环境设置(类路径)。因此,如果您将 Java 类文件放在 bin 目录中,您可能做错了什么。

其次,您的包结构 ( _Mathematics.Problems.bin) 应该与目录结构完全匹配,但它应该反映类的用途,因此_MathematicsProblems是包结构的合理部分,但同样,binorsrc不是。通常,我会创建classessrc目录,然后我的包结构从那里开始

因此,如上所述,要解决此问题:

  1. 确保您的 src 和类的目录和包结构相同
  2. 通过删除包结构的 bin 部分,这将更容易。
于 2013-08-27T09:03:57.770 回答
1

对于类文件,您需要维护程序所期望的文件夹结构

_Mathematics\Problems\bin\Permutations

于 2013-08-25T18:37:45.473 回答