【问题标题】:Figure out the reason for java.lang.NoClassDefFoundError in program for LSD count sort in java找出java中LSD计数排序程序中java.lang.NoClassDefFoundError的原因
【发布时间】:2015-04-27 12:00:44
【问题描述】:

我正在尝试在 Java 中编写一个 LSD(最低有效位)计数排序程序,以通过应用于字符串特定位置的计数排序方法对固定长度的字符串进行排序。它编译得很好,但在运行时,它给出了 java.lang.NoClassDefFoundError。我已经尝试在网上搜索它,但到目前为止还没有收到解决方案。因此,如果有人能指出我的错误,我将不胜感激。提前致谢!

public class LSD
{
    public static void LSDsort(String[] a, int W) // fixed-length W strings
    {
        int R = 256;
        int N = a.length;
        String[] aux = new String[N];

        for (int d = W-1; d >= 0; d--)
        {
            int[] count = new int[R+1];
            for (int i = 0; i < N; i++)
                count[a[i].charAt(d) + 1]++;
            for (int r = 0; r < R; r++)
                count[r+1] += count[r];
            for (int i = 0; i < N; i++)
                aux[count[a[i].charAt(d)]++] = a[i];
            for (int i = 0; i < N; i++)
                a[i] = aux[i];
        }
    }

    public static void main (String[] args)
    {
        String[] arr = {"11AG3EP04", "11AG30022", "11CS10023", "11EC10015",
        "12CS3EP01", "10BT3FP01", "14NA10004", "13MF10012"};
        LSDsort(arr, 9);

        for (String s: arr) System.out.println(s);
    }
}

【问题讨论】:

  • 你是如何运行它的?它在您的课程路径中吗?使用IDE(例如Eclipse)时会重复吗?
  • 阿米特,我试图使用命令提示符 (Windows) - javac LSD.java 和 java LSD 运行它。那里出现问题。此外,我再次尝试使用 NetBeans 并没有显示问题。实在看不懂,为什么?
  • 阿尔伯特,感谢您的参考。我还浏览了一些资源来解释错误的原因,但我无法弄清楚我可以做些什么来消除错误。

标签: java string sorting runtime-error


【解决方案1】:

LDS 类是否属于 package

如果是这样,它必须从包的基本目录运行。我的意思是,如果包是foo.bar,它必须从foo的父目录运行:

java -cp . foo.bar.LSD

如果LSD 没有包,它应该按照你的方式工作,从LSD.class 所在的目录运行。 你可以试试

java -cp . LSD 

虽然我认为它应该在没有-cp 的情况下工作,就像@meskobalazs cmets:

The default value of the class path is ".", meaning that only the current directory is searched

【讨论】:

  • 当前工作目录位于我所知道的每个操作系统的类路径中。
【解决方案2】:

Java 没有遇到主类时的正常错误是这样的(我的 Java 产生法语错误消息......这没有帮助):

$ java  Foobar
Error: unable to find or load main class Foobar

您应该尝试使用 javac 重新编译您的 java 文件:它应该会生成一个 LSD.class。

javac LSD.java

然后尝试再次运行它:

java -cp . LSD

另外,提供完整的堆栈跟踪,而不仅仅是错误消息。它可能包含更多信息。

【讨论】:

  • 感谢 java -cp 。 LSD 有效。但我仍然有这个小疑问。 LSD.java 文件存储在 Documents 中(没有任何包),LSD.class 文件也在编译时在 Documents 中生成,即当前目录。那为什么没有 -cp 就不能工作。 ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 2015-09-03
  • 1970-01-01
相关资源
最近更新 更多