gpt4 book ai didi

java - 为什么我得到 "Static Error: This class does not have a static void main method accepting String[]."即使我有它?

转载 作者:行者123 更新时间:2023-12-02 05:21:28 27 4
gpt4 key购买 nike

我收到“静态错误:此类没有接受 String[] 的 static void main 方法。”即使我的代码中有“public static void main(String args[])”使用Dr. 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();
}

上面有代码,我没有错误,但是当我尝试运行代码时,我收到了该错误。提前致谢。

下面是对象类之外的代码

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.java

import java.util.*;
import java.io.*;

class ProgramFrame {
int start;
int stop;
int PC;

public ProgramFrame(int myStart, int myStop, int myPC) {
start = myStart;
stop = myStop;
PC = myPC;
}

// returns a String describing the content of the object
public String toString() {
return "ProgramFrame: start = " + start + " stop = " + stop + " PC = " + PC;
}
}

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

最佳答案

class MergeSortNonRecursive 

需要:

public class MergeSortNonRecursive 

包含 main 方法的类必须是公共(public)的。

更新:在 Dr Java 中尝试过此操作看起来 Dr 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 放在公共(public)类 MergeSortNonRecursive 之后即可使其工作。 但是,您的合并排序存在问题,并且它将永远循环。您需要对其进行调试。

关于java - 为什么我得到 "Static Error: This class does not have a static void main method accepting String[]."即使我有它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26478170/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com