2016-11-09 2 views
0

Я объясняю свою программу. Эта программа имеет два файла и два файла имеют ученика нет, имя студента и фамилию.Как читать из текстового файла в стек и очереди с использованием двусвязного списка в java

  • Пример:

  • queues.txt:

  • Student_No # Имя # Фамилия
  • 1234 # Джейн # Weber #
  • 1235 # Джонсон # Рой
  • 1267 # Генри #Morin
  • stack.txt:
  • Student_No # Имя # Фамилия
  • 3456 # Джейн # подветренной
  • 7535 # Johnson # Perez
  • 1967 # Генри # Фортин

Как я могу читать и бросить стек и очередь? Программа имеет класс данных, класс узла, класс стека, класс очереди и основной класс. Я делал каждый класс, кроме основного класса, потому что я не могу прочитать файл после стека бросков и очереди.

public static void main(String[] args) throws IOException { 

    Stack stack = new Stack(); 
    Queues queue = new Queues(); 

    File stackfile = new File("stack.txt"); 


    if (!stackfile.exists()) { 
     stackfile.createNewFile(); 
    } else { 
     System.out.println("File is done"); 
    } 
    FileReader r= new FileReader(stackfile); 
    BufferedReader reader = new BufferedReader(r); 

    String line = null; 
    Data data= new Data(); // this class have String name, surname and string number 

    int i=1; 
    while ((line=reader.readLine())!=null) { 

     { if(line.trim().equals("#")){ 
      stack.Push(data); 
      data=new Data(); 
      i=1; 
     } 
     else{ 
      if(i==1){ 
       data.setNo(line); 
      } 
      else if(i==2){ 
       data.setName(line); 

      } 
      else if(i==3){ 
       data.setSurName(line); 
      } 
      i++; 

      } 
     } 





    } 
    stack.Push(data); 
    reader.close(); 

    File queuefile = new File("queue.txt"); 

    if (!queuefile.exists()) { 
     queuefile.createNewFile(); 
    } else { 
     System.out.println("File is done"); 
    } 

    BufferedReader read = null; 
    read = new BufferedReader(new FileReader(queuefile)); 
    String lines = read.readLine(); 


    while (lines != null) { 
     System.out.println("Read from queue: " + lines); 


     { if(lines.trim().equals("#")){ 
      queue.insert(data); 
      data=new Data(); 
      i=1; 
     } 
     else{ 
      if(i==1){ 
       data.setNo(line); 
      } 
      else if(i==2){ 
       data.setName(line); 

      } 
      else if(i==3){ 
       data.setSurName(line); 
      } 
      i++; 

      } 
     } 


    } 
    queue.insert(data); 
    read.close(); 

    } 
    } 
+0

Не могли бы вы также опубликовать свои другие классы? – thatguy

+0

Хорошо, я сделал это – mrsengineer

+0

Что такое 'kuyruk' в вашем' main' методе? Он не определен. Кроме того, вам не нужны пользовательские классы 'Stack' и' Queue', Java уже предлагает те, которые находятся в пакете 'java.util'. – thatguy

ответ

0

Вот скорректированный код. Тело вашей петли не делало того, что вы планировали. Если вы хотите разделить текст с разделителем, например #, используйте функцию splitString. Here вы можете узнать, как использовать split.

public static void main(String[] args) throws IOException { 

    Stack stack = new Stack(); 
    Queues queue = new Queues(); 

    File stackfile = new File("stack.txt"); 

    if (!stackfile.exists()) { 
     stackfile.createNewFile(); 
    } else { 
     System.out.println("File is done"); 
    } 
    FileReader r = new FileReader(stackfile); 
    BufferedReader reader = new BufferedReader(r); 

    String line = null; 

    // Skip headline 
    reader.readLine(); 

    while ((line = reader.readLine()) != null) { 

     String[] splitLine = line.trim().split("#"); 

     if (splitLine.length == 3) 
      stack.Push(new Data(splitLine[1], splitLine[2], splitLine[0])); 
    } 

    reader.close(); 

    File queuefile = new File("queue.txt"); 

    if (!queuefile.exists()) { 
     queuefile.createNewFile(); 
    } else { 
     System.out.println("File is done"); 
    } 

    BufferedReader read = null; 
    read = new BufferedReader(new FileReader(queuefile)); 

    // Skip headline 
    read.readLine(); 

    while ((line = read.readLine()) != null) { 

     String[] splitLine = line.trim().split("#"); 

     if (splitLine.length == 3) 
      queue.insert(new Data(splitLine[1], splitLine[2], splitLine[0])); 
    } 

    read.close(); 

} 
+0

Спасибо, что помогли. спасибо вам огромное – mrsengineer

+0

Я обновил ответ ссылкой на 'split' и упростил шаблон для' split ("#"); ', который делает то же самое, что и раньше. – thatguy