0

私はJavaを学び始めたばかりで、プログラムに取り組んでいます。ここでエラーが発生します:

locationsOfCells = simpleDotCom.getLocationCells();

しかし、エラーが何であるかはわかりません。Eclipseは言う

getLocationCells()タイプから非静的メソッドへの静的参照を作成できません simpleDotCom

誰かがこれを手伝ってくれますか?私は何が間違っているのですか?

public class simpleDotCom {
    int[] locationsCells;

    void setLocationCells(int[] loc){
        //Setting the array
        locationsCells = new int[3];
        locationsCells[0]= 3;
        locationsCells[1]= 4;
        locationsCells[2]= 5;
    }

    public int[] getLocationCells(){

        return locationsCells;

    }
}

public class simpleDotComGame {

    public static void main(String[] args) {
        printBoard();
    }

    private static void printBoard(){
        simpleDotCom theBoard = new simpleDotCom();
        int[] locationsOfCells; 
        locationsOfCells = new int[3];
        locationsOfCells = theBoard.getLocationCells();

        for(int i = 0; i<3; i++){
            System.out.println(locationsOfCells[i]);
        }

    }

}
4

7 に答える 7

3

getLocationCells()問題は、実際にはインスタンスメソッドであるのに、静的メソッドであるかのようにメソッドを呼び出していることです。

まず、次のようにクラスからオブジェクトを作成する必要があります。

simpleDotCom myObject = new simpleDotCom();

次に、そのメソッドを呼び出します。

locationsOfCells  = myObject.getLocationCells();

ちなみに、Javaの世界では広く使用されている命名規則があり、クラス名は常に大文字で始まりますSimpleDotCom。混乱を避けるために、クラスの名前を変更する必要があります。

于 2012-09-07T12:15:22.757 に答える
1
simpleDotCom obj = new simpleDotCom();
locationsOfCells = obj.getLocationCells();

また、クラス名は大文字で始める必要があります

于 2012-09-07T12:23:11.483 に答える
1

getLocationCellsあなたは静的な方法で試みています。simpleDotCom最初に次のインスタンスを作成する必要があります。

simpleDotCom mySimpleDotCom = new simpleDotCom();       
locationsOfCells = mySimpleDotCom.getLocationCells();

ところで、クラス名は常に大文字で始まります。これは、メンバーメソッドとしてメソッドにアクセスする際の混乱を取り除くのに役立ちます。

アップデート:

更新された静的メソッドからアクセスするには、変数theBoardとして次のように宣言する必要があります。static

static simpleDotCom theBoard = new simpleDotCom();
于 2012-09-07T12:16:07.370 に答える
1

mainメソッドから非静的メソッドを参照しようとしています。これはJavaでは許可されていません。そのsimpleDotComクラスを静的として作成して、uがそのクラスのメソッドにアクセスできるようにすることができます。

于 2012-09-07T12:19:04.477 に答える
0

コードにさらにエラーがあります。

  1. 非静的メソッドはクラス名で呼び出すことができませんでした。したがって、オブジェクトを使用してgetLocationCells()を呼び出してみてください。

    simpleDotCom obj = new simpleDotCom(); obj.getLocationCells()

  2. 次に、uはnullポインタ例外を取得します。初期化される前に、locationsOfCells値を出力しようとします。したがって、値を出力する前にsetLocationCells()メソッドを呼び出してみてください。

  3. Urメソッド定義voidsetLocationCells(int [] loc)。ここで、uはパラメーターlocを持っていますが、メソッドブロックのどこも使用していません。したがって、メソッドパラメータの処理に注意してください。

于 2012-09-07T12:39:30.403 に答える
0

静的コンテキストから通常の非静的メソッドにアクセスしようとしていますが、機能しません。

getLocationCells(): fromにアクセスしようとするルーチンから静的ワードを削除するかgetLocationCells()、宣言に静的ワードを追加して静的にすることができます。

于 2012-09-07T12:13:37.077 に答える
0

simpleDotComのフィールドとメソッドも静的にするか、simpleDotComのインスタンスを作成してインスタンスのメソッドにアクセスします。

于 2012-09-07T12:14:46.357 に答える