Java 改进此嵌套循环,以便在Mastermind中更好地工作 ArrayList co=new ArrayList(); ArrayList gu=新的ArrayList(); System.out.println(code.size()); System.out.println(guess1.size()); 对于(intb=0;b

Java 改进此嵌套循环,以便在Mastermind中更好地工作 ArrayList co=new ArrayList(); ArrayList gu=新的ArrayList(); System.out.println(code.size()); System.out.println(guess1.size()); 对于(intb=0;b,java,arraylist,Java,Arraylist,我在这里试图做的是,检查I是否等于b在同一位置,并确保索引不存在于co和gu的数组列表中。然而,即使b的第一个索引添加在co和I中,该语句每次都是正确的>被添加到gu我不确定我是否理解了你的整个问题,但不管怎么说,我还是明白了: 您的问题是您使用了: ArrayList<Integer> co = new ArrayList<Integer>(); ArrayList<Integer> gu = new ArrayList<Integer>();

我在这里试图做的是,检查
I
是否等于
b
在同一位置,并确保索引不存在于
co
gu
的数组列表中。然而,即使
b
的第一个索引添加在
co
I
中,该语句每次都是正确的>被添加到
gu

我不确定我是否理解了你的整个问题,但不管怎么说,我还是明白了: 您的问题是您使用了:

ArrayList<Integer> co = new ArrayList<Integer>();
ArrayList<Integer> gu = new ArrayList<Integer>();
System.out.println(code.size());
System.out.println(guess1.size());
for(int b = 0; b < code.size(); b++) {     
 for (int i = 0; i < guess1.size(); i++){
    if(guess1.get(i).equals(code.get(b)) && (i == b) && ((Arrays.asList(co).contains((b))))&&(!(Arrays.asList(gu).contains(i)))){
        co.add(b);
        gu.add(i);
        hintboard.add(Hints.B);`enter code here`
        System.out.println(guess1);
        System.out.println(co);
        System.out.println(gu);
    }else if(guess1.get(i).equals(code.get(b)) && (!(Arrays.asList(co).contains((b))))&&(!(Arrays.asList(gu).contains(i)))){
        co.add(b);
        gu.add(i);
        hintboard.add(Hints.W);
        //System.out.println(hintboard);
首先,围绕b的括号是不必要的/无用的,所以你应该删除它们。 它不起作用的原因是Arrays.asList将创建一个包含所有传入元素的列表。预期用途如下:

Arrays.asList(co).contains((b))
[1, 2, 3]
将返回以下列表:

Arrays.asList(1, 2, 3);
您的代码将一个列表放入一个列表中,因此输出如下:

Arrays.asList(co).contains((b))
[1, 2, 3]
您的
Arrays.asList(co).contains((b))
代码将执行与此psudo代码类似的测试:

[[YOUR, LIST, ITEMS]]
这将始终返回false,因为主列表不包含
2
它只包含一个子列表
[1,2,3]
如果您这样做
Arrays.asList(co).get(0).contains((b))
as
.get(0)
将返回第一个子列表,但这只能纠正您创建的错误,因此在第一个位置写入行的正确方法是:

[[1, 2, 3]].contains(2)
我不能告诉你,在这次修复之后,你的代码是否作为一个整体工作,因为有很多方法可以扮演智囊团,我也不确定你的游戏规则。我也不完全理解你的代码的整个过程,只是概念。无论如何,这是你更正的代码(希望这有助于你理解):

ArrayList co=new ArrayList();
ArrayList gu=新的ArrayList();
System.out.println(code.size());
System.out.println(guess1.size());
对于(intb=0;b
除了不必要的括号外,你认为你在用
数组.asList(co).contains((b))
做什么?因为它总是返回
false
(因为
co
ArrayList
,所以
Arrays.asList(co)
是一个
列表
,它不应该包含
i
,一个
整数
)。那么你的问题到底是什么?有些东西不起作用了吗?如果有些东西坏了,我们需要知道它是什么。如果代码起作用了,那么它就不适合堆栈溢出(尽管可能适合我们的朋友)。