为客户排序Java阵列
我目前正试图解决ArrayList
的一个问题
这将获取用户和客户销售的输入,并显示顶级客户。然而,我有一个内在的while
问题
使用VSCODE。内部while在内部ifsales.get(j) > largest
内抛出一个错误,说明>;没有定义
请,任何帮助都将不胜感激
import java.util.ArrayList;
import java.util.Scanner;
public class TopCusomters {
public static void main(String[] args)
{
ArrayList sales = new ArrayList();
ArrayList customers = new ArrayList();
int numOfItems = 0;
double price = 0;
Scanner in = new Scanner(System.in);
boolean entryComplete = false;
do {
System.println("Customers Names");
customers.add(in.next());
System.println("Sales of the Customer (0 to end):");
price = in.nextDouble();
sales.add(price);
numOfItems++;
}while(price != 0 && mumOfItems < 100);
System.out.println("Please provide values of N");
int topN = in.nextInt();
ArrayList topCustomers = nameOfBestCustomers(sales, customers, topN);
System.out.println(" Top Customers list" + "is" + topCustomers.toString());
}
public static ArrayList nameOfBestCustomers (ArrayList sales,ArrayList customers, int topN)
{
ArrayList bestCustomers = new ArrayList();
sortCustomers(sales,customers);
int i = 0;
while (i)
{
bestCustomers.add(customers.get(i));
i++;
}
return bestCustomers;
}
public static void sortCustomers(ArrayList sales, ArrayList customers)
{
int i = 0;
double temp = 0;
String tempName = "";
while (i)
{
double largest = sales.get(i);
int largestIndex = i;
int j = i;
while (j)
{
if(sales.get(j) > largest)
{
largest = sales.get(j);
largestIndex = j;
}
i++;
}
temp = sales.get(i);
sales.set(i,sales.get(largestIndex));
sales.set(largestIndex,temp);
tempName = customers.get(i);
customers.set(i,customers.get(largestIndex));
customers.set(largestIndex, tempName);
i++;
}
}
}
# 1 楼答案
您有多个语法错误,例如:
像
while (<expr>) { ... }
这样的条件表达式需要计算为boolean
while(i)
不是有效的表达式,请参阅 The while and do-while Statementsdocsdo { ... }
不是有效的Java构造,很可能您试图使用do while循环do { ... } while (<expr>);
循环您正在使用rawtype
ArrayList
。很可能是List<Double>
。您需要泛型来使用自动装箱来比较sales
元素和double largest
,请参见Lesson: Generics (Updated)文档# 2 楼答案
没有类型的
ArrayList
将默认为ArrayList<Object>
,这意味着sales.get(j)
的返回值为Object
。你可能想要ArrayList<Double>
# 3 楼答案
您没有指定列表为下面的声明保留的对象类型
所以,当您从列表中检索对象并尝试应用运算符时,Java不知道它使用的是哪种类型。(Java假设
java.lang.Object
和运算符>
在Object
上没有意义)对于长期解决方案,声明应该如下所示进行更改,或者您也可以在显式强制转换后尝试
其中Double是
java.lang.Double