Java 使用ListIterator打印数组列表
我试图使用ListIterator从ArrayList打印,我很确定我做得不对,因为它不工作,但我不知道如何修复它。因此,获取零件号的线路不工作,不确定原因;P.任何帮助都将受到感谢:)Java 使用ListIterator打印数组列表,java,iterator,Java,Iterator,我试图使用ListIterator从ArrayList打印,我很确定我做得不对,因为它不工作,但我不知道如何修复它。因此,获取零件号的线路不工作,不确定原因;P.任何帮助都将受到感谢:) 包装发票; 导入静态java.lang.System.out; 导入java.util.*; 公共类发票测试{ 公共静态无效打印(){ } 公共静态void main(字符串参数[]){ 扫描仪输入=新扫描仪(系统输入); ArrayList lInvoice=新的ArrayList(); int计数器=0;
包装发票;
导入静态java.lang.System.out;
导入java.util.*;
公共类发票测试{
公共静态无效打印(){
}
公共静态void main(字符串参数[]){
扫描仪输入=新扫描仪(系统输入);
ArrayList lInvoice=新的ArrayList();
int计数器=0;
内部零件计数器;
println(“欢迎使用invoice storer 1.0!”);
out.println(“要开始,请输入项目数:”);
partCounter=input.nextInt();
while(计数器
实际上,在while
循环中不打印任何内容,因为println()
回调超出了循环的范围。像这样修复它:
ListIterator<String> ltr = lInvoice.listIterator();
while(ltr.hasNext()) {
out.println(ltr.next());
}
ListIterator ltr=lInvoice.ListIterator();
while(ltr.hasNext()){
out.println(ltr.next());
}
您的程序中还有一些其他错误
首先,您应该向ArrayList
添加一个类型。由于您试图添加int
、double
和String
,我建议您创建一个ArrayList lInvoice=new arrarylist()代码>
然后使用迭代器循环:
ListIterator<Object> ltr = lInvoice.listIterator();
while(ltr.hasNext()){
out.println(ltr.next());
}
ListIterator ltr=lInvoice.ListIterator();
while(ltr.hasNext()){
out.println(ltr.next());
}
戴上我的通灵调试器帽子,我猜你是想打印一张商品发票。我对Invoice.java的内容做了一些假设,但我猜下面的代码是您真正想要的:
Scanner imput = new Scanner(System.in);
ArrayList<Invoice> lInvoice = new ArrayList<Invoice>();
int counter = 0;
int partCounter;
out.println("Welcome to invoice storer 1.0!");
out.println("To start please enter the number of items: ");
partCounter = imput.nextInt();
imput.nextLine();//skips the rest of the line (carriage return)
while (counter < partCounter) {
counter++;
out.println("Please enter the part number:");
Invoice invoice1 = new Invoice(); // Makes invoice 1 use the invoice
// class
String partNumber = imput.nextLine();// sets part number to the next
// imput
invoice1.setPartNumber(partNumber);// Sets it to the private
// variable in invoice.java
out.println("Please enter in a discription of the part: ");
String partDis = imput.nextLine();
invoice1.setPartDis(partDis);
out.println("Please enter the number of items purchased: ");
int quanity = imput.nextInt();
imput.nextLine();
invoice1.setQuanity(quanity);
out.println("Please enter the price of the item:");
double price = imput.nextDouble();
imput.nextLine();
invoice1.setPrice(price);
lInvoice.add(invoice1);
}
ListIterator<Invoice> ltr = lInvoice.listIterator();
while (ltr.hasNext()) {
Invoice next = (Invoice)ltr.next();
out.println(next.getPartNumber()+"\t"+next.getPartDis()+"\t"+next.getPrice()+"\t"+next.getQuanity());
}
扫描器输入=新扫描器(系统输入);
ArrayList lInvoice=新的ArrayList();
int计数器=0;
内部零件计数器;
println(“欢迎使用invoice storer 1.0!”);
out.println(“要开始,请输入项目数:”);
partCounter=input.nextInt();
输入下一行()//跳过该行的其余部分(回车)
while(计数器
有趣的变化:
- 我使用的是
发票列表
而不是字符串列表,然后打印出每个字符串
Scanner.nextInt()
将从其输入中退出回车,因此您必须调用nextLine()
将其清除,否则您将错过真正需要的输入
这不是我的问题,但我必须问-如果将ListIterator参数化以接受字符串,而它所遍历的ArrayList中的某些内容是int,那么ListIterator如何工作。它们是自动解析的吗?因为没有参数化的ArrayList()
,所以实际上它们都是对象。当您打印它们时,会调用toString()
方法。@kocko如果您尝试运行代码,在使用iterator
循环时,您将得到ClassCastException
,因为迭代器期望对象作为字符串(作为其参数化对象)。由于原始列表中的列表列表迭代器
也必须是原始列表,才能转换为work@ZouZou:这就是我最初的想法。真的应该运行代码来检查自己!谢谢。发票零件号有什么错误;它看起来可以工作,假设发票有一个公共无效setPartNumber(字符串partNumber)
您应该删除
在while(ltr.hasNext())
之后,它只是一个空语句,它会占用while循环。这是不是
Scanner imput = new Scanner(System.in);
ArrayList<Invoice> lInvoice = new ArrayList<Invoice>();
int counter = 0;
int partCounter;
out.println("Welcome to invoice storer 1.0!");
out.println("To start please enter the number of items: ");
partCounter = imput.nextInt();
imput.nextLine();//skips the rest of the line (carriage return)
while (counter < partCounter) {
counter++;
out.println("Please enter the part number:");
Invoice invoice1 = new Invoice(); // Makes invoice 1 use the invoice
// class
String partNumber = imput.nextLine();// sets part number to the next
// imput
invoice1.setPartNumber(partNumber);// Sets it to the private
// variable in invoice.java
out.println("Please enter in a discription of the part: ");
String partDis = imput.nextLine();
invoice1.setPartDis(partDis);
out.println("Please enter the number of items purchased: ");
int quanity = imput.nextInt();
imput.nextLine();
invoice1.setQuanity(quanity);
out.println("Please enter the price of the item:");
double price = imput.nextDouble();
imput.nextLine();
invoice1.setPrice(price);
lInvoice.add(invoice1);
}
ListIterator<Invoice> ltr = lInvoice.listIterator();
while (ltr.hasNext()) {
Invoice next = (Invoice)ltr.next();
out.println(next.getPartNumber()+"\t"+next.getPartDis()+"\t"+next.getPrice()+"\t"+next.getQuanity());
}