有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为客户排序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++;    
        }
    }
}

共 (3) 个答案

  1. # 1 楼答案

    您有多个语法错误,例如:

    1. while (<expr>) { ... }这样的条件表达式需要计算为booleanwhile(i)不是有效的表达式,请参阅 The while and do-while Statementsdocs

    2. do { ... }不是有效的Java构造,很可能您试图使用do while循环do { ... } while (<expr>);循环

    3. 您正在使用rawtype ArrayList。很可能是List<Double>。您需要泛型来使用自动装箱来比较sales元素和double largest,请参见Lesson: Generics (Updated)文档

  2. # 2 楼答案

    没有类型的ArrayList将默认为ArrayList<Object>,这意味着sales.get(j)的返回值为Object。你可能想要ArrayList<Double>

  3. # 3 楼答案

    您没有指定列表为下面的声明保留的对象类型

    ArrayList sales = new ArrayList();
    ArrayList customers = new ArrayList();
    

    所以,当您从列表中检索对象并尝试应用运算符时,Java不知道它使用的是哪种类型。(Java假设java.lang.Object和运算符>Object上没有意义)

    对于长期解决方案,声明应该如下所示进行更改,或者您也可以在显式强制转换后尝试

    List<Double> sales = new ArrayList<>();
    List<String> customers = new ArrayList<>();
    

    其中Double是java.lang.Double