尝试在对象数组上进行二进制搜索(可比较)

问题描述 投票:-1回答:1

我一直在努力尝试编写这段代码几天。基本上,我们必须基于Student数组中可比较的“ Student”对象的SSN执行BinarySearch。在SSN上执行binarySearch之后,应打印出与该SSN的名字和姓氏相关的学生。我在编写binarySearch时发现困难。

到目前为止是我的代码:我的学生班:

public class Student implements Comparable<Student>{


    private String firstName, lastName, SSN, bankAccount;


    public Student(String first, String last, String ssn, String bkacct) {

        this.firstName = first;
        this.lastName = last;
        this.SSN = ssn;
        this.bankAccount = bkacct;
    }   


    //toString method
    public String toString() {
        return "Employee: [FirstName = " + firstName + ", LastName = " + lastName + ", SSN = " + SSN + ", BankAccount = "
                + bankAccount + "]";
    }

    public boolean equals(Object other) {

        return (lastName.equals(((Student)other).getLastName()) &&
                firstName.equals(((Student)other).getFirstName())&&
                SSN.equals(((Student)other).getSSN()) && 
                bankAccount.equals(((Student)other).getBankAccount()));
    }


    //Sorting the array based on SSN
    public int compareTo(Student target) {


        int result;

        if (lastName.equals(target.getLastName()))
            result = SSN.compareTo((String) target.getSSN());
        else 

            result = SSN.compareTo((String) target.getSSN());

        return result;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }


    public Object getSSN() {
        return SSN;
    }

    public String getBankAccount() {
        return bankAccount;
    }

以及我执行我的binarySearch的班级

public class ObjectBubbleSortTest {



    //setting up binarySearch to find Array
    public static <Student extends Comparable<Student>> int binarySearch(Student[] student, Student target) {

        int low = 0;
        int high = student.length - 1;
        int middle = (low+high + 1)/2;
        int location = -1;


        while((low <= high) && (location == -1)) {

            if (student[middle].compareTo(target) == 0 ) {
                location = middle;
            }
            else if (student[middle].compareTo(target) < 0) { //middle element too high
                    high = middle - 1;
                }

            else {
                low = middle + 1;
            }

            middle = (low + high + 1)/2;

        }
        return location;

    }

    public static void main(String[] args) {

        //EMPLOYEES OF BURGER KING
        Student[] student = new Student[5];

        //order: First Name, Last Name, SSN, Bank_Account_Number 
        student[0] = new Student("Adam", "Sarrone", "1234567", "9022345"); 
        student[1] = new Student("Ryan", "Petrowvoksi", "4345123", "0120345"); 
        student[2] = new Student("Jenn", "Henderson", "8124512", "564214"); 
        student[3] = new Student("Ricky", "Jean", "3512345", "612345");
        student[4] = new Student("Dare", "Ogun", "421451", "198213");


        System.out.println("Original array order: \n");
            for (Student element : student) 
                System.out.print(element + "\n");


            ObjectBubbleSorter.bubbleSort(student);

            System.out.println();

            System.out.println("\nSorted array order: \n");
            for (Student element : student) 
                System.out.print(element + "\n");

            System.out.println();

            //need helping figuring out why the binary search is not printing out

            int studentName = binarySearch(student, "421451");

            System.out.print(studentName);

        }

    }

我在“ int studentName = binarySearch”上也遇到错误,指出ObjectBubbleSortTest类型的binarySearch(Student [],Student)方法不适用于参数(Student [],String)。我知道这是什么意思,但是努力使我的binarySearch适应该错误。

任何帮助将不胜感激。谢谢。

javascript java binary-search-tree comparator binary-search
1个回答
0
投票
"int studentName = binarySearch" stating The method binarySearch(Student[], Student) in the type ObjectBubbleSortTest is not applicable for the arguments (Student[], String).

因此,基本上您拥有的方法签名是int binarySearch(Student[] student, Student target),但是当您在main()中调用它时,它是binarySearch(student, "421451");

您可能希望改为调用binarySearch(student, student[4]);之类的方法
© www.soinside.com 2019 - 2024. All rights reserved.