使用一个方法读取文件,该方法将返回一个字符串数组。

huangapple go评论107阅读模式
英文:

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 数组。这是不兼容的类型,导致了编译错误。

要修复这个问题,你需要做以下几个步骤:

  1. 修改方法的返回类型:readData 方法的返回类型从 Student[] 更改为 String[],因为你似乎打算返回一个字符串数组,而不是学生数组。
private static String[] readData(String filename)
  1. 修改数据变量的类型:data 的类型从 String[] 更改为 ArrayList<Student>,因为你似乎想要在文件中读取多个学生的数据并将它们存储在一个学生对象的集合中。
ArrayList<Student> data = new ArrayList<Student>();
  1. 读取文件并将数据存储在学生对象中:while 循环中,读取文件的每一行并将其解析为学生对象,然后将学生对象添加到 data 集合中。
while (myReader.hasNextLine()) {
    String line = myReader.nextLine();
    // 解析 line 并创建一个学生对象
    // 将学生对象添加到 data 集合中
}
  1. 返回学生对象数组: 在方法的末尾,将 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(&quot;students.txt&quot;);
		for(int i = 0; i&lt;text.length; i++){
			System.out.println(text[i]);
		}
	}

	private static Student[] readData(String filename){
		String[] data = &quot;&quot;;
		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(&quot;Error&quot;);
			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;
}

huangapple
  • 本文由 发表于 2020年10月22日 11:37:37
  • 转载请务必保留本文链接:https://go.coder-hub.com/64474938.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定