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);
}
}