Java 当尝试运行我的合并排序时,它说找不到类

Java 当尝试运行我的合并排序时,它说找不到类,java,Java,我知道合并排序是如何工作的,但我一直得到一个未找到的类定义 我的代码是: /* * Merge Sort Implementation */ public class MergeSort { private int[] array; private int length; private int[] tempArray; public void MergeSort(){} public static void main(String args[]) { int[] i

我知道合并排序是如何工作的,但我一直得到一个未找到的类定义

我的代码是:

/*
 * Merge Sort Implementation
 */

public class MergeSort {

private int[] array;
private int length;
private int[] tempArray;

public void MergeSort(){}

public static void main(String args[])
    {
    int[] itemsToSort = {1,5,3,6,7,3,7,1,2};
    MergeSort ms = new MergeSort();
    ms.sort(itemsToSort);

    for (int i: itemsToSort){
        System.out.print(i);
        System.out.print(" ");
        }
    }

public void sort( int arr[] )
    {
    this.array = arr;
    this.length = arr.length;
    this.tempArray = new int[this.length];

    sort(0, this.length -1);
    }

private void sort ( int lowerBounds, int upperBounds)
    {
    if (lowerBounds < upperBounds)
        {
        int center = (upperBounds + lowerBounds)/2 + lowerBounds;
        sort(lowerBounds, center);
        sort(center + 1, upperBounds);
        merge(lowerBounds,center, upperBounds);
        }
    }

private void merge ( int lowerBounds, int center, int upperBounds)
    {
    for (int i = lowerBounds; i < upperBounds; i++)
        {
        this.tempArray[i] = this.array[i];
        }

    int i = lowerBounds;
    int j = center + 1;
    int k = upperBounds;

    while(i <= center && j <= upperBounds)
        {
        if (this.tempArray[i] <= this.tempArray[j])
            {
            this.array[k] = this.tempArray[i];
            i++;
            }
        else
            {
            this.array[k] = this.tempArray[j];
            j++;
            }
        k++;
        }
    while ( i <= center )
        {
        this.array[k] = this.tempArray[i];
        k++;
        i++;
        }
    }

}
确切的错误是:

[freaper@www java]$ javac MergeSort.java
[freaper@www java]$ java MergeSort.o
Exception in thread "main" java.lang.NoClassDefFoundError: MergeSort/o
Caused by: java.lang.ClassNotFoundException: MergeSort.o
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
Could not find the main class: MergeSort.o. Program will exit.

运行文件时只需要类名

java MergeSort
.o
添加到它的末尾对您没有任何好处


注意:编译该类时,Java会生成它的
.class
。在本例中,它生成
MergeSort.class
。然后,您将只希望使用该文件的名称而不使用后缀在Java上下文中执行,因此您将使用
JavaMergeSort

正如Makoto所说,您不需要
JavaMergeSort
末尾的
.o

我运行了这个程序,在
排序(lowerBounds,center)上从这个函数得到了一个stackoverflow

    private void sort ( int lowerBounds, int upperBounds)
        {
        if (lowerBounds < upperBounds)
            {
            int center = (upperBounds + lowerBounds)/2 + lowerBounds;
            sort(lowerBounds, center);
            sort(center + 1, upperBounds);
            merge(lowerBounds,center, upperBounds);
            }
        }
private void排序(整数下限,整数上限)
{
if(下限<上限)
{
int center=(上界+下界)/2+下界;
排序(下排,中间);
排序(中心+1,上界);
合并(下限、中心、上限);
}
}
尝试添加一些调试以查找问题。请记住,您使用的是递归,但没有基于排序的基本情况设置

private void sort(int lowerBounds, int upperBounds) {
        if (lowerBounds < upperBounds) {
            System.out.println("Lower " + lowerBounds + "\tUpper " + upperBounds);
            int center = (upperBounds + lowerBounds) / 2 + lowerBounds;
            sort(lowerBounds, center);
            sort(center + 1, upperBounds);
            merge(lowerBounds, center, upperBounds);
        }
    }
private void排序(整数下限,整数上限){
if(下限<上限){
System.out.println(“下限”+lowerBounds+“\tUpper”+上限);
int center=(上界+下界)/2+下界;
排序(下排,中间);
排序(中心+1,上界);
合并(下限、中心、上限);
}
}

您既没有向我们展示如何尝试运行它,也没有向我们展示确切的错误消息。。。考虑到它无法运行您的任何代码,代码本身并不十分重要,但您正在做的是。找不到哪个类?粘贴你的异常。我调整了它以添加错误和我运行itOMG的方式。谢谢我习惯于C语言,并制作对象文件。是的,我想我已经习惯了用我多年来一直在做的C语言来制作对象文件。谢谢你提醒我。奥苏。我认为这可能是C语言造成的,所以没有伤害也没有犯规。调整后,再次运行它,返回:
线程“main”java.lang.NoSuchMethodError中的异常:main
知道为什么会这样吗?代码中的任何内容都不会产生这种情况,除非您是从另一个包中运行它。确定。谢谢!:)你帮了大忙。是的,我忘了添加基本情况。我也注意到溢油了
private void sort(int lowerBounds, int upperBounds) {
        if (lowerBounds < upperBounds) {
            System.out.println("Lower " + lowerBounds + "\tUpper " + upperBounds);
            int center = (upperBounds + lowerBounds) / 2 + lowerBounds;
            sort(lowerBounds, center);
            sort(center + 1, upperBounds);
            merge(lowerBounds, center, upperBounds);
        }
    }