0

Java-новичок здесь. У меня несколько кратных циклов. Все разделились, думая, что он просто опустится до тех пор, пока условие while не станет истинным. То, что мой вывод предлагает, состоит в том, что он делает первый цикл while, который находит true, а затем выходит, не глядя на других. Пожалуйста, сообщите, если есть лучший способ сделать это, или если вы видите очевидную ошибку. Образец вывода из (xCar = 3, yCar = 3) и Destination = (1,1) - это просто «запад» «Запад». Должно быть 2 «Юг». * Пожалуйста, извините заявления печати, я пытался отлаживать то, что он делал. Я должен также указать, что я могу только переместить «автомобиль» на одно место, после чего нужно сообщить направление назад.Хотя цикл с несколькими условиями в java

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

То, что происходит это:

В своем первом время loop вы вызываете свой метод 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

Вот оно. Я добавил инструкцию print после всех операторов if в nextMove(), чтобы узнать, в каких местах. Я заметил, что он увеличивал как X, так и Y, но только сообщал о первом. Огромное спасибо. Я чувствую себя идиотом. Теперь имеет смысл, что вы это видите. Еще раз спасибо. –

1

Я бы не стал создавать новый класс здесь. Вам нужен только способ перемещения, который можно создать в том же файле, что и основная функция. Если вы действительно хотите, чтобы класс переместил автомобиль, вам нужно объявить его правильно. Помните, что для класса требуется публичный, закрытый и конструктор, а также все методы, которые может выполнять класс. Было бы также легко установить движущиеся методы внутри класса автомобиля, так как часть класса автомобиля должна содержать местоположение объекта автомобиля. Я не знаю, хотите ли вы, чтобы он перемещался по экрану или просто менял местоположение. Если вы хотите перемещаться по экрану, то будут работать петли while. Но если все, что вам нужно, это изменение местоположения, тогда было бы гораздо легче изменить приватную переменную, содержащую местоположение автомобиля; будет легче кодировать и запускать, так как оценка булевых вычислений требует значительного количества времени вычисления. Удачи. Дайте мне знать, если вы ничего не поняли.

+0

Спасибо. Это имеет смысл по большей части. Это для проекта класса, и мы должны использовать предварительно сгенерированный класс. Самая сложная часть этого проекта заключается в его создании в рамках предоставленной структуры/базы. :) –