Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从一个ArrayList传输到另一个ArrayList_Java_Arraylist_Add_Transfer - Fatal编程技术网

Java 从一个ArrayList传输到另一个ArrayList

Java 从一个ArrayList传输到另一个ArrayList,java,arraylist,add,transfer,Java,Arraylist,Add,Transfer,我正在尝试使用add方法将ArrayList钱包的内容传输到ArrayList钱包2 然而,当我尝试只做purse2.add(钱包)时,我得到了一段错误 然而,我发现如果我使用purse2.add(input)它应该可以工作,但是当我在transfer方法中这样做时,它只是将“done”添加到数组中,而不是任何其他输入的单词。如果我将此行与钱包的初始输入对齐,那么它工作得非常完美,除非我无法将该行与输出对齐,以使其具有任何意义 任何帮助都将不胜感激 package purse; import j

我正在尝试使用
add
方法将
ArrayList钱包的内容传输到
ArrayList钱包2

然而,当我尝试只做
purse2.add(钱包)
时,我得到了一段错误

然而,我发现如果我使用
purse2.add(input)
它应该可以工作,但是当我在
transfer
方法中这样做时,它只是将
“done”
添加到数组中,而不是任何其他输入的单词。如果我将此行与
钱包
的初始输入对齐,那么它工作得非常完美,除非我无法将该行与输出对齐,以使其具有任何意义

任何帮助都将不胜感激

package purse;
import java.util.Scanner;
import java.util.Collections;
import java.util.ArrayList;

public class Purse {
    ArrayList<String> purse = new ArrayList<>(); 
    ArrayList<String> purse2 = new ArrayList<>();
    Scanner coin = new Scanner (System.in); 
    Scanner coin2 = new Scanner (System.in);
    String input = " ";
    String input2 = " ";
    String end = "done";

    public void addCoin(){
        System.out.println("Please put as many coins of U.S currency as you like into Jodie's purse, type 'done' when finished: ");

        while (!input.equalsIgnoreCase ("done"))
        {
            input = ( coin.nextLine());
            if (input.equalsIgnoreCase("penny") || input.equalsIgnoreCase("nickel") || input.equalsIgnoreCase("dime") || input.equalsIgnoreCase("quarter") || input.equalsIgnoreCase("done")) {
                purse.add(input);
                purse2.add(input);
                purse.remove("done");
            } else {
                System.out.println("Please input a coin of U.S currency.");
            }
        }
        System.out.println("Contents of purse: " + purse);
        Collections.reverse(purse);
        System.out.println("This is the contents of the purse reversed: " + purse );

        //Start of Johnny's Purse
        System.out.println("Please put as many coins of U.S currency as you like into Johnny's purse, type 'done' when finished: ");
        while (!input2.equalsIgnoreCase ("done")) {
            input2 = (coin.nextLine());
            if (input2.equalsIgnoreCase("penny") || input2.equalsIgnoreCase("nickel") || input2.equalsIgnoreCase("dime") || input2.equalsIgnoreCase("quarter") || input2.equalsIgnoreCase("done")) {
                purse2.add(input2); 
                purse2.remove("done");
            } else {
                System.out.println("Please input a coin of U.S currency.");
            }
        }
        System.out.println("Contents of purse: " + purse2);
    }

    public ArrayList<String> printPurseContents() {
        return purse;  
    }

    public void transfer() {
        purse.clear();

        System.out.println("Jodie is feeling bad for Johnny so Jodie is going to give him all of her money!");
        System.out.println("Johnny's purse  now has: " + purse2 );
        System.out.println("and now Jodie's pure is empty: " +purse);
    }
}
包钱包;
导入java.util.Scanner;
导入java.util.Collections;
导入java.util.ArrayList;
公款钱包{
ArrayList钱包=新的ArrayList();
ArrayList purse2=新的ArrayList();
扫描器硬币=新扫描器(系统英寸);
扫描器coin2=新扫描器(System.in);
字符串输入=”;
字符串输入2=“”;
字符串end=“完成”;
公共硬币{
println(“请把尽可能多的美国货币硬币放入朱迪的钱包,完成后键入‘完成’”);
而(!input.equalsIgnoreCase(“完成”))
{
输入=(coin.nextLine());
如果(input.equalsIgnoreCase(“便士”)| input.equalsIgnoreCase(“镍”)| input.equalsIgnoreCase(“硬币”)| input.equalsIgnoreCase(“四分之一”)| input.equalsIgnoreCase(“完成”){
钱包。添加(输入);
purse2.添加(输入);
钱包。移除(“完成”);
}否则{
System.out.println(“请输入一枚美元硬币”);
}
}
System.out.println(“钱包内容:“+钱包”);
收藏。反面(钱包);
System.out.println(“这是钱包的内容:“+钱包”);
//约翰尼钱包的开始
println(“请在约翰尼的钱包里放尽可能多的美元硬币,完成后键入‘完成’”);
而(!input2.equalsIgnoreCase(“完成”)){
input2=(coin.nextLine());
如果(输入2.equalsIgnoreCase(“便士”)| |输入2.equalsIgnoreCase(“镍”)| |输入2.equalsIgnoreCase(“硬币”)| |输入2.equalsIgnoreCase(“四分之一”)|输入2.equalsIgnoreCase(“完成”){
purse2.add(输入2);
purse2.移除(“完成”);
}否则{
System.out.println(“请输入一枚美元硬币”);
}
}
System.out.println(“钱包内容:+purse2”);
}
公共ArrayList printPurseContents(){
归还钱包;
}
公开转让{
钱包。清除();
“乔迪为约翰尼感到难过,所以乔迪打算把她所有的钱都给他!”;
System.out.println(“约翰尼的钱包现在有:“+purse2”);
System.out.println(“现在Jodie的pure是空的:“+钱包”);
}
}

要将列表的内容添加到另一个列表
l1
中,您应该使用
l2.addAll(l1)
。使用
l2.add(l1)
是错误的,因为
add()
只接受与
列表
相同类型的一个元素,在本例中是字符串。但是您正试图将
字符串的
列表
传递给
add()
方法,因此编译器会抛出一个错误。

我看不出您试图在哪里进行传输,但我假设它将进入
transfer()
方法。您需要做的是遍历
钱包
,将每个元素添加到
钱包2
,然后清除
钱包
。(您不能在运行过程中从
钱包中删除元素,因为您将在迭代器中遇到
ConcurrentModificationException

有两种方法: 1) 使用循环(for/foreach)
2) 使用addAll()方法(最佳方法)

不确定这是否是有意的,但当您阅读输入时,添加到Jodie的
钱包中的每一枚硬币都会立即添加到Johnny的
钱包中2

purse.add(input);
purse2.add(input); // I think this line should be removed
无论如何,当我删除上述行时,我所要做的就是相应地修改
transfer
方法的开头:

public void transfer() {
    purse2.addAll(purse);
    purse.clear();
    // the rest of the method follows unchanged
我用以下代码测试了这些更改-对我来说,结果似乎是正确的:

Purse p = new Purse();
p.addCoin();
p.transfer();

添加您得到的执行错误。这是对问题剩余部分的回答。因为while循环只有在您为输入提供“done”之后才会中断,所以在这个时候,当您在while循环之后将输入插入列表时,显然会发生这种情况。正如评论员所说,您可以为单个条目调用
add()
,这样您就可以将输入添加到列表中,但要添加另一个列表,您需要调用
addAll()