Java - Новая строка цикла - PullRequest
1 голос
/ 10 марта 2012

У меня есть массив с типами и числами, и при печати это результат:

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

Я ищу способ определить, когда тип изменяется, а затем создать новую строку. это означает, что после машины должно быть напечатано "\ n": 3 (и лодка: 3), чтобы все машины находились в отдельном ряду.

Я печатаю все эти элементы с помощью цикла for следующим образом:

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

и я предполагаю, что мне нужен какой-то локальный цикл и чтобы сохранить первый тип в некоторой переменной temp, и в цикле вывести новую строку, когда она изменится, но я как-то застрял.

edit2:

после перерыва, а затем возвращения мне удалось решить проблему, и даже не имея пустой строки в начале. проблема была в том, что я должен был определить oldTransport в main-классе :) ofc, вы не могли знать, какова была моя структура. спасибо судно на воздушной подушке угря:)

Ответы [ 2 ]

3 голосов
/ 10 марта 2012

Вместо того, чтобы печатать строку через System.out.print(...) , получите строку и поместите ее в переменную.Разбейте его с помощью метода String#split(...) и сравните первую полученную часть (String в месте [0] массива, полученного из split) с первой частью предыдущей String (которая также была сохранена в переменной).Если отличается, создайте новую строку перед печатью.

Кроме того, если вы собираетесь извлечь nextLine () из сканера, проверьте для hasNextLine (), а не hasNext().

В псевдокоде

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...
1 голос
/ 10 марта 2012

Позволяет отслеживать предыдущий тип.

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

Перед первой строкой будет напечатан разрыв строки, но, возможно, это не проблема.

...