努力整理我的主程序(一个有LinkedList作为输入和输出的方法).我哪里做错了



首先感谢你的指点。它的结局不像我昨天所期望的那样。今天我想借用你们的大脑的原因是:我已经写了我的程序,它确实是我所需要的,但它都在一个厚实的"主",所以我想把代码的一些部分转换为方法,使其更具可读性/可维护性,我正在努力与一个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
}

相关内容

  • 没有找到相关文章

最新更新