实现方法public static String nameOfBestCustomer(ArrayList <double> sales,ArrayList <string <customers)=“”

时间:2015-05-05 03:47:25

标签: java arraylist

=“”

这是唯一的部分我所做的问题只是从用户读取值列表然后打印所有并指向最大输入。我很困惑如何将特定客户的arraylist与他们的特定名称组合在一起。 实际问题:此方法应返回销售量最大的客户名称。

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    ArrayList<Double> values = new ArrayList<Double>();

    System.out.println("Enter the customers purchase amount, Q to quit");
    Scanner in = new Scanner(System.in);
    while(in.hasNextDouble()){
        values.add(in.nextDouble());
    }

    double largest = values.get(0);
    for (int i =1; i< values.size(); i++){
        if (values.get(i) > largest){
            largest = values.get(i);
        }

    }
    for (double element : values){
        System.out.print(element);
        if (element == largest){
            System.out.println("   <===largest value");


        }
        System.out.println();
    }
}

3 个答案:

答案 0 :(得分:0)

1:我们不知道如何在程序中设置客户名称;无论是用户输入还是以某种方式以其他方式创建。

2:如果客户可以持有多个输入,解决此问题的最简单方法是创建客户类并使其包含字符串名称和输入列表

class Customer{
String name;
List<Integer> inputs=new ArrayList<Integer>();
Integer max;
public Customer(String name){
 this.name=name
 }
 public void sort(){
  ///sort code here
  //set variable max to the max value in the inputs array
 }
}

然后您可以在主类中创建Customer,例如:

List<Customer> list=new ArrayList<Customer>();
Customer customer1=new Customer("Brian");
Customer customer2=new Customer("Asura")

and then add order amount to any customer depending how you want.
customer1.inputs.add(999)
customer2.inputs.add(23123);
那么你需要比较所有客户;调用每个客户的排序方法

for(Customer aCustomer:list)
  aCustomer.sort();

您现在为每个客户对象设置了最大变量;现在比较它们;最简单的方法是使用可比较的,但对初学者来说可能太先进了,所以这是另一种方式。

Customer result; //will hold the object with highest input
int maximum=0;
for(Customer aCustomer:list)
    if(aCustomer.max>maximum){
       result=aCustomer;
       maximum=aCustomer.max
}

我们现在拥有包含最大值

的客户对象
System.out.println(result.name+" maximum:"+result.max);

答案 1 :(得分:0)

如果我正确理解了您的问题,您希望将某个用户名与双打列表相关联。这可以使用Map<String, List<Double>>完成。所以你可以声明它:

Map<String, List<Double>> user2values = new HashMap<>();

使用以下方法添加值:

void addValue(String user, double value) {
    List<Double> values = user2values.get(user);
    if(values == null) {
        values = new ArrayList<>();
        user2values.put(user, values);
    }
    values.add(value);
}

如果您使用的是Java 8,则更短:

void addValue(String user, double value) {
    user2values.computeIfAbsent(user, k -> new ArrayList<>()).add(value);
}

之后,您将按用户分组值。如果要扫描它以获得最大值,可以执行以下操作:

String getMaxValueUser() {
    String bestUser = null;
    double maxValue = Double.NEGATIVE_INFINITY;
    for(Map.Entry<String, List<Double>> entry : user2values.entrySet()) {
        for(Double value : entry.getValue()) {
            if(value > maxValue) {
                value = maxValue;
                bestUser = entry.getKey();
            }
        }
    }
    return bestUser;
}

如果您使用的是Java 8,则更短:

String getMaxValueUser() {
    return user2values.entrySet().stream()
            .max(Comparator.comparingDouble(entry -> entry.getValue()
                    .stream().mapToDouble(x -> x).max()
                    .orElse(Double.NEGATIVE_INFINITY))).map(Entry::getKey)
            .orElse(null);
}

答案 2 :(得分:0)

试试这个:

public static String nameOfBestCustomer(ArrayList sales,ArrayList customers){

Double largestSale = 0.0;
int largestIndex = 0;

for(Double s: sales) {
    largestSale = Math.max(largestSale, s);
}

largestIndex = sales.indexOf(largestSale);

return customers.get(largestIndex);

}