0

I explain my program. This program have two files and two files have student no, student name and surname.

  • Example:

  • queues.txt :

  • Student_No#Name#Surname
  • 1234#Jane#Weber#
  • 1235#Johnson#Roy
  • 1267#Henry#Morin
  • stack.txt:
  • Student_No#Name#Surname
  • 3456#Jane#lee
  • 7535#Johnson#Perez
  • 1967#Henry#Fortin

How do I read and throw stack and queue? Program has Data class , Node class , Stack class , Queue Class and Main Class. I did every class except main class because I cant read file after throw stack and queue.

   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();

   }
  }
mrsengineer
  • 27
  • 2
  • 8
  • Can you please post your other classes, too? – thatguy Nov 09 '16 at 19:05
  • Okay I did that – mrsengineer Nov 09 '16 at 19:18
  • What is `kuyruk` in your `main` method supposed to be? It is not defined. Moreover, you do not need custom `Stack` and `Queue` classes, Java already offers those in the `java.util` package. – thatguy Nov 09 '16 at 19:21
  • Yes I know java.util. But I want learn this function also stack, linkedlist and queue class too. I cant read file so cant use datas in file to stack and queue class – mrsengineer Nov 09 '16 at 19:26
  • It’s become an awful lot of code now. While I hope @thatguy is happy, I for my part would really have preferred a [Minimal, Complete, and Verifiable example](http://stackoverflow.com/help/mcve). – Ole V.V. Nov 09 '16 at 19:28

1 Answers1

0

Here is the corrected code. Your loop body did not do what you intended. If you want to split a text with a delimiter like #, use the split function of String. Here you can find out how to use 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();

}
Community
  • 1
  • 1
thatguy
  • 21,059
  • 6
  • 30
  • 40
  • I have updated the answer with a link on `split` and simplified the pattern to `split("#");`, which does the same as before. – thatguy Nov 09 '16 at 21:20