首先感谢你的指点。它的结局不像我昨天所期望的那样。今天我想借用你们的大脑的原因是:我已经写了我的程序,它确实是我所需要的,但它都在一个厚实的"主",所以我想把代码的一些部分转换为方法,使其更具可读性/可维护性,我正在努力与一个LinkedList工作的方法。
作为主程序一部分的代码如下:
/* Variable definition */
List mzList = new LinkedList();
mzList = new ArrayList();
/* Reading the input file */
try {
FileInputStream a_stream = new FileInputStream("./precursors");
DataInputStream a_in = new DataInputStream(a_stream);
BufferedReader a_reader = new BufferedReader(new InputStreamReader(a_in));
String a_line;
while ((a_line = a_reader.readLine()) != null) {
if (a_line.equals("---")) {
/* Do Nothing... */
} else {
mzList.add(a_line);
}
} /* ends the loop that reads input file */
a_in.close(); */
}
我一直在尝试将其写入如下方法:
public static LinkedList filereader (String filename, LinkedList someList) {
FileInputStream input = new FileInputStream(filename);
DataInputStream in = new DataInputStream(input);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null) {
if (line.equals("---")) {
/* Do Nothing... */
} else {
someList.add(line);
}
}
in.close();
return(someList);
}
然后,我将尝试在主程序中调用它,如下所示:mzList = class.filreader("precursor",mzList);
这给了我一堆问题,显然我在做一些愚蠢的事情,我请求原谅我用这个问题骚扰你们所有人,但我是Java的新手,通过其他"问题"搜索并没有真正帮助我解决我的问题。
亲切的问候,Bas Jansen
PS:编辑了一些明显的错别字和格式错误
我个人从来没有尝试过用关键字class
调用我的类的方法。如果我们说你的类被命名为Foo
,在你的Main方法中你应该写:
mzList = Foo.filreader("precursor",mzList);
在您的第一个Main示例中,这没有意义:
List mzList = new LinkedList();
mzList = new ArrayList();
应该是LinkedList()或ArrayList(),如下所示:
List mzList = new LinkedList();
或List mzList = new ArrayList();
接下来,你传递的文件名是"precursor",但是在第一个例子中你使用的是"。/precursors"(但我想你已经意识到了)。
最后,你将你的方法的结果分配给变量mzList
,并传递相同的列表实例作为参数。如果您将list作为参数传递,则不必返回它,因为它与之前在代码中创建的列表完全相同(请参阅引用)。你可以这样写:
public static void filereader (String filename, LinkedList someList) {
FileInputStream input = new FileInputStream(filename);
DataInputStream in = new DataInputStream(input);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null) {
if (line.equals("---")) {
/* Do Nothing... */
} else {
someList.add(line);
}
}
in.close();
return(someList);
}
然后简单地(注意这里没有赋值):
Foo.filreader("precursor",mzList);
在我看来,你没有利用这个输入列表从它读取数据。因此,您可以在方法内部初始化列表并返回它,如下所示:
public static LinkedList filereader (String filename) {
LinkedList someList = new LinkedList(); // notice list initialization
FileInputStream input = new FileInputStream(filename);
DataInputStream in = new DataInputStream(input);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null) {
if (line.equals("---")) {
/* Do Nothing... */
} else {
someList.add(line);
}
}
in.close();
return(someList);
}
,然后简单地调用你的方法并分配结果:
mzList = Foo.filreader("precursor");
函数的参数类型是Linked List
,因为您已经将mz_list
初始化为ArrayList
。
从变量定义中删除这个mzList = new ArrayList();
。
此外,由于mz_list
是在类级别定义的,并且您将mz_list
作为参数传递,然后返回mz_list
,因此不需要将LinkedList作为函数的参数。
你可以简单地把你的函数定义为
public static LinkedList filereader (String filename) {
// use mz list here
}