Проблемы конструктора классов при выполнении линейного поиска по двум классам - PullRequest
0 голосов
/ 16 февраля 2012

Я создаю программу, в которой пользователь должен ввести имя учащегося и посмотреть, существует ли он в массиве учеников, используя метод линейного поиска. Множество студентов находятся в другом классе, и у меня возникают проблемы при создании конструктора. Я перепробовал много вещей, и он не работает, может кто-то указать мне правильное направление. Мой класс линейного поиска

import java.util.*;
import java.util.Scanner;

public class LinearSearch {
public int find(Student [] a, String nm) {
for (int i = 0; i < a.length; i++) {
if (a[i].equals(nm)){
return i;
break;
}
else{
return -1;
}
}
}

public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
LinearSearch search = new LinearSearch();
Student stu = new Student();

Student [] arr = stu.getArray();
System.out.print("Enter the name to search: ");
String name = reader.nextLine();

int n = search.find(arr, name);
if ((n >= 0) && (n < arr.length)) {
System.out.println(name + " was found at index: " + n);
} else {
System.out.println(name + " was not found");
}
}
}

Класс моего ученика

import java.util.*;

public class Student {
public Student(){

}
public Student [] getArray(){
Student [] studentArray = new Student[3];
studentArray[0] = new Student ("Mel");
studentArray[1] = new Student ("Jared");
studentArray[2] = new Student ("Mikey");
return studentArray;
}
}

Ответы [ 3 ]

0 голосов
/ 16 февраля 2012

Вы определили конструктор без аргумента:

public Student() {
}

Но вы вызываете конструктор, которому в качестве аргумента требуется строка:

studentArray[0] = new Student("Mel");

Итак, ваш конструктор должен иметь в качестве аргумента строку:

public Student(String name)

И вам, вероятно, следует хранить это имя как поле в классе Student:

private String name;

public Student(String name) {
    this.name = name;
}

Обратите внимание, что экземпляр Student не может быть равен экземпляру String. Вы должны предоставить метод получения для имени и сравнить введенную строку с именем учащегося, а не сравнивать его с самим учеником.

0 голосов
/ 25 июня 2013
public class Student {
private String studentName;
private Student[] studentArray;

public String getStudentName() {
    return studentName;
}

public void setStudentName(String studentName) {
    this.studentName = studentName;
}

public Student[] getStudentArray() {
    return studentArray;
}

public void setStudentArray(Student[] studentArray) {
    this.studentArray = studentArray;
}

public Student(){
    studentArray = new Student[3];      
}

public Student[] getArray() {       
    Student st1 = new Student();
    st1.setStudentName("mel");
    Student st2 = new Student();
    st2.setStudentName("Jared");
    Student st3 = new Student();
    st3.setStudentName("Mikey");
    studentArray[0]=st1;
    studentArray[1]=st2;
    studentArray[2]=st3;
    return studentArray;
}

}

код выше - ваш класс ученика.нет необходимости создавать конструктор.но так как вы хотели бы, я поместил это в код.класс LinearSearch выглядит следующим образом:

public class LinearSearch {
private int i;
public int find(Student[] a, String nm) {
    for ( i = 0; i < a.length; i++) {
        if (a[i].getStudentName().equals(nm)) {
            break;
        } else {
            i = -1;
        }
    }
    return i;
}

public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);
    LinearSearch search = new LinearSearch();
    Student stu = new Student();

    Student[] arr = stu.getArray();
    System.out.print("Enter the name to search: ");
    String name = reader.nextLine();

    int n = search.find(arr, name);
    if ((n >= 0) && (n < arr.length)) {
        System.out.println(name + " was found at index: " + n);
    } else {
        System.out.println(name + " was not found");
    }
}

}

0 голосов
/ 16 февраля 2012
import java.util.*;

public class Student {
private String name;
public Student(String name){
    this.name = name;
}
public Student [] getArray(){
Student [] studentArray = new Student[3];
studentArray[0] = new Student ("Mel");
studentArray[1] = new Student ("Jared");
studentArray[2] = new Student ("Mikey");
return studentArray;
}
  public String getName(){
      return name;
   }
}

и, конечно же, в компереции вам нужно сделать:

f (a[i].getName().equals(nm)){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...