这是作业。我有一个工作程序,但它没有完全按预期工作。目标是创建一个像游戏一样的基本单人纸牌的纸牌课程。没有颜色不适合整数。整数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()方法。谢谢,我将不胜感激任何帮助!如果需要,我可以发布更多代码,只是不希望对等方复制我的所有代码。
答案 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;
}