2011-03-07 2 views
0

아래 코드는 숫자를 두 번 입력하도록 요청합니다.사용자 입력이 두 번 묻습니다

public class Palindrome { 

    public static void main(String[] args) { 
    boolean x; 
    boolean display; 

    x = check(); 
    display = display(); 
    } 

    private static int getUserInput() { 
    int inputNumber = 0; 
    String answer = JOptionPane.showInputDialog(null, "Please enter a five digit number","Enter a number"); 
    inputNumber = Integer.parseInt(answer); 
    return inputNumber; 
    } 

    private static boolean check(){ 
    int inputNumber = getUserInput(); 
    int number = inputNumber; 
    int[] myArray = new int[5]; 

    for (int i = 0; i < myArray.length; i++) { 
     myArray[i] = (int) (number /(Math.pow(10,i)) % 10); 
    } 

    if(myArray[0] == myArray[4] && myArray[1] == myArray[3]) 
     return true; 
    else 
     return false; 
    } 

    public static boolean display(){ 
    if (check() == true) { 
     JOptionPane.showMessageDialog(null, "This number is a Palindrome", 
      "Excellent!", 
      JOptionPane.INFORMATION_MESSAGE); 
    } else 
     JOptionPane.showMessageDialog(null, 
      "Number is not a Palindrome!", 
      "Sorry", 
      JOptionPane.ERROR_MESSAGE); 
     return false; 
    } 
} 

한 번만 물어보고 싶습니다.

감사

+0

관련없는 메모에서'display' 메서드 내에서 'else' 블록에 중괄호가 없습니다. –

답변

1

가 먼저 호출하는 주요 기능에 체크()이다 : 당신은 그냥 주에서 디스플레이를 호출하면 디스플레이 기능

if(check() == true) 

에서

x = check(); 

후 다시 한 번 코드는해야 좋아.

+0

나는 그것이 단순한 것으로 알고있었습니다. 감사합니다. – Mike

4

당신이 (입력을 요청) 최상위 수준에 check() 전화 때문입니다,하지만 당신은 display()의 일환으로 다시check()를 호출합니다. 이 때문에 첫 번째 입력은 완전히 무시됩니다 (시도해보십시오. 두 번째 입력 만 메시지에 영향을 미칩니다). 통화 나무는 다음과 같습니다

main() 
|- check() 
| |- getUserInput(...) 
| | |- *(show input dialog)* 
| 
|-display() 
| |- check() 
| | |- getUserInput(...) 
| | | |- *(show input dialog)* 
| | 
| |- (show message dialog) 

나는 당신이 할 말은하는 것은 오히려 다시 메소드를 호출하는 대신 변수로 display()이전 실행 결과를 전달이라고 생각한다. 이것은 다음과 같이 보일 수 있습니다

public static void main(String[] args) { 
    boolean x = check(); // No real need to declare the variable separately 
    boolean display = display(x); 
} 

... 

public static boolean display(boolean check) { 
    if (check) { // P.S. no need to explicitly use the "== true" 
     ... 
    } else 
    ... 
} 

다른 방법으로, maincheck()에 대한 호출을 드롭 수 있으며, display 방법에서 일을합니다. 필자의 견해로는 "입력 받아들이 기"와 "출력 결과 표시하기"방법을 별도의 두 가지 방법으로 사용하는 것이 더 나은 프로그래밍 습관입니다. 입력을 처리하는 출력 메소드는 드문 경우가 아닌 시스템에서 악몽의 요소입니다.

2

display() 메서드는 check() 메서드를 두 번째 호출합니다.

1

check() 메서드를 두 번 호출했습니다. 매번 입력 대화 상자가 나타납니다.

관련 문제