Борьба с методологией моей основной программы (метод, который имеет LinkedList в качестве входных и выходных конкретно).Куда я иду с этим не так? - PullRequest
0 голосов
/ 13 декабря 2011

Во-первых, спасибо за указатель что-то. Завершение не делает то, что я ожидал, что он сделает вчера.Теперь причина, по которой я хотел бы позаимствовать ваши мозги сегодня, заключается в следующем;я написал свою программу, и она делает именно то, что мне нужно, но все это в коренастом «основном», поэтому я хотел переместить некоторые части кода в методы, чтобы сделать его более читабельным / управляемым, и я борюсь с методом, который работает сa 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, и поиск других «вопросов» не помог мне решить мою проблему.

С уважением, Бас Янсен

PS: отредактировал несколько вопиющих опечаток иошибки форматирования

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Лично я никогда не пытался вызвать метод моего класса с ключевым словом class. Если мы говорим, что ваш класс называется Foo, в вашем методе Main вы должны написать:

mzList = Foo.filreader("precursor",mzList);

В вашем первом главном примере это не имеет смысла:

List mzList = new LinkedList();
mzList = new ArrayList();

Это должен быть LinkedList () или ArrayList (), например:

List mzList = new LinkedList(); или List mzList = new ArrayList();

Далее вы передаете имя файла «предкурсор», но в первом примере вы используете «./precursors» (но я думаю, вы знаете об этом).

Наконец, вы присваиваете результат вашего метода переменной mzList и передаете тот же экземпляр списка, что и параметр. Если вы передаете список в качестве параметра, вам не нужно возвращать его обратно, потому что это тот же список, который был создан ранее в вашем коде (читайте о ссылках). Вы можете использовать что-то вроде этого:

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");
1 голос
/ 13 декабря 2011

Тип аргумента функции 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
}
...