나는 당신의 질문에 대답하려고합니다,하지만 내 대답은 당신을 도울 것입니다 확인하기 위해 당신이 정말로 당신의 코드에 대한 충분한 정보를 제공하지 않습니다.
이
public class Clinic {
public String details;
public void details(String input) {
details = input;
}
}
내가주의 첫 번째 일이 JOptionPane.showInputDialog
에 전화 당신이 원하는 일을 할 나타나지 않는다는 것입니다 :
내 추측은 Clinic
클래스 이런 식으로 뭔가를 보이는 것입니다. 다시 말하지만, 나는 단지 당신이 원하는 정보가 무엇인지에 따라 추측하고 있습니다. 사용자가 두 개의 입력 중 하나를 묻는 대화 상자를 원한다고 생각합니다. "진행"의 경우 P 또는 "완료"의 경우 D 중 하나를 입력하십시오. 당신이 JoptionPane
를위한 JavaDoc를 보면 당신은 당신의 코드는 다음과 같이 표시하기 위해 대화를 일으키는 this method를 호출하는 것을 볼 수 있습니다 :
를 이제, 당신은 단순히이 대화와 Clinic
클래스에 확인을 클릭하면 위의 그림과 비슷하지만 details
필드는 "[D] one"로 설정되어 있습니다. 분명히 "D"와 같지 않으므로 루프가 끝나지 않습니다.
이에 details
메소드를 호출 라인 변경하는 경우 :
c.details(JOptionPane.showInputDialog("[P]roceed\n[D]one","D"));
당신은 당신이 원하는 것을 얻을 것이다 - 프롬프트는 다음과 같이 표시됩니다
과 OK를 누르면 루프가 끝납니다.
몇 가지 코드에 대한 고려 :
는
JOptionPane.showInputDialog
에 대한 호출은 사용자가 입력 한 텍스트를 반환합니다. 사용자가 취소를 누르면 루프가 c.details에 액세스하려고 할 때 java.lang.NullPointerException이 발생합니다 (위에서 설명한대로 Clinic
이 작동한다고 가정)
- 일반적으로 먼저
equals
비교를 상수를 사용하여 작성해야합니다 변수 second는 NullPointerException의 가능성을 피할 수 있도록합니다. 예를 들어, 코드에서 }while(!c.details.equals("D"));
은 }while(!"D".equals(c.details));
- 으로 변경됩니다. 일반적으로 클래스 필드를 공개하지 마십시오. 객체의 내부 데이터에 직접 액세스하면 코드를 유지 관리하기가 더 어려워 질 수 있습니다 (@Roland는 주석에 언급 된대로). 대신 getter 및 setter 메서드를 사용하십시오. this question에 대한 대답이 자세히 설명되어 있습니다.
'Clinic.details (String)'에 대한 코드를 제공해주십시오. 'details' 메쏘드와'details' 필드는 같은 것이 아니라는 것에주의하십시오. –
컴파일 할 코드를 제공하십시오 (끝에 불균형 괄호가 있음). – dasblinkenlight
Clinic 클래스의 숨겨진 세부 정보에 의존하지 않는 코드를 작성하는 것이 좋습니다. 코드가 제대로 작동하지만 유지 관리가 어려울 수 있습니다. – Roland