【问题标题】:how to use method on specific object from arraylist如何在arraylist中的特定对象上使用方法
【发布时间】:2017-03-25 04:34:48
【问题描述】:

EDIT2:对不起......我相信这是由于缺乏对问题的理解导致了这种误解。通读后,我认为他们想要的是 getWinningPoint() 的返回值是玩家中最大的数字,但仍然

我想了解如何访问 arraylist 中的特定对象,以便我可以在其上转换方法。总体而言,我能够制作适用于播放器数组列表(distributeCardsToPlayer)中所有项目的方法。但是我的getWinningPoints() 的第二种方法是一个 int,它总结了 arraylist 玩家中特定玩家拥有的所有牌。获胜点是一个个人结果,最终将用于printWinners() 方法。我只熟悉使用“Player player = players.get(0);”访问 obj,但在这种情况下,“玩家”本身将调用 getWinningPoints() 来检查自己的结果。

P.S - 我不知道如何正确表达,希望有人能指出正确的方向。

import java.util.*;
public class ModifiedBlackJack
{
protected ArrayList<Card> gameDeck;
protected ArrayList<Player> players;

public ModifiedBlackJack(ArrayList<Player> players)
{
    this.players=players;
}

public void distributeCardsToPlayers()
{
    Scanner console = new Scanner(System.in);
    for (Player player : players)
    {
        player.drawACard(getACardFromDeck());
        player.drawACard(getACardFromDeck());
        System.out.println(player.getName()+": " + player.toString()); 
        System.out.print("Draw another card? (y/n): ");
        char input = console.nextLine().toLowerCase().charAt(0);
        if(input == 'y')
        {
            player.drawACard(getACardFromDeck());
        }
    }

EDIT2:通读后,我认为他们想要的是 getWinningPoint() 的返回值是玩家中最大的数字,但仍然

public int getWinningPoints()
{
    int wp=0;;
    int point=0;
    for (Player player:players)
    {
        point = player.getCardsPoints();
        if (point>=21 && point>wp)
        {
            wp=point;
        }
    }
    return wp;
}

在Player类中,有一个汇总所有牌点的函数

public int getCardsPoints()
{
    int point=0;
    for (Card c: cards)
    {
        point=point+c.getPoints();
    }
    return point;
}

我是 Java 新手,非常感谢任何帮助或指导。 谢谢你

【问题讨论】:

  • 澄清一下:你的目标是在游戏结束时打印出所有玩家的分数,对吗?
  • 在 printWinners(int min) 中它将打印出总和点。但是要获得总和点是通过 getWinningPoint() 方法。但我不确定如何构建 getWinningPoint() 方法,因为我没有明确的对象来引用我的 Player 类中的方法

标签: java arraylist


【解决方案1】:

这个你可能想多了,getWinningPoints这个方法并不是完全需要的。

因为您已经Player 中声明了getCardsPoints,并且您已经在循环中使用了Player 的实例,所以您真正需要做的唯一一件事就是。 ..调用它。

System.out.println(player.getName() + "Chips: " + player.getChips() + "[]" + player.getCardsPoints());

您需要满足min 参数的任何条件都应在此循环内完成;即有条件地打印大于min的值。

【讨论】:

  • 不幸的是方法 getWinningPoints() 是要求的一部分......但是,是的,我完全同意你的看法。如果不需要 getWinningPoints() 方法,这就是我要做的工作。
  • 谢谢,看来我真的想多了。 getWinningPoint() 应该只给我一个 int 值,以便在我的循环中与 player.getCardsPoints() 进行比较。如果它们相等,我的 noOfWinner 将 ++。
【解决方案2】:

如果您想调用 Player 类方法,您需要有一个播放器对象来调用它“拥有”的方法。

将玩家对象传递给方法并在 getWinningPoints() 中接受玩家对象。

致电

getWinningPoints(player)

声明

public int getWinningPoints(Player localPlayer)
{
   return localPlayer.getCardsPoints();
}

【讨论】:

  • 根据需求,方法没有输入。所以我假设在主应用程序输出中会出现类似于“int result = player.getWinningPoints()”的内容,所以我试图弄清楚该方法是否有可能根据谁调用它来自我访问。
  • 您可以访问播放器数组列表。因此,您可以遍历 getWinningPoints() 中的玩家数组列表,因此您不必向它传递任何内容..
  • 播放器通过arraylist的循环将在其他地方完成。因此,当调用该方法时,它将是特定的玩家调用。但是该方法如何知道哪个玩家正在使用它?就像分发方法一样,有一个循环,所以所有玩家都会得到卡片。但是在winningPoint中,一次只有1名玩家​​会调用它。
猜你喜欢
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 2012-11-23
相关资源
最近更新 更多