Печать счетчиков во вложенных циклах - PullRequest
0 голосов
/ 17 апреля 2011

Я пытаюсь объединить счетчики во вложенных циклах, с внутренним циклом, имеющим меньший максимум, так что мой вывод должен иметь следующий вид:

1.1
1.2
1.3
1.4
2.1
2.2
2.3
2.4....

Где внутренний цикл завершает свои циклы, а затем перезапускаетсякогда родительский цикл возвращается снова.

Прямо сейчас у меня есть

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class ForLoop
{

    public static void main(String[] args) throws Exception{
        try {
            PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("/Users/evanlivingston/1.txt", true)));

        for ( int counter = 0; counter <= 15; counter++ )
            out.println( counter );
            for ( int counter2 = 0; counter2 <=4; counter2++)
                out.print( counter2 );
        out.close();
        } catch (IOException e) {
        }
    }
}

Кажется, что я должен создать переменную из переменных (счетчиков), а затем вывести ее.

Ответы [ 4 ]

3 голосов
/ 17 апреля 2011

Не всегда хорошая идея использовать циклы без скобок:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class ForLoop
{

    public static void main(String[] args) throws Exception{
        try {
            PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("/Users/evanlivingston/1.txt", true)));

        String output = "";
        for ( int counter = 1; counter < 16; counter++ ) {
            output = Integer.toString(counter) + ".";
            for ( int counter2 = 1; counter2 < 5; counter2++) {
                out.print(test + Integer.toString(counter2) + "\n");
            }
        }
        out.close();
        } catch (IOException e) {
        }
    }
}

Если вы не используете скобки вокруг операторов for, в следующей строке используется только следующая строка оператора for.петля.Так что ваши циклы for на самом деле не являются вложенными.

1 голос
/ 18 апреля 2011

Помимо отсутствующего вложения, вы должны напечатать внешнее значение во внутреннем цикле:

public class ForLoop
{
    public static void main (String[] args) 
    {
        for (int outer = 0; outer <= 15; ++outer)
            for (int inner = 0; inner <=4; ++inner)
                System.out.println (outer + "." + inner);
    }
}

Но поскольку каждое выражение представляет собой только одну строку, мы можем опустить здесь фигурные скобки.:) (Точнее: 2-й цикл for состоит из 2 строк, но вторая покрыта первой, так что это одно выражение для внешнего 'for'.

Для циклов вы обычно используете i ик. Если нет, примите более разумные имена, чем counter, что является подробностью реализации, вместо семантического имени.

1 голос
/ 17 апреля 2011

Стоит отметить, что ваши циклы for не являются вложенными.Ошибки, подобные этим, являются причиной того, что каждый стандарт кодирования для Java, который я когда-либо видел, требует использования { и } для указания с помощью операторов, которые должны выполняться для каждой итерации.

0 голосов
/ 18 апреля 2011

Вам следует учесть несколько вещей:

  • Всегда форматируйте свой код соответствующим образом.Это снижает вероятность того, что вы допустите ошибку при определении потока кода.
  • Всегда убедитесь, что вы закрываете свои ручки.Хорошая практика для этого - всегда помещать close () в блок finally, чтобы гарантировать, что он будет вызван независимо от того, что.В качестве альтернативы, если вы используете C #, просто используйте конструкцию using () {}, чтобы сделать это за вас.
  • Числовые вычисления, как правило, быстрее, чем конкатенация строк, особенно в масштабе.

Вот альтернативное решение, представленное:

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

    PrintWriter out = null;

    try {

        out = new PrintWriter(
            new BufferedWriter(new FileWriter(yourFileName, true)));

        for ( float i = 1.0F; i < 16; i += 0.1F) {
            out.println(String.format("%.1f", i));
            if(i >= (((int)i) + 0.4))
            {
                i += 0.5;
            }
        }

    } finally {
        if(out != null)
        {
            out.close();
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...