2013-09-14 4 views
0

У меня возникают проблемы с вложением некоторых инструкций if-else, по крайней мере, это то, что я считаю проблемой. Я несколько раз пробовал этот код, пытаясь понять это, поэтому решил вернуть его в исходное состояние и попросить о помощи. Пользователю предлагается ввести нечетное число от 3 до 15. Мне нужно проверить этот ввод, а если он не находится между 3 и 15, выведите сообщение об ошибке. То же самое, если это не нечетное число, ему нужно вывести другое число. При запуске кода ниже, если я вводим четное число, букву или номер < 3 или> 15, я получаю оба сообщения об ошибках. Если входное значение нечетное от 3 до 15, оно работает нормально. Я знаю, что мне нужно различать две ошибки, просто не удалось выяснить, как это сделать и заставить код работать/работать правильно. Также попробовали еще, если не повезло. Конечно, это что-то глупое, так как большинство моих ошибок, похоже, на глупой стороне. Спасибо за вашу помощь!Проблема с вложенными операторами if-else

public static void main(String[] args) { 

    // Declare variables 
    String inputString; 
    boolean done = false; 
    int numRows = 0; 

    // Prompt for user input 
    do 
    { 
     inputString = JOptionPane 
      .showInputDialog("Enter number of rows (odd number between 3 and 15): "); 

     // Validating input 
     try 
     { 
      numRows = Integer.parseInt(inputString); 
     } 
     catch (NumberFormatException e) 
     { 
      done = true; 
     } 
     if(numRows % 2 == 0) // Validating input is an odd number 
      done = true; 
     if((numRows < 3) || (numRows > 15))// Validating input is between 3 and 15 
      done = true; 
     else 
      done = false; 

     if(done) 
      JOptionPane.showMessageDialog(null, "Error, not an ODD number. Re-enter odd number between 3 and 15", 
       "Error", JOptionPane.ERROR_MESSAGE);  

     if(done) 
      JOptionPane.showMessageDialog(null, "Error, number not between 3 and 15. Re-enter odd number between 3 and 15", 
       "Error", JOptionPane.ERROR_MESSAGE); 
     } 
    while(done); 
    } 
+3

Используйте фигурные скобки с if/else и сделайте вашу жизнь проще. –

+2

'if ((numRows <3) || (numRows> 15)) // Проверка ввода между 3 и 15' делает противоположное тому, что говорит комментарий – lreeder

+0

Я не понимаю, почему вы не ожидаете, что оба сообщения для печати, когда 'done' является истинным, когда вы явно печатаете оба из них. – Jsdodgers

ответ

4

Интересная вещь здесь, вам не нужны утверждения if. Вы можете значительно упростить (и исправить) свои булевы выражения.

Во-первых, давайте установим поведение (numRows < 3) || (numRows > 15). Чтобы это было так, либо numRows должно быть строго меньше 3 или строго больше 15. Это не проверяет диапазон чисел - вам нужно переключить это на инструкцию AND. Но даже просто это не подтверждает правильный диапазон - вы будете проверять все, что не между 3 и 15!

Чтобы исправить это, вам нужно перевернуть свои неравенства.

У вас теперь есть (numRows >= 3) && (numRows <= 15). Чтобы это было так, numRows должно быть между границами 3 и 15 включительно.

Теперь давайте объединить, что с проверкой на четное/нечетное, и вы прибудете на это:

done = (numRows % 2 == 0) || ((numRows >= 3) && (numRows <= 15)); 

Поведение этого утверждения, как, например:

  • Либо numRows четная номер, OR
  • numRows связан между 3 и 15 включительно.

У меня также есть некоторые мысли о вас совмещая JOptionPane заявления, а также, но это скорее вопрос представления, чем вопрос коды - я оставлю это в качестве упражнения для читателя.

+0

если я их совмещаю, как получить отдельное сообщение об ошибке для двух разных ошибок? Это моя проблема. Я могу обернуть все это в одно сообщение об ошибке, однако в зависимости от ошибки я должен иметь разные сообщения об ошибках. – Jim

+0

Если это отдельное сообщение об ошибке, то у вас есть отдельные булевы, управляющие каждым. 'done' является немного общим и чрезмерно используемым, поэтому, если у вас' isEven' и 'isBounded', то это даст вам то, что вам нужно. Вы должны назначить свои переменные в соответствии с вашими условиями. – Makoto

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