Java 错误消息告诉我某个方法未定义,但似乎已定义

Java 错误消息告诉我某个方法未定义,但似乎已定义,java,methods,undefined,Java,Methods,Undefined,这是一个驱动程序类,其中包含一个方法,该方法接收错误消息,“对于SongArray类型,方法ReadSongArray(File,int)未定义。”我不确定这里出了什么问题,因为我确保在我的驱动程序类中创建了一个SongArray类型的对象 import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.

这是一个驱动程序类,其中包含一个方法,该方法接收错误消息,“对于SongArray类型,方法ReadSongArray(File,int)未定义。”我不确定这里出了什么问题,因为我确保在我的驱动程序类中创建了一个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);
}

}
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileReader;
导入java.io.IOException;
公共类SongArray{
公共歌曲[]ReadSongArray(文件文件,int numsongs){
文件file1=新文件(“TenKsongs.csv”);
Song[]songDB;
songDB=新歌[numsongs];
int i=0;
试一试{
FileReader file_reader=新的FileReader(file1);
BufferedReader buf_reader=新的BufferedReader(文件_reader);

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


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

您遇到的问题是,如果要将您的
SongArray
类作为对象实例,它缺少一些组件。您应该阅读面向对象编程,但可以调用
new SongArray()
告诉Java创建一个
SongArray
的实例,您需要向类中添加一个构造函数来完成此操作,除非您正在创建一个
静态的
类,您不创建该类的实例,而是将参数传递给它,而从不调用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的更多信息:

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

创建一个新包
迈克

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

com.test.mike.Song

您的
main()
不是静态的原因是什么?很好的回答。但是,这并没有解决我的问题。请尝试清理并重建项目(或者手动删除类文件,然后重新编译)。另外,请确保没有另一个名为SongArray的类(我假设它们位于同一个包/目录中)我刚刚注意到了这一点,我不知道是什么原因导致了您的问题。您应该尝试一下文件创建,或者让您的主方法抛出FileNotFound异常,我相信,除非我很傻,而且这些方法不需要异常。@Darren我想他们不需要。File对象只是文件的句柄,而不是你真正需要检查的是,当文件被读写器打开时,代码确实有。我只是做了一次清理和重建,但仍然没有成功。我把这个添加到我的SongArray类中,因为我想这就是你告诉我要做的。我的java不如我希望的那么流利。但我仍然缺少一些东西。我现在很迷茫。public SongArray(File File,int numsongs){this.File=File;this.numsongs=numsongs;}请不要误会,但在继续之前,您确实需要学习java和oop的更多基础知识。您刚才在那里编写的是构造函数的一部分。这将根据您发送的参数(File和numsongs)创建对象。没问题。我认为该链接将帮助您创建整个类。然后,在您的驱动程序应用程序中,您可以创建它(
new SongArray()
)并调用您的
ReadSongArray()
方法。