【问题标题】:How to compare an object to another object within a vector?如何将一个对象与向量中的另一个对象进行比较?
【发布时间】:2013-10-23 21:57:52
【问题描述】:

通过这个函数,我试图查看 myPlayerUp(一个玩家对象)是否等于玩家向量 myPlayers 中的任何玩家对象。这就是说“myPlayers(int) 的方法对于该类型是未定义的”,即使上面使用了向量。我要以错误的方式进行比较吗?这是整个班级

package model;

//import yahtzee.model.boolean;
import java.util.Vector;
//import yahtzee.model.int;
//import yahtzee.model.void;
import model.Player;

public class YahtzeeEngine {

  public static final int MAX_ROLLS= 0;

  private Vector<Player> myPlayers;

  private Roller myRoller;

  private Player myPlayerUp;

  private int myNumberRollsUsed;

  public Vector  myPlayer;

  public YahtzeeEngine(int numPlayers) {
      myPlayers = new Vector<Player>(numPlayers);

      myNumberRollsUsed = 0;
  }

  public void startGame() {
      int i;
      for(i = 0; i<=myPlayers.size(); i++){
          myPlayers.add(new Player());
      }
      this.selectPlayerUp(myPlayers.get(0));
      myNumberRollsUsed = 0;
      myRoller = new Roller();
      myPlayerUp = new Player();
  }

  public void selectPlayerUp(Player player) {
      myPlayerUp = player;
  }

  public void switchPlayerUp() {
 int x;
 int y;
 for(x = 0; x<=myPlayers.size(); x++){
 if(myPlayerUp == myPlayers(x) && x < myPlayers.size()-1){
 y = x;
 }
 if(myPlayerUp == myPlayers(x) && x == myPlayers.size()-1){
 y = 0;
 }
 }
 myPlayerUp = myPlayers(y);
  }

  public boolean incrementRollsUsed() {
      myNumberRollsUsed++;
  return false;
  }

  public void resetNumberRollsUsed() {
      myNumberRollsUsed = 0;
  }

  public Roller getRoller() {
  return myRoller;
  }

  public Player getPlayerUp() {
  return myPlayerUp;
  }

  public Vector<Player> getPlayers() {
  return myPlayers;
  }

  public int getNumberRollsUsed() {
  return myNumberRollsUsed;
  }

  public String toString() {
  return null;
  }

}

这是给我“myPlayers”向量错误的地方

 public void switchPlayerUp() {
 int x;
 int y;
 for(x = 0; x<=myPlayers.size(); x++){
 if(myPlayerUp == myPlayers(x) && x < myPlayers.size()-1){
 y = x;
 }
 if(myPlayerUp == myPlayers(x) && x == myPlayers.size()-1){
 y = 0;
 }
 }
 myPlayerUp = myPlayers(y);
  }

【问题讨论】:

    标签: java arrays function methods vector


    【解决方案1】:

    向量不是函数。你想要get()

    另外,请改用ArrayList

    【讨论】:

    • 我必须为此使用向量
    • 因为是教授给我们的代码生成的
    • Vector 具有线程安全性,而 ArrayList 没有。当然,ArrayList 在大多数情况下更可取,除了性能之外没有其他原因。如果需要线程安全,则不可取。从问题中不清楚YahtzeeEngine是否需要线程安全。
    • @user2909132:告诉你的教授他不应该使用Vector
    【解决方案2】:

    您需要Vector 类的indexOf 方法。类似的东西

    y = myPlayers.indexOf(myPlayerUp);
    

    【讨论】:

      【解决方案3】:

      补充一下 SLaks 所说的,在 Java 中,我们通过覆盖 equals() 方法来测试对象之间的相等性。

      == 不会给你想要的结果,只能用于比较基元是否相等。

      【讨论】:

      • 没有。这里不需要equals方法。使用中的所有Player对象都来自向量,所以使用==即可。
      【解决方案4】:

      您正试图访问像 myPlayers(x) 这样的向量中的元素,但这表示调用方法 myPlayers,它采用 int,但没有这样的方法。

      你想做的是:

      myPlayers.get(x);
      

      另外,如果您想比较两个球员的领域相同,而不是他们的参考,您可能需要使用equals 进行比较。 您需要覆盖equals

      【讨论】:

        【解决方案5】:

        您应该按照here 的描述在您的 Player 类上实现 equals(实际上,您应该始终在您的自定义类上实现 equalshashCode。您的 IDE 可能会自动完成)。然后你可以简单地调用

        numPlayers.contains(myPlayer);
        

        如果玩家在Vector 中,这将返回true。 Herecontains 的工作原理。

        如果您需要该职位,则使用indexOf,如here 所述:

        numPlayers.indexOf(myPlayer);
        

        如果结果是非负数,那么这就是玩家所在的位置。否则,播放器不存在。

        顺便说一句,使用Vector 仍然是一回事吗?

        【讨论】:

        • 没有。 OP 需要在Vector 中找到该东西的位置。所以需要indexOf,而不是contains
        • 啊,谢谢。进行了编辑。我想我看到Vector 真是一头雾水。这就像在纽约市看到一辆驿马车。
        • 是的,没有足够的人使用Vector。他们使用ArrayList,然后在将课程发布到多线程环境时花费数小时追查并发错误。但是Vector 并没有被弃用,它偶尔也有它的用途。
        猜你喜欢
        • 2023-03-12
        • 2018-08-04
        • 2015-05-23
        • 2013-11-15
        • 1970-01-01
        • 2019-09-30
        • 2018-01-12
        • 2020-03-24
        • 1970-01-01
        相关资源
        最近更新 更多