2013-09-16 4 views
2

Мой профессор хочет меня к этому:начинающих Java Код счетчика

Написать количество сменных счетчиков с помощью интерфейса счетчика ниже

public interface Counter { 
/** Current value of this counter. */ 
int value(); 
/** Increment this counter. */ 
void up(); 
/** Decrement this counter. */ 
void down(); 
} 

Развивать следующее:

интерфейс ResetableCounter, поддерживаемый message void reset() в дополнение к параметрам счетчика.

Вот что я сделал:

public interface ResetableCounter { 
void reset(); 
int value(); 
void up(); 
void down(); 
} 

Реализация ResetableCounter называется BasicCounter, которая начинается со значения 0 и подсчитывает вверх и вниз на +1 и -1 соответственно.

Вот что я сделал:

public class BasicCounter implements ResetableCounter 
    { 
     int counterVariable = 0; 
    public static void main(String[] args) 
    { 
     BasicCounter cnt = new BasicCounter(); 
     cnt.up(); 
     cnt.down(); 
     System.out.printf("The value is %d", cnt.counterVariable); 
    } 

    public void reset() { 
     this.counterVariable = 0; 
    } 

    public int value() { 
     return this.counterVariable; 
    } 

    public void up() { 
     ++this.counterVariable; 
    } 

    public void down() { 
     --this.counterVariable; 
    } 
    } 

Реализация ResetableCounter называется SquareCounter, которая начинается со значения 2, подсчитывает путем возведения в квадрат его текущее значение, и отсчитывает путем извлечения квадратного корня из его текущего значения (всегда округляется, т.е. 1.7 округляется до 2, точно так же, как 1,2 округляется до 2).

Вот что я сделал:

public class SquareCounter implements ResetableCounter { 
int counterVariable = 2; 
public static void main(String[] args) { 
    SquareCounter cnt = new SquareCounter(); 
    cnt.up(); 
    cnt.down(); 
    double d = Math.ceil(cnt.counterVariable); 
    System.out.printf("The value is %f", d); 
} 

public void reset() { 
    this.counterVariable = 0; 
} 

public int value() { 
    return this.counterVariable; 
} 

public void up() { 
    Math.pow(this.counterVariable, 2); 
} 

public void down() { 
    Math.sqrt(this.counterVariable); 
} 
} 

Реализация ResetableCounter называется FlexibleCounter, что позволяет клиентам указать начальное значение, а также приращение аддитивного (используется для подсчета вверх) при создании счетчика. Например, новый FlexibleCounter (-10, 3) даст счетчик с текущим значением -10; после вызова up() его значение будет равно -7.

Я не понял этого.

Все ваши реализации должны быть сброшены, и каждый из них должен содержать основной метод, который проверяет, работает ли реализация как ожидалось, используя assert, как мы это делали в лекции (это простой подход к модульному тестированию, о котором мы поговорим больше позже).

Я НУЖДАЮСЬ КОММЕНТАРИИ НА МОЕЙ РАБОТЕ ТАК ДАЛЬШЕ. ВЫ ДУМАЕТЕ ЭТО ПОЛОЖЕНИЯ? КАК РАБОТАЮТ С СБЫВАНИЕМ? Я ОЧЕНЬ НОВЫЙ ДЛЯ ДЖАВЫ, И ЭТО ДОЛГО ДАЛЬШЕ, ЧТО Я СДЕЛАЛ C++.

+0

Где у вас проблемы? или вы хотите просмотреть код? – nachokk

+0

@nachokk, я хочу, чтобы обзор кода ... и гибкий коннектор в конце, я еще не понял. – stburnish

+1

ну, на самом деле это не сайт для отзывов о кодах. – redFIVE

ответ

1
  1. Расширение
    SquareCounter может продлить ResetableCounter, ResetableCounter Тогда как можно расширить SimpleCounter. Выгода будет заключаться в том, что вам не нужно будет переопределять такие методы, как reset(); или value();.

  2. Резьбонарезной Safetiness
    Если вы собираетесь иметь ваши классы используются в несколько раз, что вам нужно, чтобы эти методы синхронизации, или работать на AtomicInteger. В противном случае вы могли бы одновременно использовать два потока up(), но вернули старое значение в одном случае.

  3. Основной класс
    У вас нет основного класса в классе счетчиков. Имейте отдельный файл .java для этого метода.

1

Что сказал Бен о расширении, безусловно, хорошая идея, хотя интерфейс ResettableCounter фактически может расширить интерфейс счетчика тоже, а затем сброс() будет единственным новым способом вам нужно объявить в интерфейсе ResettableCounter.

Смежные вопросы