0

我创建了两个数组。一个存储名称,一个存储销售。我试图将每个索引链接在一起,以便名称数组中的索引 1 将显示销售数组的索引 1 的值。我试图让它整理销售数组并返回最大销售额和带来这些销售额的人。所有值都由用户输入,包括数组的大小。

import java.util.Scanner;
import java.util.Arrays;


public class EmpArray {
    public static int employee(){

    Scanner input = new Scanner(System.in);

    int numemp;
    System.out.println("Enter how many employees to be compared: \n");
    numemp = input.nextInt();    

    String name[] = new String[numemp];
    int annsales[] = new int[numemp];
    int maxannsales;

    for (int i = 0; i < name.length; i++) {
         System.out.println("Enter your name: \n");
         String employeename = input.next();
         name[i] = employeename;
         System.out.println("\n");
    }
    for (int j = 0; j < annsales.length; j++) {
         System.out.println("Enter in your annual sales: \n");
         int employeesales = input.nextInt();
         annsales[j] = employeesales;
         System.out.println("\n");
    }       

        System.out.println("Employee Name: " + Arrays.toString(name));
        System.out.println("Total Sales: " + Arrays.toString(annsales));

        Arrays.sort(annsales);

        //look at page 456 of starting out with java and page 460 of the same book, p.464
        System.out.println("Top Salary is : $"+annsales[annsales.length-1]);
        maxannsales = annsales[annsales.length-1];    

        return maxannsales;
     }  
}

我做错了什么我已经在这两个星期了。

4

2 回答 2

1

您应该创建一个类来存储日期,而不是使用两个单独的数组。

public class Employee {

    private int sales;
    private String name;

    public Employee(String name, int sales){
        this.name = name;
        this.sales = sales;
    }
    public String getName(){
        return this.name;
    }
    public int getSales(){
        return this.sales;
    }
}

现在,当您从 Scanner 读取数据并将它们传递给 Employee 构造函数时,将 name 和 sales 存储为局部变量。然后,您可以创建一个Employee array[]orArrayList<Employee>并对这个数组/数组列表进行排序Employee.getSales()

像这样:

import java.util.Scanner;
import java.util.Arrays;

public class EmpArray {

        public static void main(String[] args){
            employee();
        }
        public static int employee(){

            Scanner input = new Scanner(System.in);

            int numEmp;
            System.out.println("Enter how many employees to be compared: ");
            numEmp = input.nextInt();    
            input.nextLine();
            Employee[] employees = new Employee[numEmp];

            for (int i = 0; i < numEmp; i++) {
                System.out.print("Enter your name: ");
                String employeeName = input.nextLine();
                System.out.println();
                System.out.print("Enter in your annual sales:");
                int employeeSales = input.nextInt();
                input.nextLine();
                System.out.println();
                //creates an Employee object based on the constructor defined in Employee
                Employee employee = new Employee(employeeName, employeeSales);
                employees[i] = employee;    
            }
            //initialize maxSeller to first employee
            Employee maxSeller = employees[0];
            for(int i = 0; i < employees.length; i++){
                //using the getters we created in Employee
                System.out.println("Employee Name: " + employees[i].getName());
                System.out.println("Total Sales: " + employees[i].getSales());
                System.out.println();
                //checks if employees[i] sold more than maxSeller
                if(maxSeller.getSales() < employees[i].getSales()){
                    maxSeller = employees[i];
                }
            }
            System.out.println();
            System.out.println("Top Seller: " + maxSeller.getName());
            System.out.println("Top Sales: " + maxSeller.getSales());

            return maxSeller.getSales();

        }
 }
于 2013-06-20T21:37:16.100 回答
1

如果你用数字对数组进行排序,那么它就会被排序。您可以找到最高或最低的销售额,但无法获得销售人员的姓名。这两个数组没有以任何方式链接,因此您不能期望对一个数组进行排序会导致对另一个数组进行排序。

您需要采取一种根本不同的方法,使用不同的数据结构。

例如,一种方法是使用单个数组,但不使用 String(s) 或 int(s),而是将名称和销售额作为一对存储在一起。如 sunrize920 所示,您可以将这对组合成一个对象,或者您可以将它们都放在一个地图中。

将它们配对成某种类型的对象后,您就可以拥有一个此类对象的数组。

然后,您可以对该数组进行排序。为此,您需要编写一个自定义比较器。

或者,保留您的两个数组并且不要进行任何排序。只需循环并找到最大的数字。记住最大销售数字的位置。然后,使用相同的位置在另一个数组中查找名称。

于 2013-06-20T21:40:49.407 回答