2013-12-01 2 views
0

Я пишу код Java с отображением гистограммы осадков (в миллиметрах) в дни от 0 до 6, т.е. день0 - понедельник и день6 - воскресенье. Код я написал для среднего количества осадков в течение 7 дней следующие:Булевое выражение - Java

    public float averageRain() { 
        int d;         
        float total = 0.0f;       
        for (d = 0; d < days; d++) 
        total=total + rain[d];     
        return(total/days); 
       } 

Но я в тупик о том, как решить следующее: Если ввести номер дня, который меньше 0 или больше 6 , вы получите сообщение об ошибке. Моя задача - изменить метод, называемый «addRain», чтобы проверить, находится ли день в диапазоне (то есть 0 или больше, но меньше, чем в постоянные дни). Если день действителен, добавьте RAINFALL в общую сумму за день и верните true. В противном случае верните false. Таким образом, когда я запускаю программу, недопустимые дни игнорируются. Кроме того, я должен изменить код, чтобы НЕГАТИВНЫЕ значения осадков (например, -3 мм) НЕ принимались. Может ли кто-нибудь сказать мне, как решить этот вопрос? Все, что я сделал до сих пор это:

   public boolean addRain(int day, float rainfall) { 
        rain[day] += rainfall;      
        return(true); 
       } 
+0

Тег, который вы выбрали, 'boolean', является неадекватным описанием этого вопроса. На самом деле этот вопрос не имеет ничего общего с булевыми выражениями. – scottb

+0

Просто идет, чтобы показать, насколько рудиментарны мои навыки Java, я думаю! – user2975787

ответ

1

days Я предполагаю, что это константа со значением 7. Замените его:

private static final int DAYS_IN_WEEK = 7; 

Вы хотите просто игнорировать недопустимое число дня или значение дождя? Это интерактивная программа? И хотите ли вы, чтобы люди в день доходили до значений дождя в течение одного дня? Я вижу, что кто-то входит 10mm в среду, а затем пытается его исправить и введите 5mm. В настоящее время нет никакого способа сделать это. Если вы знаете, как использовать исключение, вы можете иметь свой метод бросить java.lang.IllegalArgumentException и сообщить об этом пользователю, чтобы он мог попробовать снова:

public void setRainForDay(int day, float rainfall) { 
    if (day < 0 || day >= DAYS_IN_WEEK) { 
     // Throw an IAE. 
    } 
    if (rainfall < 0.0f) { 
     // Throw an IAE. 
    } 
    rain[day] = rainfall; // Set, not add. 
} 

Вызывающих рутинных уловы ИАЭ, сообщает об этом пользователю, и пользователь может попробовать еще раз.

Качели

Я не понял, что приложение должно было быть приложением свинг. В этом случае бросание исключений не является подходящим методом. Вместо этого нужно иметь класс модели , который хранит данные, и один хочет иметь классы вида, и один хочет иметь классы контроллера , которые выполняют фактическую работу. И, один хочет использовать PropertyChangeListener s и VetoableChangeListener s. Когда вы вводите -10 в осадок JFormattedTextField, он отправляет событие смены свойств контроллеру, а потом должен отказаться от установки класса модели, вместо этого наложив вето на изменение. На самом деле, будет проще писать и применять InputValidator. Лучше не давать пользователю возможность ошибиться.

+0

Эрик, спасибо за ответ. Извините, я должен был быть немного понятнее, это интерактивная программа («public class Rain extends JFrame реализует ActionListener»), где основная программа «Дождь» вызывает методы, и есть JButtons, такие как DriestDay и AverageRainFall и т. Д. Попробуй попробовать. Еще раз спасибо. – user2975787

+0

Я не понимал, что это приложение Swing. Тогда есть более подходящий способ. Я отредактирую. –

+0

Эрик, спасибо за отзыв о InputValidator. Сейчас я читаю об этом, чтобы узнать, как это можно применить к моей программе. Очень признателен. – user2975787

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