如何为数组创建搜索方法

时间:2015-04-16 21:55:51

标签: java arrays search jcreator

我的代码如下:

import java.io.*;
import java.util.*;

public class readStudents extends Object
{ 
    private String SName = "";
    private String DoB = "";
    private String Gender = "";
    private String Address = "";
    Student [] students = new Student[20];


    public void fillStudentArray()
    {
        // properties

        int size; // total number of Students in collection

        File file = new File("StudentDetails.txt");

    try
    {
        Scanner in  = new Scanner(file);


        while(in.hasNextLine())
        {
            String SName = in.next();
            String DoB = in.next();
            String Gender = in.next();
            String Address = in.next();

        }

    }

    catch (FileNotFoundException e)
    {
        e.printStackTrace();
    }

    }   

    public String getName()
    {
        return this.SName;
    } 

    public void printname()
    {
        System.out.println("hello");
    }
    public Student search(String name)
    {
        System.out.print("Enter the name you wish to search: ");

        for (int i = 0; i < this.students.length; i++)
        {
            Student s = this.students[i];
            if (s.getName().equalsIgnoreCase(name))
            {
                return s;
            }
        }
        return null; 
    }
}   //end class students

但是我正在尝试创建一个精心设计的程序,我可以使用该文件中尽可能少的代码从另一个主文件调用这些方法。

底部的搜索方法让我感到沮丧,因为我假设我需要在getName()方法中对数组进行处理,但我无法弄明白。

由于我将此作为另一个主方法的类,因为我的数组初始化和声明的位置允许其他方法访问它,但它让我无法从main方法创建此数组,除非我我错过了什么?

这是错误jCreator投掷:

F:\University\Ass2\readStudents.java:62: error: cannot find symbol
            if (s.getName().equalsIgnoreCase(name))

                 ^
symbol:   method getName()
location: variable s of type Student

3 个答案:

答案 0 :(得分:3)

您从未填充Student students[]数组...您在此处检索了将填充它们的值:

while(in.hasNextLine())
    {
        String SName = in.next();
        String DoB = in.next();
        String Gender = in.next();
        String Address = in.next();

    }

但是你实际上从未将这些值设置为Student数组中的students[]对象

做这样的事情:

int i = 0;

while(in.hasNextLine())
    {
        String name = in.next();
        String dateOfBirth = in.next();
        String gender = in.next();
        String address = in.next();

        students[i] = new Student(name, dateOfBirth, gender, address);
        i++
    }

此外,您可能会考虑放弃数组并使用某种List或Hash对象...如果您的文件包含超过20行,当您尝试定义第21个值时,该数组将超出索引。一个arraylist或列表你不会有这个问题

答案 1 :(得分:1)

我冒昧地调整你的代码,如前面提到的答案,在你的情况下使用数组列表会更好。您可以在读者中制作一个小型学生容器课程。获取名称方法也有点多余; s

package test;

import java.io.*;
import java.util.*;

public class readStudents{

    ArrayList<Student> students = new ArrayList<Student>();

    class Student {

        private String name;
        private String dob;
        private String gender;
        private String address;

        public Student(String name, String dob, String gender, String address) {
            this.name = name;
            this.dob = dob;
            this.gender = gender;
            this.address = address;
        }

        public void fillStudentArray() {
            // properties

            int size; // total number of Students in collection

            File file = new File("StudentDetails.txt");

            try {
                Scanner in = new Scanner(file);

                while (in.hasNextLine()) {
                    String SName = in.next();
                    String DoB = in.next();
                    String Gender = in.next();
                    String Address = in.next();

                    students.add(new Student(SName, DoB, Gender, Address));
                }

            }

            catch (FileNotFoundException e) {
                e.printStackTrace();
            }

        }

        public String getName(Student student) {
            return student.name;
        }

        public void printname() {
            System.out.println("hello");
        }

        public Student search(String name) {
            System.out.print("Enter the name you wish to search: ");

            for (Student student : students) {
                if (student.name.equalsIgnoreCase(name))
                    ;
                return student;
            }

            return null;
        }
    }
}

答案 2 :(得分:0)

如果你的老师不强迫你在搜索功能中使用for-for或for-each循环 - 这就是如何对Java 8进行全面扫描

public Optional<Student> findFirstByName(final String name) {
    return Arrays.stream(students)
            .filter(s -> s.getName().equalsIgnoreCase(name))
            .findFirst();
}