找出 java 中 LSD 计数排序程序中 java.lang.NoClassDefFoundError 的原因

Figure out the reason for java.lang.NoClassDefFoundError in program for LSD count sort in java

我正在尝试为 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);
    }
}

LDS class 在 package 中吗?

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

java -cp . foo.bar.LSD

如果 LSD 没有包,它应该像你那样工作,运行 来自 LSD.class 所在的目录。 你可以试试

java -cp . LSD 

尽管我认为没有 -cp 也能正常工作,就像@meskobalazs 评论:

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

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

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

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

javac LSD.java

然后再试一次运行:

java -cp . LSD

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