如何将ArrayList的indexOf()方法用于

时间:2017-04-06 18:28:00

标签: java arraylist

这是作业。我有一个工作程序,但它没有完全按预期工作。目标是创建一个像游戏一样的基本单人纸牌的纸牌课程。没有颜色不适合整数。整数1-15是最大卡。 piles = new ArrayList()//实例变量 通过Math.random()将ArrayList的构造函数初始化为随机数量的堆,这将启动游戏。 我的问题是游戏结束。当我们有5个堆,其中包含1,2,3,4,5 的任意顺序时,游戏就结束了。 我通过比较数组来检查我的over()函数,但只检查1,2,3,4,5的确切顺序。 我的教授说如下 “ArrayList Java库方法可以使这个实验室变得非常简单。所以使用桩可以使用 只有这些库方法:构造函数;加();尺寸();组();得到();去掉(); 指数();的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};
boolean result = true;



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

   {
        result = false;
        break;
    }
}
return result;
}

我的问题是我如何使用indexOf()来检查一个布尔意义上的perfectPiles,这样只要它包含元素1,2,3,4,桩的大小顺序无关紧要5。我们再次不能使用contains()方法。谢谢,我将不胜感激任何帮助!如果需要,我可以发布更多代码,只是不希望对等方复制我的所有代码。

1 个答案:

答案 0 :(得分:0)

  

我的问题是如何使用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};

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

     return true;
}