2016-03-28 3 views
0

これは私の2つのクラスです。 Eclipseは、whileループの中でmyGrid [0]に下線を引いて、メッセージ "を取得します。式の型は配列型でなければなりませんが、グリッドは"に解決されます。助けをお待ちしています。Java:プライベートフィールドによるオブジェクトアクセス

public class Grid { 
    private int[][] myGrid; 
    private int x, y; 

    public Grid(int x, int y) { 
    myGrid = new int[y][x]; 
    } 
} 

import java.util.Scanner; 

public class Play { 

    private Scanner input = new Scanner(System.in); 

    private void setPosition (Grid myGrid) { 
    boolean counter = false; 

    while (counter == false) { 
     System.out.println("Give a position, from 0 to " + myGrid[0].length-1 + " : >"); 
     x = Integer.parseInt(input.nextLine()); 
    } 
    } 
} 
+8

をあなたは、そのmyGridフィールドでグリッドクラスを混乱しています。彼らは完全に異なっています。グリッドパラメータにフィールドと同じ名前を付けるだけで、同じことではありません。 myGridは純粋で単純なグリッド変数であり、配列ではありません。 –

+1

SOの質問を掲示する代わりに問題を診断するには、混乱を避けるために変数名を複数回使用しないでください。 – 4castle

+0

2つの変数が同じ名前を持つからといって、同じ変数にしないからです。同じ名前の2つの異なる変数を定義しました。 –

答えて

1

あなたはそのmyGridフィールドでグリッドクラスを混乱しています。彼らは完全に異なっています。グリッドパラメータにフィールドと同じ名前を付けるだけで、同じことではありません。 myGridは純粋で単純なグリッド変数であり、配列ではありません。ここ

private void setPosition (Grid myGrid) { 

myGridは、グリッド可変であり、配列ではなく、そのように扱うことができません。これは私のコードであれば、私はグリッドクラスにgetColumnCount()方法

public class Grid { 
    private int[][] myGrid; 
    private int x, y; 

    public Grid(int x, int y) { 
     myGrid = new int[y][x]; 
    } 

    public int getRowCount() { 
     return myGrid.length; 
    } 

    public int getColumnCount() { 
     return myGrid[0].length; 
    } 
} 

を与えるだろうし、それを呼び出す:

private void setPosition (Grid myGrid) { 
    boolean counter = false; 

    while (!counter) { 
     System.out.println("Give a position, from 0 to " + (myGrid.getColumnCount() - 1) + " : >"); 
     x = Integer.parseInt(input.nextLine()); 
    } 
} 
関連する問題