Попытка двоичного поиска в массиве объектов (сравнимо) - PullRequest
0 голосов
/ 25 апреля 2020

Я пару дней пытался написать этот код. По сути, мы должны выполнить бинарный поиск на основе SSN сопоставимых объектов "Student" в массиве Student. После выполнения двоичного поиска в SSN студент, связанный с именем и фамилией этого SSN, должен распечатать. Я испытываю трудности при написании бинарного поиска.

Вот мой код: мой класс ученика:

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

и мой класс, в котором я выполняю бинарный поиск

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», заявляющее, что метод binarySearch (Student [], Student) в типе ObjectBubbleSortTest не применим для аргументов (Student [], String). Я понимаю, что это значит, но изо всех сил пытаюсь сделать мой двоичный поиск адаптируемым, чтобы исправить эту ошибку.

Любая помощь будет принята с благодарностью. Спасибо.

1 Ответ

0 голосов
/ 25 апреля 2020

Было бы понятно, если вы еще раз внимательно прочитаете сообщение об ошибке.

"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]);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...