0

2 つの配列を作成しました。1 つは名前を格納し、もう 1 つは販売を格納します。名前配列のインデックス 1 が sales 配列のインデックス 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;
     }  
}

私は何を間違っているのですか?私はこれを2週間続けています。

4

2 に答える 2

1

配列を数字でソートすると、それがソートされます。売上高の上下はわかりますが、販売員の名前はわかりません。2 つの配列はまったくリンクされていないため、一方を並べ替えると他方が並べ替えられることは期待できません。

異なるデータ構造を使用して、根本的に異なるアプローチを取る必要があります。

たとえば、単一の配列を使用する方法がありますが、それを String(s) または int(s) で作成するのではなく、name と sales の両方をペアとして一緒に格納します。sunrize920 で示されているように、ペアをオブジェクトに挿入することも、両方をマップに配置することもできます。

それらをいくつかのタイプのオブジェクトにペアリングすると、そのようなオブジェクトの配列を持つことができます。

次に、その配列を並べ替えることができます。そのためには、カスタム コンパレータを記述する必要があります。

または、2 つの配列を保持し、並べ替えを行わないでください。ループして最大数を見つけてください。最大の販売数の位置を覚えておいてください。次に、同じ位置を使用して、他の配列で名前を検索します。

于 2013-06-20T21:40:49.407 に答える
1

2 つの別々の配列を使用するのではなく、日付を格納するクラスを作成する必要があります。

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;
    }
}

スキャナーから読み取るときに、name と sales をローカル変数として保存し、それらを Employee コンストラクターに渡します。Employee array[]次に、またはを作成して、ArrayList<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 に答える