1

長いとりとめのないswitchステートメントを回避するために、キューの配列で基数ソートを実行しようとしていますが、配列を適切に初期化するのに問題があります。コンストラクターと実装例を以下に示します。

コンパイルしようとすると、シンボルが見つからないというエラーが発生します。

 public static radixj(){
    IntQueue[] buckets = new IntQueue[10];
    for (int i = 0; i < 10; i++)
    buckets[i] = new IntQueue();
   }

 public static void place(int temp, int marker)
 {
  int pos = temp % marker; 
  buckets[pos].put(temp);
 }

私が犯しているのは本当に単純な間違いだと確信していますが、それを見つけることができません。どんな助けでも大歓迎です。

4

2 に答える 2

3

あなたのコードで

IntQueue[] buckets = new IntQueue[10];

関数のローカル変数です

public static radixj()

リターンタイプが必要です

public static void radixj()

したがって、別の関数で使用することはできません

buckets[pos].put(temp);

静的クラス変数を宣言する必要があります

class Foo {
    static IntQueue[] buckets = new IntQueue[10];
    ...

次を使用してアクセスします。Foo.buckets

class Foo {
    public static IntQueue[] buckets = new IntQueue[10];
    public static void radixj() {
        for (int i = 0; i < 10; i++) {
            Foo.buckets[i] = new IntQueue();
        }
    }

    public static void place(int temp, int marker) {
        int pos = temp % marker;
        Foo.buckets[pos].put(temp);
    }
}
于 2013-02-13T14:44:10.547 に答える
1

の戻り型radixj()が欠落しておりbuckets、変数に解決できません

于 2013-02-13T14:45:43.383 に答える