我正在一个程序中,在该程序中将值(字符串和整数)输入到数组中,然后将这些值放入对象中,该对象进入数组列表并按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;
}
}
问题出在这里...
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])));
}