0

자바 초보자는 여기에 있습니다. 루프가 여러 개 있습니다. 모든 분리 된 생각은 while 조건이 참일 때까지 순서대로 내려갈 것이라고 생각합니다. 내 결과물에서 제시하는 것은 처음 발견되는 루프가 실제로 발견되어 다른 것들을 보지 않고 종료된다는 것입니다. 이 작업을 수행하는 더 좋은 방법이 있는지 또는 명백한 오류가있는 경우 조언하십시오. (xCar = 3, yCar = 3) 및 Destination = (1,1)의 샘플 출력은 단지 "West" "West"입니다. 2 개의 "South"가 있어야합니다. * 인쇄 진술을 변명해라, 내가하고 있던 일을 디버깅하려했다. 또한 나는 '차'한 곳을 움직여 방향을 다시보고해야한다고 지적해야한다. 첫 번째 반면에while 루프에서 여러 조건이있는 루프

:

if (car.getLocation().equals(car.getDestination())){ 

     System.out.println("inside this if statement"); 
     System.out.println(car.nextMove().NOWHERE); 
     } 


//Seeing if Xcar is greater than Xdest. If so moving west  
    while (car.getxCar() > xDestination){ 
     System.out.println("2nd if statement"); 
     System.out.println(car.nextMove().WEST); 
    } 
//Seeing if Xcar is less than Xdest. If so moving east  
    while (car.getxCar() < xDestination){ 
     //System.out.println("3rd"); 
     System.out.println(car.nextMove().EAST); 

    } 
//Seeing if Ycar is greater than Ydest. If so moving south 
    while (car.getyCar() > yDestination){ 
     System.out.println("4th"); 
     System.out.println(car.nextMove().SOUTH); 
    } 
//Seeing if Ycar is less than Ydest. If so moving north 
    while (car.getyCar() < yDestination){ 
     System.out.println("5th"); 
     System.out.println(car.nextMove().NORTH); 
    } 

방법 nextMove()는 클래스 방향의 열거를 호출은

public Direction nextMove() { 
     if (xCar < xDestination){ 
      xCar = xCar + car.x+ 1; 
      } 
     if (xCar > xDestination){ 
      xCar = xCar + car.x -1; 
     } 
     if (yCar < yDestination){ 
      yCar = yCar + car.y +1; 
     } 
     if (yCar > yDestination){ 
      yCar = yCar + car.y -1; 
     } 
     return null; 

는 출력 무슨 일이 일어나고 무엇

Car [id = car17, location = [x=3, y=3], destination = [x=1, y=1]] 
2nd if statement 
WEST 
2nd if statement 
WEST 
+0

출력을 표시하십시오. – zEro

+0

출력이 추가되었습니다 –

+0

무슨 일이 일어나고 있는지 더 잘 이해하기 위해 디버깅을 추가하여 각 이동 전후의 위치를 ​​출력 할 수 있습니다. –

답변

1

이있다 루프를 사용하여 nextMove() 메서드로 호출합니다. 이 방법은 첫 번째 루프에서 x와 y를 모두 증가시키기 때문에 다른 while 루프의 출력을 얻지 못하는 이유입니다. 입력 목적지를 [3,4]로 변경했다면 WEST, WEST, SOUTH의 출력을 얻어야합니다

nextMove() 메소드에서 한 번에 하나의 치수 만 증가하도록 수정할 수 있습니다 else if 이와같이

public Direction nextMove() { 
    if (xCar < xDestination){ 
     xCar = xCar + car.x+ 1; 
    } 
    else if (xCar > xDestination){ 
     xCar = xCar + car.x -1; 
    } 
    else if (yCar < yDestination){ 
     yCar = yCar + car.y +1; 
    } 
    else if (yCar > yDestination){ 
     yCar = yCar + car.y -1; 
    } 
    return null; 
+0

이것은 그 것이다. nextMove()의 모든 if 문 다음에 print 문을 추가하여 위치가 어디인지 확인했습니다. 나는 그것이 X와 Y를 증가 시키지만 첫 번째 것을보고한다는 것을 알아 차렸다. 정말 고맙습니다. 나는 바보처럼 느껴진다. 이제 당신이 그것을 보았던 것은 의미가 있습니다. 다시 한번 감사드립니다. –

1

나는 여기서 새로운 수업을 만들지 않을 것이다. main 함수와 동일한 파일에서 생성 할 수있는 이동을 수행하는 메소드 만 있으면됩니다. 클래스를 차를 옮기고 싶다면 올바르게 선언해야합니다. 클래스에는 공개, 비공개 및 생성자는 물론 클래스가 수행 할 수있는 모든 메서드가 필요하다는 것을 기억하십시오. 자동차 클래스의 일부가 자동차 객체의 위치를 ​​유지해야하기 때문에 자동차 클래스 내부에 움직이는 메소드를 두는 것도 쉽습니다. 나는 그것이 당신이 화면을 가로 질러 움직이거나 단지 위치를 바꾸길 원한다면 나는 모른다. 화면을 가로 질러 이동하려는 경우 while 루프가 작동합니다. 그러나 필요한 것은 위치를 변경하는 것이고 차의 위치를 ​​유지하는 개인 변수를 변경하는 것이 훨씬 쉬울 것입니다. 부울을 평가할 때 상당한 계산 시간이 소요되므로 코드 작성 및 실행이 더 쉬울 것입니다. 행운을 빕니다. 네가 아무 것도 이해하지 못했다면 알려줘.

+0

감사합니다. 그것은 대부분의 부분에서 의미가 있습니다. 이것은 클래스 프로젝트 용이며 미리 생성 된 클래스를 사용해야합니다. 이 프로젝트의 가장 힘든 부분은 제공된 프레임 워크/기반 내에 구축하는 것입니다. :) –

관련 문제