[解決済み] なぜ「Static Error: このクラスには String[] を受け入れる静的 void main メソッドがありません" と表示されるのですが?
2022-02-03 15:50:03
質問内容
Static Errorが発生しました。このクラスは、String[]を受け入れる静的ボイドメインメソッドを持っていません" "私のコードの一部として "public static void main(String args[])" を持っているにもかかわらず Dr.ジャバを使って
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[].
public class MergeSortNonRecursive の後に class ProgramFrame を置くと動作します。 しかし マージソートに問題があり、永遠にループします。デバッグが必要です。
関連
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み] if / for / while 内で "Missing return statement" が発生する。
-
[解決済み】Android Studio クラス org.codehaus.groovy.runtime.InvokerHelper を初期化できませんでした。
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み】keytoolエラー 鍵屋が改ざんされたか、パスワードが不正確だった場合
-
[解決済み] Hide Utility Class Constructor : ユーティリティクラスはパブリックまたはデフォルトコンストラクタを持つべきではありません。
-
[解決済み] JavaでSSLピアが正しくシャットダウンされない
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み] なぜJavaのmainメソッドは静的なのですか?
-
[解決済み] なぜJavaではクラスをstaticとして宣言できないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】Hibernateエラー:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられました。
-
[解決済み】エラー:配列または java.lang.Iterable のインスタンスに対してのみ反復処理を行うことができます。
-
[解決済み】imageio.IIOException: 入力ファイルが読み込めない
-
[解決済み】Java、"変数名 "を変数に解決することができない
-
[解決済み】 java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver [重複]。
-
[解決済み] メソッドがそのスーパークラスのメソッドをオーバーライドしない
-
[解決済み】keytoolエラー 鍵屋が改ざんされたか、パスワードが不正確だった場合
-
[解決済み】Javaで文字列をコピーするにはどうしたらいいですか?
-
[解決済み] テスト