2013-05-20 2 views
0

Я знаком с обычным объявлением цикла. Может ли кто-нибудь сказать мне, что делают эти петли и как работают их условия?Что делают эти петли «для»?

BufferedReader charSource = Files.newBufferedReader(this.sourcePath, Charset.forName("ISO-8859-2"); 

BufferedWriter charSink = Files.newBufferedWriter(this.targetPath, Charset.forName("ISO-8859-2"); 

       for (String line = charSource.readLine(); line != null; line = charSource.readLine()) { 
       for (final String element : line.split("\\s")) { 
        if (!element.isEmpty()) { 
         this.streamSorter.write(element); 
         elementCount += 1; 
        } 
       } 
      } 
+0

Google 'foreach'. :) – Achrome

+1

Это ясно объяснено в официальном учебнике Oracle (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html), –

+1

Пробовали ли вы запустить этот код и выполнить код с помощью отладчик? Как вы думаете, что делает этот код? Что ты не понимаешь? –

ответ

2

Они оба итерационно, с основным отличием, являются первыми, проверяя условие для продолжения после каждой итерации. В этом случае, если readLine() не возвращает значение null.

Вторая строка разбивает на строки строк и итерации по каждой строке.

+0

спасибо, я могу принять через 5 минут – user1477955

5

Здесь нет ничего не нормального.

  1. объявить переменную Stringline, чтобы инициализировать charSource.readLine();
  2. тест, если line != null, если false, контур конца;
  3. техническое обслуживание;
  4. line = charSource.readLine(), Гото 2.

Второй является enhanced for loop, он может цикл по любому экземпляру Iterable, и будет использовать Iterator, данное Iterable.

1

Первый из них проходит по всем линиям и прекращает итерацию после последней строки (readLine() returns null), второй над всеми словами (foreach цикла по результату команды split).

Второй цикл использует результат первого.

1

Во-первых, внешний контур (The "для (String = строка ..."):

Для петель, в основном в то время как петли "замаскированные" Три "кусков". a для декларации: Инициирование счетчика, спецификация счетчика и счетчик приращений. Как вы можете видеть, for действительно на некоторое время.

В вашем примере (внешний для) это именно то, что вы Выполнение: инициализация «счетчик» («строка = charSource.ReadLine()»), «co unter "top" ("line! = null") и "counter" increment ("line = charSource.readLine()").

Внутренний цикл - это в основном петля foreach. Цикл foreach итерирует «автоматически» по коллекции, предоставляя вам повторяющийся элемент шаг за шагом.