[使用比较器对ArrayList排序时未打印出值

问题描述 投票:0回答:1

我正在一个程序中,在该程序中将值(字符串和整数)输入到数组中,然后将这些值放入对象中,该对象进入数组列表并按int值排序。但是,当我运行该程序时,它会打印出:排序列表条目:产品名称:空---数量:0产品名称:空---数量:0项目名称:null --- Quant:0 //等我想在这里独自学习,但不确定该怎么做。

我的主班:

import java.io.*;
import java.util.*;

public class InputItem
{
  public static void main(String args[])
  {
    String again;
    String names[] = new String[100];
    int quant[] = new int[100];
    int row=0;
    do{
    System.out.println("Please input assignment name:");
    Scanner newName = new Scanner(System.in);
    String name = newNamet.next();
    names[row] =name;

    System.out.println("Please input assignment quant:");
    Scanner quantI = new Scanner(System.in);
    int quantity = quantI.nextInt();
    quant[row] = quantity;

    System.out.println("Would you like to add another item? Enter 'Yes' or 'No'"); 
    Scanner input = new Scanner(System.in);
    again = input.next();
    row++;
    }
    while(again.equalsIgnoreCase("Yes"));
    List<Items> work = new ArrayList<Items>();
    for(int count = 0; count<row; count++)
    {
      work.add(new Items((names[row]),(quant[row])));
    }
    Collections.sort(work, new MyComp());
    System.out.println("Sorted List Entries: ");
    for(Items e:work)
    {
      System.out.println(e);
    } 
  }
}

带有比较器的类:

import java.util.*;
class MyComp implements Comparator<Items>
{
  @Override
  public int compare(Items e1, Items e2)
  {
    if((e1).getQuant()< (e2).getQuant())
    {
      return 1;
    }
    else
    {
      return -1;
    }

  }
}
public class Items
{
  private String name;
  private int quant;
  public Items(String n, int q)
  {
    this.name = n;
    this.quant = q;
  }
  public String getName()
  {
    return name;
  }
  public void setName(String name)
  {
    this.name = name;
  }
  public int getQuant()
  {
    return quant;
  }
  public void setQuant(int quant)
  {
    this.quant = quant;
  }
  public String toString()
  {
    return "Item Name:" + this.name+"---Quant:" +this.quant;
  }
  }
java arraylist comparator
1个回答
1
投票

问题出在这里...

for (int count = 0; count < row; count++) {
    work.add(new Items((names[row]), (quant[row])));
}

您正在使用row,它在代码的上一部分中定义,用于跟踪要更新的元素,但是现在指向数组中的下一个元素(或空元素)。这基本上意味着您正在不断向Items

中添加相同(空)值

相反,您应该使用count

for (int count = 0; count < row; count++) {
    work.add(new Items((names[count]), (quant[count])));
}
© www.soinside.com 2019 - 2024. All rights reserved.