Java 将单独的ArrayList添加到主ArrayList中
我正在开发一个简单的POS程序。我有几个循环将零件信息添加到一个列表(invoiceList),然后是在另一个列表(invoiceListMain)下订购的所有零件,然后是在一个主列表(invoiceLogList)中订购的所有发票。所以本质上我有列表中的列表 当我在一个print语句中输出整个列表时,这就起作用了。但我需要能够打开列表 [738[113,5.0,43.45],[248,2.0,12.78],[459[248,10.0,63.9],[113,1.0,8.69]] 我得到这个错误 ArrayListDemo.java:136:错误:不兼容的类型:无法将字符串转换为的ArrayList(ArrayList行:invoiceLogList) 当我这样做时:Java 将单独的ArrayList添加到主ArrayList中,java,arrays,list,arraylist,Java,Arrays,List,Arraylist,我正在开发一个简单的POS程序。我有几个循环将零件信息添加到一个列表(invoiceList),然后是在另一个列表(invoiceListMain)下订购的所有零件,然后是在一个主列表(invoiceLogList)中订购的所有发票。所以本质上我有列表中的列表 当我在一个print语句中输出整个列表时,这就起作用了。但我需要能够打开列表 [738[113,5.0,43.45],[248,2.0,12.78],[459[248,10.0,63.9],[113,1.0,8.69]] 我得到这个错误
for(int i=0; i < invoiceLogList.size(); i++)
{
for(ArrayList<String> line : invoiceLogList)
{
System.out.print(" \n" + line.get(0));
}
}
我必须添加.toString()才能使其正常工作。所以我猜我不能将其解包为数组,因为它不再是数组了?是一张单子吗?我不是100%肯定
是否有人对更好的方法或如何在中解包数据提出了建议
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Random;
public class ArrayListDemo {
public static void main(String[]args){
//Part 1
ArrayList<String> part1 = new ArrayList<String>();
part1.add("06011");
part1.add("Castrol EDGE 0W20 Motor Oil - 1 qt");
part1.add("9.49");
//Part 2
ArrayList<String> part2 = new ArrayList<String>();
part2.add("248");
part2.add("Castrol EDGE 5W30 Motor Oil - 1 qt");
part2.add("6.39");
//Part 3
ArrayList<String> part3 = new ArrayList<String>();
part3.add("03050");
part3.add("Castrol Hypuron 10W30 Motor Oil - 1 gal");
part3.add("6.39");
//Part 4
ArrayList<String> part4 = new ArrayList<String>();
part4.add("113");
part4.add("Castrol Pyroplex Protection ES Multi-Purpose Grease - 14 oz");
part4.add("8.69");
//Part 5
ArrayList<String> part5 = new ArrayList<String>();
part5.add("020");
part5.add("Castrol GTZ ULTRACLEAN 5W20 Motor Oil - 6 gal");
part5.add("69.99");
//adding parts to main Part List
ArrayList<ArrayList<String>> mainPartList = new ArrayList<ArrayList<String>>();
mainPartList.add(part1);
mainPartList.add(part2);
mainPartList.add(part3);
mainPartList.add(part4);
mainPartList.add(part5);
//-----INVOICE INPUT----------------------------------------------------------------------------
//create a new scanner
Scanner input = new Scanner(System.in);
//Invoice Input
String a = "";
String invoiceNumber = "";
String p = "";
double q = 0.0;
double partPrice = 0.0;
double partSum = 0.0;
String partNum = "";
String partDescrip = "";
String c = "";
//Invoice Array
ArrayList<String> invoiceLogList = new ArrayList<>();//Stores all invoices created
do{//loop to create invoice
ArrayList<String> invoiceListMain = new ArrayList<>();//stores individual invoices
Random generator = new Random();//creates random invoice number
int sequence = generator.nextInt(1000);
invoiceListMain.add(String.format("%03d", sequence));//invoice number
System.out.print("Invoice #: " + sequence);
do{//loop to add parts to invoice
ArrayList<String> invoiceList = new ArrayList<String>();//stores part#, qty, sumTotal
System.out.print("\n\nPart Number: ");
p = input.next();
//fetch part info from array mainPartList
for(ArrayList<String> part : mainPartList)
{
if(part.contains(p))
{
for (int i = 0; i < 1; i++)
partNum = part.get(0);
partDescrip = part.get(1);
invoiceList.add(partNum);//add part# to list
System.out.print("\t" + partNum + " - " + partDescrip);
partPrice = Double.parseDouble(part.get(2));//grabs price of part in list
}
}
System.out.print("\nQuantity: ");
q = input.nextDouble(); //asks quantity sold
invoiceList.add(Double.toString(q));//add quantity to list
partSum = partPrice * q;
invoiceList.add(Double.toString(partSum));//add part sum to list
System.out.printf("\t $%.2f",partSum);
System.out.print("\n\n---Add to cart?: ");
c = input.next();
invoiceListMain.add(invoiceList.toString());//adding part order to mainList
}while(c.equalsIgnoreCase("Y"));
//Create Invoice Loop
System.out.print("\n\nCreate a new Invoice? ");
a = input.next();
invoiceLogList.add(invoiceListMain.toString());
}while(a.equalsIgnoreCase("Y"));
//Print all invoices
for(int i=0; i < invoiceLogList.size(); i++)
{
for(ArrayList<String> line : invoiceLogList)
{
System.out.print(" \n" + line.get(0));
}
}
}
}
import java.util.ArrayList;
导入java.util.Scanner;
导入java.util.Random;
公共类ArrayListDemo{
公共静态void main(字符串[]args){
//第一部分
ArrayList part1=新的ArrayList();
第1部分添加(“06011”);
第1部分:添加(“Castrol EDGE 0W20机油-1夸脱”);
第1部分添加(“9.49”);
//第二部分
ArrayList part2=新的ArrayList();
第2部分添加(“248”);
第2部分:添加(“卡斯特罗EDGE 5W30机油-1夸脱”);
第2部分添加(“6.39”);
//第三部分
ArrayList part3=新的ArrayList();
第3部分添加(“03050”);
第3部分:添加(“Castrol Hypuron 10W30机油-1加仑”);
第3部分添加(“6.39”);
//第四部分
ArrayList part4=新的ArrayList();
第4部分添加(“113”);
第4部分:添加(“Castrol Pyroplex Protection ES多用途润滑脂-14盎司”);
第4部分添加(“8.69”);
//第五部分
ArrayList part5=新的ArrayList();
第5部分添加(“020”);
第5部分:添加(“卡斯特罗GTZ超净5W20机油-6加仑”);
第5部分添加(“69.99”);
//将零件添加到主要零件列表
ArrayList mainPartList=新建ArrayList();
主部件列表。添加(部件1);
主部件列表。添加(部件2);
主部件列表。添加(部件3);
主部件列表。添加(部件4);
主部件列表。添加(部件5);
//-----发票输入----------------------------------------------------------------------------
//创建一个新的扫描仪
扫描仪输入=新扫描仪(System.in);
//发票输入
字符串a=“”;
字符串invoiceNumber=“”;
字符串p=“”;
双q=0.0;
双部件价格=0.0;
双部分和=0.0;
字符串partNum=“”;
字符串partDescrip=“”;
字符串c=“”;
//发票数组
ArrayList invoiceLogList=新建ArrayList();//存储创建的所有发票
执行{//循环以创建发票
ArrayList invoiceListMain=new ArrayList();//存储单个发票
Random generator=new Random();//创建随机发票号
int序列=发电机nextInt(1000);
invoiceListMain.add(String.format(“%03d”,sequence));//发票号
系统输出打印(“发票:”+顺序);
执行{//循环以将零件添加到发票
ArrayList invoiceList=new ArrayList();//存储零件#,数量,总计
系统输出打印(“\n\n部件号:”);
p=input.next();
//从阵列mainPartList获取部件信息
对于(ArrayList部件:mainPartList)
{
如果(第(p)部分)
{
对于(int i=0;i<1;i++)
partNum=part.get(0);
partdescripp=part.get(1);
invoiceList.add(partNum);//将part#添加到列表中
系统输出打印(“\t”+partNum+“-”+partDescrip);
partPrice=Double.parseDouble(part.get(2));//获取列表中零件的价格
}
}
系统输出打印(“\n查询:”);
q=input.nextDouble();//询问销售数量
invoiceList.add(Double.toString(q));//将数量添加到列表
partSum=partPrice*q;
invoiceList.add(Double.toString(partSum));//将partSum添加到列表中
System.out.printf(“\t$%.2f”,partSum);
System.out.print(“\n\n---添加到购物车?:”;
c=输入。下一步();
invoiceListMain.add(invoiceList.toString());//将零件订单添加到mainList
}而(c.equalsIgnoreCase);;
//创建发票循环
系统输出打印(“\n\n是否创建新发票?”);
a=输入。下一步();
add(invoiceListMain.toString());
}而(a.equalsIgnoreCase);;
//打印所有发票
对于(int i=0;i
这是因为您在两个循环头中访问相同的列表,我认为进行此更正应该可以解决此问题:
for(int i=0; i < invoiceLogList.size(); i++)
{
for(ArrayList<String> line : invoiceLogList.get(i))
{
System.out.print(" \n" + line.get(0));
}
}
for(int i=0;i
如果您查看打印输出,你可以看到738和459是一个水平太高 下面是一个按深度细分的示例:
包含两个元素的列表
第一个包含三个元素的列表:
*字符串738
*字符串列表[113,5.0,43.45]
*字符串列表[248,2.0,12.78] 这应该是一个列表(来自您的故事)。
这就是例外告诉你的。我尝试了这个例子,我得到的可能就是你想要的
ArrayList<ArrayList<ArrayList<String>>> invoiceLogList= new ArrayList<ArrayList<ArrayList<String>>> ();
ArrayList<ArrayList<String>> invoiceListMain= new ArrayList<ArrayList<String>>();
ArrayList<String> c = new ArrayList<String>();
c.add("13");
c.add("50");
c.add("43.45");
ArrayList<String> d = new ArrayList<String>();
d.add("728");
invoiceListMain.add(d);
invoiceListMain.add(c);
invoiceLogList.add(invoiceListMain);
for(int i=0; i < invoiceLogList.size(); i++)
{
for(ArrayList<ArrayList<String>> line :invoiceLogList)
{
System.out.print(" \n" + line.get(0));
}
}
什么是发票日志列表?什么
ArrayList<ArrayList<ArrayList<String>>> invoiceLogList= new ArrayList<ArrayList<ArrayList<String>>> ();
ArrayList<ArrayList<String>> invoiceListMain= new ArrayList<ArrayList<String>>();
ArrayList<String> c = new ArrayList<String>();
c.add("13");
c.add("50");
c.add("43.45");
ArrayList<String> d = new ArrayList<String>();
d.add("728");
invoiceListMain.add(d);
invoiceListMain.add(c);
invoiceLogList.add(invoiceListMain);
for(int i=0; i < invoiceLogList.size(); i++)
{
for(ArrayList<ArrayList<String>> line :invoiceLogList)
{
System.out.print(" \n" + line.get(0));
}
}
[728]
BUILD SUCCESSFUL (total time: 0 seconds)