Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我会得到;静态错误:此类没有接受字符串[]的静态void main方法;即使我有它?_Java - Fatal编程技术网

Java 为什么我会得到;静态错误:此类没有接受字符串[]的静态void main方法;即使我有它?

Java 为什么我会得到;静态错误:此类没有接受字符串[]的静态void main方法;即使我有它?,java,Java,我得到了“静态错误:这个类没有接受字符串[]的静态void main方法”,尽管我的代码中有“publicstaticvoid main(stringargs[]) 使用Java博士 public static void main(String args[]) throws Exception { // just for testing purposes int myArray[] = {4,6,8,1,3,2,9,5,7,6,4,2,1,3,9,8,7,5}; mer

我得到了“静态错误:这个类没有接受字符串[]的静态void main方法”,尽管我的代码中有“publicstaticvoid main(stringargs[]) 使用Java博士

public static void main(String args[]) throws Exception {

    // just for testing purposes
    int myArray[] = {4,6,8,1,3,2,9,5,7,6,4,2,1,3,9,8,7,5};
    mergeSort(myArray);
    System.out.println("Sorted array is:\n");
    for (int i = 0; i < myArray.length; i++) {
        System.out.print(myArray[i] + " ");
    }
    System.out.println();
}
publicstaticvoidmain(字符串args[])引发异常{
//只是为了测试的目的
int myArray[]={4,6,8,1,3,2,9,5,7,6,4,2,1,3,9,8,7,5};
合并排序(myArray);
System.out.println(“排序数组为:\n”);
for(int i=0;i
上面有代码,我没有错误,但是当我尝试运行代码时,我得到了错误。 提前谢谢

下面是对象类之外的代码

class MergeSortNonRecursive {

    static Stack<ProgramFrame> callStack;

    // this implement the merge algorithm seen in class. Feel free to call it.
    public static void merge(int A[], int start, int mid, int stop) {
        int index1 = start;
        int index2 = mid + 1;
        int tmp[] = new int[A.length];
        int indexTmp = start;

        while (indexTmp <= stop) {
            if (index1 <= mid && (index2 > stop || A[index1] <= A[index2])) {
                tmp[indexTmp] = A[index1];
                index1++;
            } else {
                if (index2 <= stop && (index1 > mid || A[index2] <= A[index1])) {
                    tmp[indexTmp] = A[index2];
                    index2++;
                }
            }
            indexTmp++;
        }
        for (int i = start; i <= stop; i++) A[i] = tmp[i];
    }

    static void mergeSort(int A[]) {
        /* WRITE YOUR CODE HERE */
        //stack we use
        callStack = new Stack<ProgramFrame>();

        //initial program frame
        ProgramFrame current = new ProgramFrame(0, A.length - 1, 1);

        //put frame on stack
        callStack.push(current);

        //as long as our stack isn't empty...
        while (!callStack.empty()) {

            //as long as the top Frame contains more than one integer
            while (callStack.peek().start < callStack.peek().stop) {

                //must be defined before pushing or else the values mess up
                int left = callStack.peek().start;
                int middle = (callStack.peek().start + callStack.peek().stop) / 2;
                int right = callStack.peek().stop;

                current = new ProgramFrame(middle + 1, right, callStack.peek().PC++);
                callStack.push(current);
                //order ensures left is always on the top
                current = new ProgramFrame(left, middle, callStack.peek().PC++);
                callStack.push(current);
            }
            int PC = callStack.peek().PC; // need to check PC's
            int start = callStack.peek().start;  //assign start and mid for merge
            int mid = callStack.peek().stop; //assign left and middle for merge from the left frame
            callStack.pop();

            //required if the next Frame (the right frame) isn't at its base of 1 integer and they have to be the same PC otherwise this will run continously
            if ((callStack.peek().start != callStack.peek().stop) && (PC == callStack.peek().PC)) {

                //must be defined before pushing or else the values mess up
                int left = callStack.peek().start;
                int middle = (callStack.peek().start + callStack.peek().stop) / 2;
                int right = callStack.peek().stop;

                current = new ProgramFrame(middle + 1, right, callStack.peek().PC++);
                callStack.push(current);
                //order ensures left is always on the top
                current = new ProgramFrame(left, middle, callStack.peek().PC++);
                callStack.push(current);
            }

            int stop = callStack.peek().stop; //get stop from the right frame

            merge(A, start, mid, stop); //merge 
        }
    }

    //Static Error: This class does not have a static void main method accepting String[]. ??!??
    public static void main(String args[]) throws Exception {

        // just for testing purposes
        int myArray[] = {4,6,8,1,3,2,9,5,7,6,4,2,1,3,9,8,7,5};
        mergeSort(myArray);
        System.out.println("Sorted array is:\n");
        for (int i = 0; i < myArray.length; i++) {
            System.out.print(myArray[i] + " ");
        }
        System.out.println();
    }
}
类MergeSortNonRecursive{
静态堆栈调用堆栈;
//这实现了类中的合并算法。可以随意调用它。
公共静态无效合并(int A[],int start,int mid,int stop){
int index1=开始;
int index2=mid+1;
int tmp[]=新的int[A.length];
int indexTmp=开始;
while(indexTmp)
需要:

public class MergeSortNonRecursive 
包含main方法的类必须是public

更新:在Dr Java中尝试了这个 看起来Java博士正在尝试运行ProgramFrame。我希望完整输出如下:

Welcome to DrJava.  Working directory is /code
> run ProgramFrame
Static Error: This class does not have a static void main method accepting String[].

将类ProgramFrame放在公共类MergeSortNonRecursive之后使其工作。但是,您的mergesort存在问题,它将永远循环。您需要对此进行调试。

一种可能性(根据经验)在从Dr.Java运行程序之前,请确保在屏幕的左栏中选择了正确的Java类文件。例如,我的一个应用程序由三个Java类组成。如果我选择了包含main方法的类,则该类工作正常。但如果我在项目中选择了其他类,则我获取错误消息:“静态错误:此类没有接受字符串[]的静态void main方法。”这个错误是有道理的,因为所选的类中没有主方法,但我希望Java博士检查项目中的所有类以找到主方法。

您编译的类是否正确?是的,它们都在同一个类中。我是在教授给出的代码基础上构建的。这部分已经写好了,我还没有看到激怒了它,我的类中似乎没有人有此问题。请确保它不在内部类中。向我们显示类标题等。请向我们显示整个文件,而不仅仅是它的这一部分。错误不在您显示的部分。我已将其公开,它仍然会给出相同的错误。该类位于名为MergeS的文件中ortNonRecursive.java?是的。我很困惑,我的教授给了我代码,我所接触的只是mergeSort方法。你能把堆栈跟踪的前20行左右粘贴到你的问题中吗?我不知道怎么做。我是个新手,这是我的第二节计算机科学课
public class MergeSortNonRecursive 
Welcome to DrJava.  Working directory is /code
> run ProgramFrame
Static Error: This class does not have a static void main method accepting String[].