我正在开发一个简单的 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: 错误:类型不兼容:String 无法转换为 ArrayList for(ArrayList line : invoiceLogList)
当我这样做时:
for(int i=0; i < invoiceLogList.size(); i++)
{
for(ArrayList<String> line : invoiceLogList)
{
System.out.print(" \n" + line.get(0));
}
}
在负面评价之前,请留下原因。
通过研究,我认为这与我如何在列表中的列表中编译我的所有列表有关。
invoiceLogList.add(invoiceListMain.toString());
我必须添加 .toString() 才能使其正常工作。所以我的猜测是我不能将它解压缩为一个数组,因为它不再是一个数组?是 list 吗?我不是 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));
}
}
}
}
最佳答案
我尝试了那个例子,我得到的可能就是你想要的!
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)
关于java - 将单独的 ArrayList 添加到主 ArrayList 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50087537/