我的代码如下:
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
答案 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();
}