Java 如何使用ArrayList的indexOf()方法

Java 如何使用ArrayList的indexOf()方法,java,arraylist,Java,Arraylist,这是家庭作业。我有一个工作程序,但它没有完全按照预期工作。目标是创建一个纸牌类,这是一个基本的纸牌类游戏。没有颜色,没有颜色,只有整数。整数1-15是卡的最大值。 piles=new ArrayList()//实例变量 通过Math.random()将ArrayList的构造函数初始化为随机数目的堆,这将启动游戏。 我的问题是比赛的结束。当我们有5个大小为1,2,3,4,5的桩时,游戏就结束了。 我通过比较数组来检查over()函数,但它只按1,2,3,4,5的确切顺序进行检查。 我的教授说 “

这是家庭作业。我有一个工作程序,但它没有完全按照预期工作。目标是创建一个纸牌类,这是一个基本的纸牌类游戏。没有颜色,没有颜色,只有整数。整数1-15是卡的最大值。 piles=new ArrayList()//实例变量 通过Math.random()将ArrayList的构造函数初始化为随机数目的堆,这将启动游戏。 我的问题是比赛的结束。当我们有5个大小为1,2,3,4,5的桩时,游戏就结束了。 我通过比较数组来检查over()函数,但它只按1,2,3,4,5的确切顺序进行检查。 我的教授说 “ArrayList Java库方法会使这个实验变得太简单。因此,对于桩,您可以使用 只有以下库方法:构造函数;添加();大小();设置();获取();移除(); indexOf();toString()

超过() 如果纸牌结束,则返回true,否则返回false。 当纸牌的大小为1、2、3、4和5时,纸牌就结束了。(可以是 显示您总是以这样的配置结束。) 提示:请使用indexOf()

我一直在尝试在这个应用程序中使用indexOf(),但我看不出该方法如何能够用于以任何顺序检查桩的大小。它只是获取列表中任何元素的索引,所以对我来说没有意义

以下是我无法更改的纸牌测试仪类源代码:

public class SolitaireTester
{
public static void main(String[] args)
{
    Solitaire s = new Solitaire();

    System.out.println("Start: " + s.toString());

    int rounds = 0;
    while (!s.over()) {
        s.round();
        ++rounds;
        System.out.println(rounds + ": " + s.toString());
    }
    System.out.println("Rounds: " + rounds);
}
}
这是我的纸牌类代码的一部分,over()方法

public boolean over()
{
int[]perfectPiles={1,2,3,4,5};
布尔结果=真;
对于(int i=0;i
我的问题是,如何使用indexOf()检查布尔意义上的perfectPiles,以便只要包含元素1,2,3,4,5,桩的大小顺序就无关紧要。同样,我们不能使用contains()方法。谢谢你,我将非常感谢你的帮助!如果需要的话,我可以发布更多的代码,只是不想让同行复制我所有的代码

我的问题是如何使用indexOf()检查 perfectPiles是布尔意义上的,因此 桩不重要,只要它包含元素1、2、3、4、5。 同样,我们不能使用contains()方法

首先,让我们看一下要使用的
indexOf()
方法的用途

  • -
返回中指定元素第一次出现的索引 此列表,如果此列表不包含元素,则为-1。更多 形式上,返回最低的索引i,使得(o==null?get(i)==null :o.equals(get(i))),或-1(如果没有此类索引)

考虑到这一点,您的“教授”希望您使用
indexOf()
,因为它在某种程度上与
contains()
方法非常相似,您已经声明您的此练习不允许使用它。通过使用
indexOf()
我们可以同意,如果它返回
-1
,则它不包含在列表中,如果它返回任何其他数字,则它包含在列表中

你提到的另一个要点是:

当纸牌的大小为1、2、3、4和5时,纸牌结束 任何命令。(可以看出,你总是以这样的方式结束 提示:使用indexOf()

考虑到所有这些,请更改当前的解决方案:

public boolean over(){
     int[] perfectPiles = {1,2,3,4,5};
     boolean result = true;

     for (int i = 0; i < piles.size(); i++){
          if(perfectPiles[i] != piles.get(i)){
              result = false;
              break;
          }
     }

     return result;
}
public boolean over(){
int[]perfectPiles={1,2,3,4,5};
布尔结果=真;
对于(int i=0;i
为此:

public boolean over(){
     int[] perfectPiles = {1,2,3,4,5};

     for (int i = 0; i < perfectPiles.length; i++){
          if(piles.indexOf(perfectPiles[i]) == -1) return false;
     }

     return true;
}
public boolean over(){
int[]perfectPiles={1,2,3,4,5};
对于(int i=0;i
桩是什么样子的呢?
你需要与看起来的大小进行比较,而不是第i项,并且你需要检查所有排列,除非你以前按大小对桩进行排序。@maraca我认为OP误用了“大小”一词,因为OPs教授暗示要使用indexOf()方法,当然这意味着您只需检查该项是否包含在列表中,而无需检查其他内容。如果您有任何其他问题,请随时通知我。
public boolean over(){
     int[] perfectPiles = {1,2,3,4,5};

     for (int i = 0; i < perfectPiles.length; i++){
          if(piles.indexOf(perfectPiles[i]) == -1) return false;
     }

     return true;
}