【问题标题】:Combining array indexes组合数组索引
【发布时间】:2013-06-20 21:24:11
【问题描述】:

我创建了两个数组。一个存储名称,一个存储销售。我正在尝试将每个索引链接在一起,以便名称数组中的索引 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;
     }  
}

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

【问题讨论】:

  • 不要这样做;使用地图(即 java.util.HashMap。)
  • 创建一个 Employee 类来保存员工的姓名和销售额。然后创建一个 Employee 对象的数组(或列表)。
  • nameannualSales 字段创建一个实际的Employee class 怎么样?然后您可以创建一个Employee[](或List&lt;Employee&gt;)并使用自定义Comparator&lt;Employee&gt; 对其进行排序。毕竟,Java 是一种面向对象的语言
  • 您有两个正确答案:您可以创建自己的课程或使用地图。这真的取决于你想要做什么。这些是您必须研究的非常简单的解决方案,两者都有无数示例。

标签: java arrays string int


【解决方案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[]ArrayList&lt;Employee&gt; 并在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();

        }
 }

【讨论】:

  • 在创建存储名称和销售额的不同类后,我无法理解下一步该做什么。从这一点开始,我会在扫描仪所在的位置创建另一个类,并要求用户输入姓名和薪水,并在其下输入一个数组来存储该信息吗?
  • 是的,您想要一个具有读取扫描仪数据的 main 方法和一个定义 Employee 对象的类的类
  • stackoverflow.com/questions/13446228/… 您可以通过实施比较器对销售额进行排序
  • 感谢您的帮助。我目前正在尝试创建数组,但它一直给我一个缺少的返回语句,并且无法从静态内容中引用非静态变量。不知道我在那里做了什么。
【解决方案2】:

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

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

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

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

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

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

【讨论】:

  • 我从未使用过地图我将如何将它们用于这个程序?最终需要发生的事情是,必须将销售额的最大值传递给另一个类,该类将计算其他员工需要销售的差额才能达到或超过最畅销的卖家。
  • 地图可以像“快速而肮脏”的记录一样使用。将键视为字段名,将值视为字段值。因此,您可能有一个 Map {["salesman": "Sue Belcher"] ["salesUnits": 218]} 。当然,值可以是任何类型,因此这是表示对象的“快速而肮脏”的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多