另一个数组列表到另一个不同类型的数组列表 [英] Another arraylist to another arraylist of different type

查看:80
本文介绍了另一个数组列表到另一个不同类型的数组列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

public class Game {

    private ArrayList<Player> players;
    private ArrayList<Card> deck;
    private ArrayList<Card> pool;
    **private ArrayList<Capture> capture;**
    private int currentPlayer;
    private int playDirection;
    int index;
    int count = 0;
    int passNo = 0;

    Scanner input = new Scanner(System.in);
    Scanner input2 = new Scanner(System.in);
    Scanner input3 = new Scanner(System.in);

    public Game()
    {
        deck = new ArrayList<Card>();
        pool = new ArrayList<Card>();
        capture = new ArrayList<Capture>();

        for(int c=0; c<4; c++){
            for(int i=0; i<13; i++){
                deck.add(new Card(c,i));
            }
            Collections.shuffle(deck);
        }   

    }       

     public Player play() {
         Player player = getCurrentPlayer();
         int pass = -1;
         int option =0;
         int count =0;
         boolean play = false;
         boolean check = true;

         capture = new ArrayList<Capture>();

         System.out.println();
         System.out.println(player + ":" + player.getCards());

         do{
             System.out.println("Please select an option: ((1) Capture (2) Discard a card)");
             option = input2.nextInt();


             play=player.isPlayable();


             switch(option)
             {
             case 1:
                 if(play == true){

                     System.out.print("HandCard:" + player.getCards());
                     System.out.print("  Choose a Number from 0 to " + (player.getCards().size()-1)+ "  :   ");
                     int num = input.nextInt();
                     player.getCards().remove(num);
                  //after prompting user for entering the cards they wanted
                  //the following sentence has following error                                                          
                     **capture.add(player.getCards().get(num));**
                   //"The method add(Capture) in the type ArrayList<Capture> is  
                    //not applicable for the arguments (Card)"  
                    System.out.print("How many card you want capture from pool: (Choose 1 number from  1 to " + pool.size()+ ")" + "  :  ");
                    option = input.nextInt();
                    System.out.println("Please choose your card in the pool:");
                    System.out.println("Pool");
                    for(int j=0; j<pool.size(); j++)
                    {
                        System.out.print("(" + j + ")" + pool.get(j) + " ");
                    }

                    for(int i=0; i<option;i++)
                    {

                            count = input.nextInt();
                            System.out.print(pool.get(count) + " ");
                            pool.remove(count);
                            //same problem as the above error
                            **capture.add(pool.get(count));**
                    }

                    System.out.print(player.getCards().get(num) + "  is selected");
                    System.out.println();
                    System.out.println("=================================================");
                    check=false;
                 }
                 else
                     System.out.println("Invalid Capture, Please choose either (1) Capture or (2) Discard a Card");
                 break;

             case 2:
                 if(play == true){
                     Card discard = player.cardDiscard();
                     System.out.println(discard + " has been added to pool");
                     pool.add(discard);
                     player.removeCard(discard);
                     check=false;
                 }
                 else
                     System.out.println("Invalid Capture Please choose either (1) Capture or (2) Discard a Card");
                 break;

                 default:
                     System.out.println("Invalid option choose");

             }
         }while(check);

         if(pass==currentPlayer)
         {
             passNo++;
         }
         else{
             passNo = 0;
         }

         if(player.getCards().size() == 0 ){
             int i = 1;
             int [] point = new int[players.size()+1];
             point[0] = 100;
             int lowest = 0;
             System.out.println();

             for(Player p : players){
                 System.out.println(p + ":" + p.getTotalScores() + " points");
                 point[i] = p.getTotalScores();

                 if(point[i] < point[i-1]){
                     lowest = point[i];
                 }
                 i++;
             }
             for(Player p:players){
                 if(p.getTotalScores()==lowest)
                 {
                     player = p;
                 }
             }
             return player;
             }

         goToNextPlayer();
         System.out.println();
         System.out.println("=========================================================================");
         System.out.println("Pool"); 
         for(int i=0; i<pool.size(); i++)
            System.out.print("(" + i + ")" + pool.get(i) + " ");
            return null;
         }

//捕获类 导入java.util.ArrayList;

//Capture Class import java.util.ArrayList;

       public abstract class Capture {
              private static ArrayList<Capture> capture;
              private static ArrayList<Card> card;
              boolean result = false;


public Capture()
{
    // leave bank 
}


// this part is the functions that hv to implement in pair , run , combo class
public abstract boolean formCapture(ArrayList<Capture> c);
public abstract double getScore();


public abstract void showMessage();}

很抱歉,我的问题很长,但我的问题出在注释的零件上,出现了错误,使我无法将玩家的手牌和撞牌添加到ArrayList<Capture> Capture列表中,但是由于该列表正在使用中,因此无法删除在另一个类中检测其他子类使用的其他功能.如何解决该错误并将arraylist捕获添加到新类型的数组列表中?
**已编辑,已添加Capture类,但尚未完成

Sorry for the long post but my problem lies on the parts commented, the errors appear making me unable to add the player hand cards and pool cards into the ArrayList<Capture> Capture list, but this list cannot be removed as it is being used in another class to detect other features used by other subclass. How do I solve the error and add the arraylist capture into a new type array list?
**Edited, Capture class has been added but not complete yet

推荐答案

将对象存储在公共列表中,即使它们具有相同的用法.如果它们具有通用用法,则将此功能划分为一个接口,并通过旨在以相同方式处理的类来实现此接口.使用此接口类型创建一个通用列表,然后在这些接口上执行方法调用:

Store object in a common list just if they have common usage. If they have common usage then partition this functionality into an interface and implement this interface by the classes intended to handle in the same manner. Create a generic list with this interface type and do method calls on the interfaces:

public interface ICommonUsage
{
  public void foo();
  public void bar();
}

public class Class1 implements ICommonUsage
{
  //...
  public void foo() {}
  public void bar() {}
  //...
}

public class Class2 implements ICommonUsage
{
  //...
  public void foo() {}
  public void bar() {}
  //...
}

public class Class3
{
  //...
  private List<ICommonUsage> commonUsedObjects;

  public void commonUsage()
  {
    for ( ICommonUsage item : commonUsedObjects )
    {
      item.foo();
      item.bar();
    }
  }
  //...
}

如果要将对象/接口添加到与其类不兼容的通用列表(它无法调用其上的方法),则编译器会记录一条错误消息.

If you want to add an object/interface to a generic list that is not conform with its class (it hasn't the ability to call the methods on it) the compiler log an error message.

这篇关于另一个数组列表到另一个不同类型的数组列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆