Yaman Baron
Yaman Baron

Reputation: 351

Java - New line loop

I have an array with types and numbers and when printing this is the outcome:

    car:1 car:2 car:3 boat:1 boat:2 boat:3 plane:1 plane:2 plane:3

I am looking for a way to determine when the type changes, and then make a new line. which means to print a "\n" after car:3 (and boat:3) so all the vehicles are on their own row.

I am printing all these items with a for-loop like this:

 for(Types filename: TypeTable)
    {
        Scanner s;
        s = new Scanner(filename.toString());
        while (s.hasNext())
        {
            System.out.print(s.nextLine()+ " ");
        }

and I guess I am in need for some local loop and to save the first type in some temp variable and in a loop print a newline when it changes, but I am kinda stuck.

edit2:

after taking a break and then coming back i managed to fix the problem, and even without having a blank line in beginning. the problem was that i had to define oldTransport in main-class :) ofc you couldnt have known how my structure was. thank you hovercraft of eel :)

Upvotes: 1

Views: 1595

Answers (2)

Thorn
Thorn

Reputation: 4057

Lets keep track of the previous type.

String lastTypeName = "";
for(Types filename: TypeTable) {
     if(!lastTypeName.equals(filename.toString()) {
          lastTypeName = filename.toString();
          System.out.println();
     }
     Scanner s = new Scanner(filename.toString());
     while (s.hasNext()) {
         System.out.print(s.nextLine()+ " ");
     }
     s.close();
}

A line break will get printed before the first line, but maybe that is not a problem.

Upvotes: 1

Hovercraft Full Of Eels
Hovercraft Full Of Eels

Reputation: 285403

Rather than printing the line via System.out.print(...) get the line and put it into a variable. Split it via the String#split(...) method, and compare the first part obtained (the String in the [0] spot of the array obtained from split) with the previous String's first part (that was also saved to a variable). If different, make a new line before printing the line out.

Also, if you are going to extract a nextLine() from the scanner, check for a hasNextLine(), not hasNext().

In pseudocode

String oldTransportation gets assigned ""
while the scanner has a next line
   String variable line gets scanner's next line
   String array called tokens gets this line split on ":"
   String newTransportation gets the [0] item in the tokens array
   Check if newTransportation equals(...) oldTransportation, 
       if different, call System.out.println().
   print the line variable String
   oldTransportation gets assigned newTransportation
end while scanner...

Upvotes: 3

Related Questions