2015-04-04 3 views
0

Я пишу программу, которая создает игровое поле и использует суперкласс и подклассы для создания платы. По сути, я хочу использовать arrayList, который сохраняет значения, возвращаемые из методов подклассов Cell. Но я не могу понять, как это сделать. То, что я написал в классе BoardGame, дает мне ошибку, и я не могу придумать другой способ сделать это.  GameBoardСохранение метода возвращаемого значения в ArrayList

import java.util.ArrayList; 


public class BoardGame { 



    private Die theDie; 



    BoardGame(){ 





    } 

    void buildBoard(){ 

     ArrayList<Player> player; 




     Cell c = new Cell(); 

     ArrayList<Cell>cells = new ArrayList<Cell>(); 

     cells.add(c.landOn()); 

    } 

    void runSimulation(){ 

    } 


    int takeTurn(String n){ 

     //since we don't know what we are returning yet 
     return 0; 


    } 

    String toString(String n){ 


     //Since we aren't returning anything yet 
     return "Nothing"; 


    } 
} 






public class Cell { 

    static int landOn(){ 


     //Since we do not know what we are returning 
     return 0; 
    } 

    public String toString(){ 



     //Since we do not know what we are returning 
     return "Blank"; 
    } 

} 




public class Star extends Cell { 

    int landOn(){ 


     //since we do not know what we are returning 
     return 5; 
    } 

    public String toString(){ 


     //since we do not know what we are returning 
     return "Star: +5"; 
    } 

} 



public class Lightning extends Cell { 

    int landOn(){ 


     //since we do not know what we are returning 
     return -5; 
    } 

    public String toString(){ 


     //since we do not know what we are returning 
     return "Lightning: -5"; 
    } 

} 



public class X extends Cell { 

    int landOn(){ 


     //since we do not know what we are returning 
     return -10; 
    } 

    public String toString(){ 


     //since we do not know what we are returning 
     return "X: -10"; 
    } 

} 



public class Smiley extends Cell { 

    int landOn(){ 


     //since we do not know what we are returning 
     return 10; 
    } 

    public String toString(){ 


     //since we do not know what we are returning 
     return "Smiley: +10"; 
    } 

} 
+0

Какую ошибку вы получаете именно? – Vahx

+0

Замечание: 'landOn()' in 'Cell' не переопределяется никакими другими методами' landOn() '(он статичен). –

ответ

1

Ваш ArrayList объявлен как Cell Возвращаемый тип для ваших методов является int. Ваш ArrayList не может ничего другого, хранить, то экземпляры типа Cell

Чтобы сохранить все типы возвращаемых методами вам нужно ArrayList типа Integer

Использование int не будет работать либо в качестве int является примитивным.

Решение:

ArrayList<Integer> cells = new ArrayList<>(); 
1

Использование ArrayList<Cell> как в коде не будет работать, так как c.landOn() возвращает int. Использование возвращаемого типа IntegerArrayList<Integer>cells решит эту проблему. Это была ошибка, которую вы видели?

PS: Кроме того, помните, что вы можете просто сказать ArrayList<Cell>cells = new ArrayList<>(); вместо ArrayList<Cell>cells = new ArrayList<Cell>();

0

Вы могли бы сделать что-то вроде этого.

класс

BoardGame:

public class BoardGame { 
    public BoardGame(){ 
     //Get finalTreats from Cell class 
     int finalTreats = this.cell.finalTreats; 
     //Add finalTreats to cells ArrayList 
     cells.add(finalTreats); 
    } 

    //Get Cell class 
    Cell cell = new Cell(); 

    //Initialize ArrayList 
    ArrayList<Integer> cells = new ArrayList<>(); 
} 

класса Cell:

public class Cell { 
    public int finalTreats; 
    public int landOn(int treats){ 
     //Test for what it landed on based on treat amount 
     switch(treats){ 
      //X 
      case -10: finalTreats = -10; 
      //Lightning 
      case -5: finalTreats = -5; 
      //Star 
      case 5: finalTreats = 5; 
      //Smiley face 
      case 10: finalTreats = 10; 

      //Blank 
      default: return 0; 
     } 
    } 
} 

звёздного (к примеру):

public class Star extends Cell{ 
    public Star() { 
     this.landOn(5); 
    } 
} 

сделать другие классы, такие как освещение и Smiley Face такой же, как Класс звезды, но при необходимости измените ценность лечения.

Надеюсь, это помогло.

+0

Операция 'case' выглядит плохой идеей - либо каждая ячейка должна возвращать сумму корректировки (которая, как я полагала, она делает в первую очередь), или рассматривать ее как делегата, чтобы ячейка выполняла настройку , Как бы то ни было, у вас будут правила в двух разных местах. –

0

Вы также можете сделать это таким образом:

public abstract class Cell{ 
... 
} 
public class EmptyCell extends Cell{ 
... 
} 
public class Win5Treats extends Cell{ 
... 
} 
public class Lose5Treats extends Cell{ 
... 
} 
public class Win10Treats extends Cell{ 
... 
} 
public class Lose10Treats extends Cell{ 
... 
}  
public class Start extends Cell{ 
... 
} 
public class End extends Cell{ 
... 
} 

И ваш массив будет так:

ArrayList<Cell> cells = new ArrayList<Cell>(); 
Смежные вопросы