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()
。