2

Javaでは、メソッドでクラス変数を使用する方法は?

これは私が持っているコードです

public class ExamQ3a {
    String[] descriptionArr = new String[50];
    static int[] codeArr = new int[50];

    public static void displayItems(int count, int[] codeArr,
            String[] descriptionArr) {
        count = this.codeArr.length;
        for (int i = codeArr.length; i < codeArr.length; i--) {

        }
    }
}

ここで強調表示されている行は、count=this.codeArr.length;です。私が得ているエラーは、非静的変数が静的コンテキストから参照できないことです。しかし、私はすでに変数を静的にしました。では、何が得られるのでしょうか?

リクエストに応じてのみ!全体の質問をしたいのではなく、なぜ静的を使用したいのかを知るために、これは練習用の質問です

会社の在庫を管理するための簡単なアプリケーションシステムを開発する必要があります。システムは、最大50個のアイテムのリストを維持できる必要があります。各アイテムには、一意の整数コードと説明があります。

(a)コードとアイテムの説明を格納する2つの配列を宣言および作成するJavaステートメントを記述します。

(b)次のメソッドシグネチャを使用してJavaメソッドを記述します。

public static void displayItems(int count、int [] codeArr、String [] descriptionArr)

このメソッドは、会社のすべてのアイテムのコードと説明を、適切な列見出しのある表形式で表示します。

パラメータ:codeArr:アイテムのコードを格納する配列

descriptionArr:アイテムの説明を格納する配列

カウント:システム内のアイテムの数

4

3 に答える 3

5

this静的な世界にはありません。それを取り除きます。説明するthisと、現在のインスタンスを参照します。静的メソッドまたは変数を処理する場合は、特定のインスタンスではなく、クラスに関連付けられたアイテムを処理します。したがって、コードを次のように変更します。

count = codeArr.length;

編集1
余談です} } }が、コードを読んだりフォローしたりするのが非常に難しくなるような中括弧をまとめたくはありません。空白は空いているので、コードの可読性を向上させるために慎重に使用することをお勧めします。

編集2
あなたは次のように述べています。

では、配列codeArrをクラス変数codeArrにどのように参照しますか?

あなたはクラスの中にいて、クラス変数名は使用されていると想定されているので、ここで使用する必要はありません。静的変数またはメソッド名を使用するだけで、ゴールデンになります。

編集3
このタイプの変数にstaticを使用すると、コードに悪臭がします。これが静的変数ではなくインスタンス変数である場合、プログラム全体の方がはるかに優れていると思います。これについての詳細は、変数を静的にすることにした理由を教えてください。

于 2012-10-25T02:16:48.007 に答える
1

静的変数の前にクラスの名前を付けるメソッドパラメータと同じ名前の静的変数を参照しますか?この場合はになりますExamQ3a.codeArr

これを処理するもう1つの方法は、メソッドパラメータに別の名前を選択するか、インスタンス/静的変数に共通のプレフィックスの使用を開始することです。

于 2012-10-25T02:24:31.870 に答える
1

注意すべきもう1つのポイントは、次のコードでは、statement1は実行されないということです。

for (int i = codeArr.length; i < codeArr.length; i--) { statement1; }

どちらかである必要があります

int length = codeArr.length;
for (int i = 0; i < length; i++) { ... }

また

int length = codeArr.length;
for (int i = (length-1); i > -1 ; i--) { ... }
于 2012-10-25T06:35:01.037 に答える