2016-12-14 4 views
-1

私はこれについて多くの投稿を読んでいますが、何も試したことがないようです。どんな助けでも大歓迎です。Javaの配列リストにオブジェクトに格納されている値を見つける方法

私は2つのクラス、ColouredShapeShapeMatchingGameを持っています。 私はColouredShapeオブジェクトを2つの引数を使用して作成し、それらをShapeMatchingGameクラスのArrayListに追加しようとしています。 私は4つの形状* 3のそれぞれの4つの形と3つの色が必要なので、配列の36の項目。

ループ内の配列に36個のオブジェクトが追加されていますが、配列のオブジェクトの値にアクセスしようとすると、そのインデックスのオブジェクトの期待値が表示されません。 私が尋ねようとしているのは、値に誤ってアクセスしているか、オブジェクトを作成して配列に追加するのに間違ったことをしているかどうかです。

public class ColouredShape { 

static int shapeValue; 
static int colourValue; 
static String colour, shape; 

public ColouredShape() // Default constructor 
{ 
    this.shapeValue = 1; 
    this.colourValue =1; 
    this.colour =""; 
    this.shape =""; 
} 

public ColouredShape (int shapeValue,int colourValue) // Constructor with 2 arguments 
{ 
    this.shapeValue = shapeValue; 
    this.colourValue =colourValue; 
    this.colour = colour; 
    this.shape =shape; 
} 


    public int getColour() 
    { 
     return colourValue; 
     }  

    public int getShape() 
    { 
     return shapeValue; 

     } 

public class ShapeMatchingGame { 

static int noShapes; 
static ArrayList<ColouredShape> ColouredShapes = new ArrayList<ColouredShape>(); 
static int index; 
static int shapeValue=1; 
static int colourValue; 

public static void main(String[] args) 
{ 

    ObjectCreation(); 
} 



    public static void ObjectCreation() 
    { 
     do// runs loops 3 times to create 3 of every shape/colour combo 
     {   
      do // loop to continue onto the next shape until 4 are created 
      { 
       do // loop to create 3 of colours of same shape 
       {  
        colourValue++; 
        System.out.println("Shape value " +shapeValue + " colour value " +colourValue); 
        ColouredShape gameShapes = new ColouredShape(shapeValue,colourValue); 
        ColouredShapes.add(gameShapes);//creates an object of colourshapes and passes the current shapevalue + colourvalue as arguments then adds it to the arraylist 
        System.out.println ("Value of object at array index "+ index + " shape value " + ColouredShapes.get(index).getShape()+" colour value " +ColouredShapes.get(index).getColour()+ "colour variable value = " + colourValue);      
        index++; 
        for (ColouredShape colouredShape : ColouredShapes) 
        { 
         System.out.println(colouredShape.getClass().getName() + "/" + 
           colouredShape.shape + "/" + 
           colouredShape.colour); 

        } 

       }while(colourValue < 3); 
       System.out.println ("Value of object at array index "+ "0" + " shape value " + ColouredShapes.get(0).getShape()+" colour value " +ColouredShapes.get(0).getColour()+ "colour variable value = " + colourValue); 
       colourValue=0;//reset colourValue to allow next iteration of the loop 
       shapeValue++;//incrementing shapeValue to add colours to next shape 
       System.out.println ("Value of object at array index "+ "0" + " shape value " + ColouredShapes.get(0).getShape()+" colour value " +ColouredShapes.get(0).getColour()+ "colour variable value = " + colourValue); 
      }while(shapeValue < 5); 

      shapeValue=1; // resetting shapeValue to allow next iteration of the loop 
      noShapes++; 

     }while (noShapes<3); 

    } 

} 
+0

期待どおり 'colour'と' colourValue'の両方を持っていないのはなぜ結果がすべきですか?あなたのコンストラクタが1だけを使用しているようです。 – 4castle

+0

[なぜ、私のArrayListはリストに最後に追加されたアイテムのN個のコピーを含んでいますか?](http://stackoverflow.com/questions/19843506/why-does-my-最後にアイテムに追加されたリストのリストを含む) – 4castle

+0

あなたの出力と期待される出力は何ですか? – samirk433

答えて

0

はあなたColouredShape上のいくつかの問題があります。

  1. shapeValueとcolourValueは静的です。これは、それらが「グローバル」変数であることを意味します。どのように多くのColouredshapesを作成するかは関係ありませんが、すべて同じ値を持ちます
  2. コンストラクタは静的変数の値のみを設定し、文字列テキストの値を出力します。

変更オブジェクトは、次のようになるために:

public class ColouredShape { 

    int shapeValue; 
    int colourValue; 

    public ColouredShape() // Default constructor 
    { 
     this.shapeValue = 1; 
     this.colourValue = 1; 
    } 

    public ColouredShape(int shapeValue, int colourValue) // Constructor with 2 
                 // arguments 
    { 
     this.shapeValue = shapeValue; 
     this.colourValue = colourValue; 
    } 

    public int getColour() { 
     return colourValue; 
    } 

    public int getShape() { 
     return shapeValue; 
    } 
} 

+0

返信いただきありがとうございます。これらの変数を使用するColourShapeクラスのコードがいくつかあります。静的に設定されていない場合は、エラーが表示されます。その問題をぶつける最善の方法は何でしょうか? – Kieran

+0

パブリック静的文字列ShapeShape()//メソッド列 \t { \t \t \t \t shapeValue = RandomShape()のような形状の色を返します。 \t \t \t \t IF(shapeValue == 1) \t \t \t形状=スクエア。 \t \t \t \t(shapeValue == 2) \t \t \t形状=長方形場合; \t \t \t \t IF(shapeValueの== 3) \t \t \t形状=トライアングル。 \t \t \t \t IF(shapeValueの== 4) \t \t \t形状=サークル。 \t \t return shape; \t \t \t} – Kieran

+0

このメソッドは、インスタンスデータ(作成するオブジェクトごとに異なる戻り値が必要)に依存するため、静的にすることはできません。静的修飾子を削除すると効果があります –

関連する問題