2010-09-28 3 views
-1

Для общедоступного void setValue (int newcount), как я могу сделать так, чтобы значение, которое посылает другая программа, используется для установки newcount? Также мне нужно сделать это: «Если новый счет < нуль или> maxValue, ничего не делайте».Проблемы с счетчиком Java

private int maxValue; 
    private int count; 

    /** 
    * Constructor for objects of class Counter 
    */ 
    public Counter(int maxValue) 
    { 
     maxValue = 0; 
    } 

    public void decrement() 
    { 
     if (count == maxValue) 
     { 
      count = maxValue;   
     } 
     else 
     { 
      --count; 
     } 
    } 

    public int getValue() 
    { 
     return maxValue; 
    } 

    public void increment() 
    { 
     if (count == maxValue) 
     { 
      count = 0;   
     } 
     else 
     { 
      ++count; 
     } 
    } 

    public void setValue(int newcount) 
    { 


    } 


    public String toString() 
    { 
     return "Counter{" + "maxValue=" + maxValue + '}'; 
    } 
} 
+0

Если это вопрос с домашней домашней страницей, пожалуйста, поставьте метки «домашняя страница» –

+0

В 'декремент()' Вы имели в виду: 'if (count == 0) count = maxValue;'? Кроме того, почему бы не использовать модульную арифметику? например 'count = (count + 1)% maxValue',' count = (count + maxValue - 1)% maxValue'. –

ответ

0
public void setValue(int newcount) 
{ 
    if(newcount >= 0 && newcount <= maxcount) 
    { 
     count = newcount; 
    } 
} 
1

Я немного запутался, что это делает:

public void decrement() 
{ 
    if (count == maxValue) 
    { 
     count = maxValue;   
    } 

Это, кажется, не быть на самом деле декремента значение. Фактически, поскольку count == maxValue, нет смысла устанавливать его.

+0

Да, возможно, это должно быть 'if (count == 0)'. Вероятно, конструктор должен быть 'this.maxValue = maxValue'. –

1

Это должно работать:

public void setValue(int newcount) { 
    if ((newcount < 0) || (newcount > maxValue)) 
    return; 
    counter = newcount; 
} 
+0

Ahh, тихие сбои. Именно то, о чем попросил ОП, но глупое требование ... возможно, лучше бросить здесь исключение IllegalArgumentException. –

+0

Есть ли причина, по которой лучше проверить отрицательные случаи (например, этот ответ) или проверить положительные случаи (например, мой ответ)? –

+0

@Mark Peters - да :-) Клиент отвечает за требования –

1

Ваш конструктор не делать то, что вы имели в виду это сделать:

private int maxValue; 

/** 
* Constructor for objects of class Counter 
*/ 
public Counter(int maxValue) 
{ 
    maxValue = 0; 
} 

Ваш код просто устанавливает свой аргумент в ноль, имя аргумента скрывает атрибут (и почему установить его в 0)

что бы работать, добавив JavaDoc линию @param, является:

private int maxValue; 

/** 
* Constructor for objects of class Counter. 
* @param newMaxValue The maximum counter value. 
*/ 
public Counter(int newMaxValue) 
{ 
    maxValue = newMaxValue; 
}