Java 将单独的ArrayList添加到主ArrayList中

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]] 我得到这个错误

我正在开发一个简单的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)

当我这样做时:

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)