2013-05-10 2 views
1

저는 컴퓨터 과학을 처음 배우는 학생으로 임의로 생성 된 자동차 물체를 움직여 도시지도 격자에서 무작위로 생성 된 주차장으로 움직이는 프로젝트를 완료해야합니다. 단추, 텍스트 필드 및 텍스트 영역에 대한 GUI를 개발했습니다. 애니메이션이 끝날 때를 제외하고는 모든 것이 작동합니다. 모든 자동차가 주차 지점에 도달했을 때 JTextArea에 분석을 표시해야합니다. 내 버튼이 제대로 설정하고 코드가 아래에 발생 어디을 보여줍니다 : 내가 애니메이션을 시작하는 버튼을 "시작"액션 리스너를 구현 한 그래서 여기ParkingSimulation while loop crisis

else if (e.getSource() == start) { 

    setAnimate(true); 

    if(simulator.simulationFinished()) { 
     createAnalytics(); 
    } 

    } 

. 현재 :

  1. 현재 애니메이션이 시작되고 모든 자동차가 의도 한대로 주차 장소로 이동합니다.
  2. (애니메이션에는 자동차 ID, 이동 횟수, 평균 스폿 시도 횟수, 평균 이동 거리)
  3. 애니메이션이 시작되기 전에 파생 된 애널리틱스가 표시됩니다.
  4. 다시 시작 버튼을 누르면 적절한 분석이 표시됩니다.

나는 권리 분석을 프로그램이 내가 가장 가능성이 while 루프를 필요로 완료하는 순간을 표시 할 수있는 프로그램의 순서, 그러나 나는 무한 루프를 만들 것까지 어떤 꿈을 할 수 없었던 것을 알고있다 콘솔을 통해 프로그램을 수동으로 종료해야합니다.

while(!simulator.simulationFinished()) { 
    if(simulator.simulationFinished() == true)break; { 
    createAnalytics(); 
    } 
    } 

나는 또한 존재하는 모든 루프의 수백 가지 변형 중에서 시도해 보았습니다. 내 논리에서 다음과 같이 while 루프가 필요하므로 시뮬레이션이 끝났는지 확인하여 분석을 생성하는 내 메서드를 실행할 수 있는지 확인하지만 while 루프를 수행하지 않을 경우 계속 수행 할 것입니다. 영원히 그리고 충돌. 내가 잃어버린, 어떤 도움을 주시면 감사하겠습니다. 감사.

답변

1

첫 번째로 : 아니요, while 루프가 필요하지 않습니다. 예를 들어 observer pattern을 대신 사용할 수 있으며 시뮬레이션이 끝나자 마자 오브젝트에 통지됩니다. 귀하의 질문에 관해서는 : 동안 if 분명히 불필요한입니다 (마찬가지로 == true입니다). 실제 문제는 simulator.simulationFinished()이 아닌 것 같습니다.이 true를 반환합니다. 그 함수의 코드와 코드 (그리고 그 반환 값에 직접적인 영향을 미치는 코드)를 게시 할 수 있습니까?

1

세부 정보없이 진행하면 while 루프에 심각한 문제가 있습니다.

simulator.simulationFinished()false 인 경우 루프됩니다. 그러나 루프 내에서는 반대가 있는지 확인합니다. 절대로 발생하지 않습니다.

어떤 종류의 리스너를 사용하는 것이 좋지만, 필자에게 더 이상의 조언이 필요하지는 않습니다.