2014-11-25 4 views
0

그래서 두 번째 질문에 값을 입력하면 프로그램이 멈추고 아무 일도 일어나지 않습니다. 첫 번째 질문에 대한 값을 입력 한 다음 두 번째 질문에 대해 잘못된 값을 입력 한 다음 프로그램에서 취소하려고 시도하면 내 표시 방법이 제공됩니다 (값이 허용되지 않으면 안됨).값을 가져 오지 않았습니다

내 프로그램에서 무슨 문제가 있습니까?

while (invalidInput) { 
     //Try...catch block to find any input errors for the number. 
     try { 
      finalNum = JOptionPane.showInputDialog(null, 
        "Please enter a number between 1 and 20", 
        "The Word Factory", JOptionPane.QUESTION_MESSAGE); 

      while (finalNum != null) { 
       finalNumber = Integer.parseInt(finalNum); 
       if (finalNumber > 20 || finalNumber < 1) { 
        JOptionPane.showMessageDialog(null, "The number you entered was not between 1 and 20." 
            + " \nPlease try again.", 
          "Input Error", JOptionPane.ERROR_MESSAGE); 
        finalNum = JOptionPane.showInputDialog(null, 
          "Please enter a number between 1 and 20", 
          "The Word Factory", JOptionPane.QUESTION_MESSAGE); 

        Part2 object = new Part2(finalString, finalNumber); 
        object.answer2 = finalString; 
        object.number2 = finalNumber; 
        object.display(); 
       } 
      } 
      invalidInput = false; 
     } catch (NumberFormatException ex) { 
      JOptionPane.showMessageDialog(null, "The number you entered was not between 1 and 20." 
          + " \nPlease try again.", 
        "Input Error", JOptionPane.ERROR_MESSAGE); 
     } 
    } 
+0

로직이 역방향 일 수 있습니까? 예상 입력과 출력을 예 – jgr208

+0

으로 알려주십시오. 잘못된 대답을 입력하면 if가 입력됩니다. – jgr208

+0

값이 유효하지만 else가없는 경우 while 루프에서 벗어나고 싶습니다. – jmluy

답변

0

논리를 수정하려고했습니다. 절대 빠져 나갈 방법이 없었기 때문에 당신은 무한 루프에있었습니다. 나는 유효한 숫자를 부울 값으로 만들어 이것을 수정했다. 또한 왜 외부 while 루프입니까? 그것은 이유없이 시간 복잡성을 증가시킵니다. 그래서 그것을 없애 버리고 if로 대체했습니다.

if (invalidInput) 
      finalNum = JOptionPane.showInputDialog(null, 
        "Please enter a number between 1 and 20", 
        "The Word Factory", JOptionPane.QUESTION_MESSAGE); 
      boolean valid = false; 
      while (valid == false) 
      { 
       finalNumber = Integer.parseInt(finalNum); 

       if(finalNumber > 20 || finalNumber < 1) 
       { 
        JOptionPane.showMessageDialog(null, "The number you entered was not between 1 and 20." 
        + " \nPlease try again.", 
        "Input Error", JOptionPane.ERROR_MESSAGE); 

        finalNum = JOptionPane.showInputDialog(null, 
        "Please enter a number between 1 and 20", 
        "The Word Factory", JOptionPane.QUESTION_MESSAGE); 

        Part2 object = new Part2(finalString, finalNumber); 
        object.answer2 = finalString; 
        object.number2 = finalNumber; 
        object.display(); 
       } 
      else 
       valid = true; 

      } 

     } 
+0

이것은 작동합니다. 그러나 0을 입력하면 오류 메시지가 나타나고 프로그램을 취소하려고하면 오류 메시지가 다시 나타납니다. <- 이것은 일어나지 않아야한다 –

+0

나는 그것이 당신의 잡기 때문에라고 생각한다. – jgr208

+0

설명해 주시겠습니까? –

관련 문제