我创建了两个数组。一个用于存储名称,另一个用于存储销售。我试图将每个索引链接在一起,以便从名称数组中的索引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;
}
}
我做错了什么我已经在这里待了两个星期了。
答案 0 :(得分: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构造函数时,将名称和销售存储为本地变量。然后,您可以创建Employee array[]
或ArrayList<Employee>
并在Employee.getSales()
上对此数组/ arraylist进行排序
像这样:
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();
}
}
答案 1 :(得分:1)
如果使用数字对数组进行排序,则会对其进行排序。您可以找到最高或最低销售额,但无法获得销售人员的姓名。这两个数组没有以任何方式链接,因此您不能指望排序一个导致另一个数组的排序。
您需要使用不同的数据结构采用从根本上不同的方法。
例如,一种方法是使用单个数组,但不是使用String(s)或int(s),而是将名称和销售一起存储为一对。如sunrize920所示,您可以将该对噘入一个对象,或者您可以将它们都放在地图中。
将它们组合成某种类型的对象后,就可以得到一个这样的对象数组。
然后,您可以对该数组进行排序。为此,您需要编写自定义比较器。
或者,保留两个阵列,不要进行任何排序。只需循环查找并找到最大的数字。记住最大销售数量的位置。然后,使用相同的位置在另一个数组中查找名称。