Java 使用ListIterator打印数组列表

Java 使用ListIterator打印数组列表,java,iterator,Java,Iterator,我试图使用ListIterator从ArrayList打印,我很确定我做得不对,因为它不工作,但我不知道如何修复它。因此,获取零件号的线路不工作,不确定原因;P.任何帮助都将受到感谢:) 包装发票; 导入静态java.lang.System.out; 导入java.util.*; 公共类发票测试{ 公共静态无效打印(){ } 公共静态void main(字符串参数[]){ 扫描仪输入=新扫描仪(系统输入); ArrayList lInvoice=新的ArrayList(); int计数器=0;

我试图使用ListIterator从ArrayList打印,我很确定我做得不对,因为它不工作,但我不知道如何修复它。因此,获取零件号的线路不工作,不确定原因;P.任何帮助都将受到感谢:)

包装发票;
导入静态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());
    }