"Последовательные главы программы"


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

То, что я прошу для предложения других решений для этой программы, В про сторону, а вы в естественном смысле.

Это мой код, как в Java новичок.

/*
 * File: ConsecutiveHeads.java
 * ----------------
 * This program flips a coin repeatly until three consecutive heads
 * are tossed.
 */

import acm.program.*;
import acm.util.*;

public class ConsecutiveHeads extends ConsoleProgram {
    /* Run the program */
    public void run() {
        println("This program flips a coin until there are three" +
                "heads in the row.");
        while(counter != 3) {
            FlipACoin();
        }
        println("Yupii! There are already three same heads in the row :)");
    }

    /* Flip a coin. Then if heads are tossed, increment our counter.
     * In tails case, zero counter. */
    private void FlipACoin() {
        boolean rank = rgen.nextBoolean();
        if(rank) {
            println("heads");
            counter++;
        } else {
            println("tails");
            counter = 0;
        }
    }

    /* Create an instance variable for the random number generator */
    private RandomGenerator rgen = new RandomGenerator();

    /* Create an instance variable for counter detecting three heads in row */
    private int counter = 0;
}


2509
4
задан 19 февраля 2011 в 04:02 Источник Поделиться
Комментарии
2 ответа

Ваша функция называется FlipACoin(), но вы делаете больше, чем просто листать монету. Более подходящим названием может быть FlipACoinAndCountConsecutiveHeadrolls().

Я бы предложил сохранить функцию так просто, как подсказывает название и возвращать строку (или логическое) от FlipACoin(), затем проверьте результат за пределами функции. Это также позволит вам сделать счетчик локальную переменную в функцию Run, которая будет принимать классом меньше.

4
ответ дан 19 февраля 2011 в 08:02 Источник Поделиться

Некоторые вещи вы могли бы рассмотреть


  • Сделать стартовой класс простая программа, которая называет других методов и/или классов, чтобы сделать большую часть работы.

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

  • сделать поля, которые не предназначены, чтобы изменить окончательный это может улучшить ясность.

  • это обычное место, то поля конструкторов, то методов, как ордена.

  • вы могли бы реструктурировать поля/вызовы метода, чтобы быть потокобезопасным, если это может быть проблемой. например, класса simpledateformat не является потокобезопасным и не вызывает никакого конца беспокойство.

3
ответ дан 19 февраля 2011 в 05:02 Источник Поделиться