Java:无法使两个ArrayList不为;“已连接”;

Java:无法使两个ArrayList不为;“已连接”;,java,arraylist,Java,Arraylist,因此,当我遇到一个问题时,我正在为UIL进行练习:出于某种奇怪的原因,我的ArrayList彼此共享相同的值。它们都声明为字符,尽管声明为不同的对象,但我想不出一种方法来分隔它们 我想做的是其中一个将是一个基,而另一个在整个嵌套循环中都会更改,但是,它们都会更改,即使我在设置基循环后没有更改基循环,我也不知道为什么。我在解释main方法是静态的,所以它们指向同一个位置时找到了我的答案,但是在创建了一个新类,然后在main方法中创建了一个对象来完成它之后,它仍然不起作用 有人能向我解释一下他们为什

因此,当我遇到一个问题时,我正在为UIL进行练习:出于某种奇怪的原因,我的ArrayList彼此共享相同的值。它们都声明为字符,尽管声明为不同的对象,但我想不出一种方法来分隔它们

我想做的是其中一个将是一个基,而另一个在整个嵌套循环中都会更改,但是,它们都会更改,即使我在设置基循环后没有更改基循环,我也不知道为什么。我在解释main方法是静态的,所以它们指向同一个位置时找到了我的答案,但是在创建了一个新类,然后在main方法中创建了一个对象来完成它之后,它仍然不起作用

有人能向我解释一下他们为什么有联系吗

import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;

public class Boggle 
{
    public static void main (String args[]) throws Throwable
    {
        Boggle test = new Boggle();
        test.theBoggle();
    }

    public void theBoggle() throws Throwable
    {
        Scanner scan = new Scanner(new File("boggle.dat"));
        int games = scan.nextInt();
        int amtofwords = 0;
        int puzzle = 1;
        boolean possible = true;
        boolean possibleletter = false;
        String tempword = "";
        int pointcounter = 0;
        ArrayList<Character> scrambled = new ArrayList<Character>(); 
        ArrayList<Character> testscramble = new ArrayList<Character>();
        ArrayList<String> words = new ArrayList<String>();
        scan.nextLine();
        for (int i = 0; i < games; i++)
        {
            for (int w = 0; w < 4; w++)
            {
                tempword = scan.nextLine();
                scrambled.add(tempword.charAt(0));
                scrambled.add(tempword.charAt(1));
                scrambled.add(tempword.charAt(2));
                scrambled.add(tempword.charAt(3));
            }
            amtofwords = scan.nextInt();
            scan.nextLine();
            for (int k = 0; k < amtofwords; k++)
            {
                words.add(scan.nextLine());
            }
            for (String string : words) //grabs the words
            {
                possible = true;
                testscramble = scrambled; //````````````IMPORTANT WHY ARE THEY BOTH CONNECTED?``````````
                System.out.println(scrambled);
                for (int k = 0; k < string.length(); k++) //grabs the scrambled letters to compare to string
                {
                    for (int j = 0; j < testscramble.size(); j++) //grabs individual letters to compare to word
                    {
                        if (string.charAt(k) == testscramble.get(j))
                        {
                            possibleletter = true;
                            testscramble.remove(j);

                            break;
                        }
                    }
                    if (possibleletter == false)
                    {
                        possible = false;
                        break;
                    }
                    possibleletter = false;

                }
                if (possible == true)
                {
                    if (string.length() <= 2)
                        pointcounter += 0;
                    if (string.length() == 3 || string.length() == 4)
                        pointcounter += 1;
                    if (string.length() == 5)
                        pointcounter += 2;
                    if (string.length() == 6)
                        pointcounter += 3;
                    if (string.length() == 7)
                        pointcounter += 5;
                    if (string.length() >= 8)
                        pointcounter += 11;
                }
            }
            System.out.println("PUZZLE #" + puzzle + " " + pointcounter);
            puzzle++;

        }
        scan.close();
    }
}
导入java.io.File;
导入java.util.ArrayList;
导入java.util.Scanner;
公共类问题
{
公共静态void main(字符串args[])抛出可丢弃的
{
转向架试验=新转向架();
test.theBoggle();
}
公共空间的虚无
{
扫描仪扫描=新扫描仪(新文件(“boggle.dat”);
int games=scan.nextInt();
int-amtofwords=0;
智力智力测验=1;
布尔可能=真;
布尔值possibleletter=false;
字符串tempword=“”;
int pointcounter=0;
ArrayList扰码=新的ArrayList();
ArrayList testscramble=新的ArrayList();
ArrayList words=新的ArrayList();
scan.nextLine();
for(int i=0;i
如注释中所述,您使用引用将一个列表变量转换为对另一个列表变量的引用

testscramble = scramble;
当您应该复制列表时

testscramble = new ArrayList<>(scrambled);
testscramble=newarraylist(加扰);

我正在打印出scrambled,这正是testscramble的值,尽管我从未更改scrambledWell…你刚才说过
testscramble
指向与
scrambled
相同的实体…你是在问为什么
testscramble=scrambled
的工作方式是这样的吗,或者你期待着与之不同的行为?你认为
testscramble=scramble
有什么作用?现在您有两个对同一列表的引用。所以很明显,如果你用一个引用将一个对象添加到列表中,其他引用将指向同一个修改过的列表。该死的,我完全忘记了这就是它的作用!是什么让他们不那样联系,而是拥有相同的价值观?现在还早,所以我还是醒着哈哈