0

这是包含接收错误消息的方法的驱动程序类,“方法 ReadSongArray(File, int) 未定义类型 SongArray。” 我不确定这里出了什么问题,因为我确保在我的驱动程序类中创建了一个 SongArray 类型的对象。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class ArrayDriver {

    public void main(String[] args){
        File file1 = new File("TenKsongs.csv");
        SongArray drive = new SongArray();
        drive.ReadSongArray(file1, 10);
    }
}

这是 SongArray 类。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class SongArray {

public Song[] ReadSongArray(File file, int numsongs){
    File file1=new File("TenKsongs.csv");
    Song[] songDB;
    songDB=new Song[numsongs];
    int i=0;
    try{
        FileReader file_reader=new FileReader(file1);
        BufferedReader buf_reader = new BufferedReader (file_reader);
        while(i<numsongs){
            String line=buf_reader.readLine();
            String[] data=line.split(",");// in csv file, attributes are separate using ","
            //transfer string to float and int
            float duration_StrF=Float.parseFloat(data[3]);
            int digitalid_StrInt=Integer.parseInt(data[4]);

            String title_rmSP=data[1].replaceAll("\\s+", "");//remove spaces in song title and artist name
            String artist_rmSP=data[2].replaceAll("\\s+", "");


            Song chips = new Song(title_rmSP,artist_rmSP,duration_StrF,digitalid_StrInt);

            i++;
        }
        buf_reader.close();
    }
    catch(IOException e){
        e.printStackTrace();
    }
    return (songDB);
}

}
4

3 回答 3

1

您可能正在使用类路径中没有该方法的旧版本的类。尝试保存源代码文件,重新编译、重新部署并重新启动服务器。

正是这样的事情会让开发人员发疯。

于 2013-09-26T00:15:42.200 回答
0

您遇到的问题是,SongArray如果您要将其设为对象实例,您的类会缺少一些组件。您应该阅读面向对象编程,但是通过调用new SongArray()告诉 Java 创建一个实例SongArray 您需要向您的类添加一个构造函数来执行此操作,除非您正在static创建一个您不创建实例的类,而是将参数传递给它,从不调用 new。

public class SongArray
{
    //public or private components
    private Song[] songDB;
    private int i;

     //default constructor 
    public SongArray()
     {
        //build components of the SongArray object such as:
        songDB = new Song[100];
     }
     //overloaded constructor
     public SongArray(int count, Song[] songs)
     {
          songDB = songs;
          i = count;
    }
    //other components of class and various functions such as:
    public Song[] readSongArray(File f, int numsong)
    {
        //do stuff here like in your question
    }

}

如果您不想或无法实例化静态类,则应该创建它们。

您可以在此处直接从 Java/Oracle 了解有关 OOP 的更多信息:http: //docs.oracle.com/javase/tutorial/java/concepts/

于 2013-09-26T01:06:03.470 回答
0

您可以尝试做的是确保所有类都在同一个包中,以避免命名空间混淆。

创建一个新包,
例如。com.test.mike

将所有文件复制到此包中。这样它们将在您的类路径中引用如下。
com.test.mike.SongArray
com.test.mike.ArrayDriver
com.test.mike.Song

于 2016-07-08T11:05:23.870 回答