英文:
Reading a file with a method that will return an array of String
问题
我正在做一个作业,需要读取文件,这个方法的输入应该是文件名,输出应该是一个学生数组,方法的签名是:
private static Student[] readData(String filename);
我的当前代码是:
import java.io.*;
import java.io.File;
import java.util.Scanner;
class Main{
public static void main(String[] args) {
String []text = readData("students.txt");
for(int i = 0; i<text.length; i++){
System.out.println(text[i]);
}
}
private static Student[] readData(String filename){
String[] data = "";
try{
File myObj = new File(filename);
Scanner myReader = new Scanner(myObj);
while(myReader.hasNextLine()){
data =myReader.nextLine();
System.out.println(data);
}
}catch (FileNotFoundException e){
System.out.println("Error");
e.printStackTrace();
}
return data;
}
}
当我编译代码时,它报错说 "incompatible types: Student[] cannot be converted to String[]"。你能解释一下这里发生了什么,以及如何修复吗?
错误是因为你的 readData
方法被声明为返回 Student[]
(学生数组),但在方法内部,你却返回了一个 String
数组。这是不兼容的类型,导致了编译错误。
要修复这个问题,你需要做以下几个步骤:
- 修改方法的返回类型: 将
readData
方法的返回类型从Student[]
更改为String[]
,因为你似乎打算返回一个字符串数组,而不是学生数组。
private static String[] readData(String filename)
- 修改数据变量的类型: 将
data
的类型从String[]
更改为ArrayList<Student>
,因为你似乎想要在文件中读取多个学生的数据并将它们存储在一个学生对象的集合中。
ArrayList<Student> data = new ArrayList<Student>();
- 读取文件并将数据存储在学生对象中: 在
while
循环中,读取文件的每一行并将其解析为学生对象,然后将学生对象添加到data
集合中。
while (myReader.hasNextLine()) {
String line = myReader.nextLine();
// 解析 line 并创建一个学生对象
// 将学生对象添加到 data 集合中
}
- 返回学生对象数组: 在方法的末尾,将
data
集合转换为Student[]
数组并返回它。
return data.toArray(new Student[data.size()]);
这些修改将允许你的 readData
方法正确返回一个学生对象数组。
英文:
I'm doing an assignment where I need to read the file, the input of this method should be a file name and the output should be an array of students, the signature method is:
private static Student[] readData(String filename);
My current code is:
import java.io.*;
import java.io.File;
import java.util.Scanner;
class Main{
public static void main(String[] args) {
String []text = readData("students.txt");
for(int i = 0; i<text.length; i++){
System.out.println(text[i]);
}
}
private static Student[] readData(String filename){
String[] data = "";
try{
File myObj = new File(filename);
Scanner myReader = new Scanner(myObj);
while(myReader.hasNextLine()){
data =myReader.nextLine();
System.out.println(data);
}
}catch (FileNotFoundException e){
System.out.println("Error");
e.printStackTrace();
}
return data;
}
}
When I compile the code, it said error "incompatible types: Student[] cannot be converted to String[]". Can you guys explain to me what happens here and how can I fix it?
答案1
得分: 5
你正在返回类型为String[]
的data
,但是方法的预期返回类型是Student[]
。
不要将data
作为字符串数组,而是将其声明为Student[]
,并且向该数组添加学生对象,而不是字符串。将下面的代码:
data[index]= reader.nextLine()
改为:
data[index] = convertStringToStudent(reader.nextLine())
如果需要的话,在你的Student
类中覆盖toString
方法,这样System.out.print(studentInstance)
将打印出你想要的属性,而不是类名@哈希码。
class Student {
// ... 其他属性和方法 ...
@Override
public String toString() {
// 返回你想要打印的属性
}
}
Student convertStringToStudent(String input) {
Student s = new Student();
// 在这里解析输入并设置学生对象s的属性
return s;
}
英文:
You are returning data
whose type is String[]
, however the expected return type of the method is Student[]
Instead of having data as string array, make it a Student[]
, and add students to this array instead of a string..
instead of
data[index]= reader.nextLine()
use
data[index] = convertStringToStudent(reader.nextLine())
If required override the toString
method in your Student class so that System.out.print(studentInstance)
prints the properties you want instead of className@hashcode
Student convertStringToStudent(String input) {
Student s = new Student();
// set the properties of student s by parsing input here
return s;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论