2

私はStackOverflowの長年のファンであり、過去数学期にわたって、実際に質問することなく、すべての質問に対する答えを見つけることができたと言って、この前置きをします。しかし、私はスタックプログラムで問題を抱えています。これよりも多くのコードがありますが、問題をこの1つのエラーに絞り込んだと思います。それは述べています

スレッド"main"java.lang.Errorの例外:未解決のコンパイルの問題:

非静的フィールドStack1への静的参照を作成できません
コンストラクタStack(int)が未定義です

stack.main(stack.java:11)​​で

誰かが問題が何であるかを説明できますか?または、さらに良いことに、それを説明する場所を教えてください。オーバーフローやグーグルで調べてみましたが、実際に何を探しているのかわからないことや倦怠感が原因で具体的な答えが見つからないと思います。よろしくお願いします。

public class stack {
private Object[] Stack1;
private int topOfStack;
private int max;
//private int empty;
//private int capacity;

public static void main(String[] args) {
Stack1 = new Stack(5);
    
}

public Stack(int size) {
    if (size < 0){
        throw new IllegalArgumentException("Parameter must be >0. Parameter was " + size + ".");
    }
    
    max = size; 
    Stack1 = (Object[]) (new Object[size]);
    topOfStack = -1;
}
   }
4

5 に答える 5

1

クラスの名前を「Stack」(大文字)に変更し、次の行を変更します。

Stack1 = new Stack(5)

に:

Stack stack1 = new Stack(5);
于 2011-10-05T03:21:31.870 に答える
1

次の行で-

private Object[] Stack1;

Stack1静的ではありません。

そして、以下であなたは参照しようとしていますStack1-

public static void main(String[] args) {
    Stack1 = new Stack(5);
}

そこから静的mainです。

したがって -

非静的フィールドStack1への静的参照を作成できません

コンストラクター名はStack、クラス名と一致しませんstack。それで -

コンストラクターStack(int)は未定義です

たぶん、あなたはあなたのクラスに名前を付けたいと思うでしょうStackそしてあなたmainの次のように-

public static void main(String[] args) {
    Stack stack1 = new Stack(5);
}
于 2011-10-05T03:23:22.530 に答える
0

クラスはstack小文字として宣言されています。

于 2011-10-05T03:05:40.233 に答える
0

Stack1インスタンス変数はstackクラスに対してです。Stack1静的mainメソッドでは、インスタンス変数であっても、変数に値を格納しようとします。また、型がの配列である変数に非配列型を割り当てようとしますObjectStackさらに、クラスが小文字で呼び出されている場合でも、(大文字に注意してください)のコンストラクターがありますstack

于 2011-10-05T03:09:06.300 に答える
0

小文字のクラス宣言を維持しながら、割り当てを推測しています

   Stack1 = new Stack(5);

あなたが意図したものではありません。それよりも:

Stack1 stack = new stack(5);
于 2011-10-05T03:12:42.277 に答える