Поездка цикла While, не подчиняясь условно

Хорошие, я делаю код с двух отличных классов (два элемента *.java различные), в первом ('мяче') я устанавливаю признаки и методы:

public class Pelota {
 byte posX = 0;
 byte posY = 0;
 byte peso = 5;

     public Pelota(){
        this.posX = 0;
        this.posY = 0;
        this.peso = 5;}

 public void moverEnX() {
     this.posX = posX++;}
public void moverEnY(){
    this.posX = posY++;}}

Чтобы после открывать класс ('Main') в часть с того, чтобы которой создавать новый объект мяч, который двигал бы определенное число шагов,

public class MainPelota {
public static void main (String [] args){
    Pelota objeto1 = new Pelota();
    System.out.println("la posicion inicial de objeto1 es: " + objeto1.posX +"\n Hay un foso en la casilla 8");

    objeto1.posX = 0;

    while (objeto1.posX<8){
        System.out.println("La pelota avanza, ahora está en la posición" + objeto1.posX);

    objeto1.moverEnX();

    if (objeto1.posX>=8){
        System.out.println("La pelota se ha caído");}
        }
    }
}

Однако, выполнив единственное, что он делает, он состоит в том, чтобы печатать решение о цикле While неопределенно, без того, чтобы 'posX' он продвигался, я интуитивно чувствую, что проблема - во время выполнения метод 'moverEnX', но я не понимаю, почему оно не функционирует, если он способен соглашаться в 'posX' без проблемы.

0
задан 09.04.2016, 12:24
2 ответа

Проблема находится в функции moverEnX()

public void moverEnX() {
     this.posX = posX++;
}

Когда оператор ++ эта справа от переменной, увеличивает стоимость, но возвращает предыдущую стоимость, у которой была переменная... а именно, что, если он стоит 5, складывает один и меняет стоимость переменной в 6, но были в правую сторону, он возвращает 5. Потом оператор = устанавливает переменную в 5, так как то, что он получает.

Сказанный по-другому, posX изменись 6, но немедленно вновь меняйся 5.

Главным образом, никогда он не выходит из цикла, из-за которого с точки зрения while, posX никогда не меняйся.

Сейчас, как posX++ уже он делает ассигнование новой стоимости, нет необходимости это делать используя оператор =. Этого было бы достаточным:

public void moverEnX() {
     posX++;
}
1
ответ дан 24.11.2019, 14:37
  • 1
    Я понимаю, большое спасибо, имей и # 237; эксперт raz и # 243; n и правда состоит в том, что это было чем-то достаточно простым. – Pablo León 11.04.2016, 18:31
  • 2
    Ничего, не забывай пометить какой-то ответ как правильная привет – rnrneverdies 11.04.2016, 18:36
//Simplemente, cambia en los métodos eso y listo.

public class Pelota {

    byte posX;
    byte posY;
    byte peso;

     public Pelota(){
        this.posX = 0;
        this.posY = 0;
        this.peso = 5;
     }

    public void moverEnX() {
        posX++;

    }
    public void moverEnY(){
        posY++;
    }



    public static void main(String[] args) {
        Pelota objeto1 = new Pelota();
        System.out.println("la posicion inicial de objeto1 es: " + objeto1.posX +"\n Hay un foso en la casilla 8");


        while (objeto1.posX<8){
            System.out.println("La pelota avanza, ahora está en la posición: " + objeto1.posX);

            objeto1.moverEnX();

            if (objeto1.posX>=8){
                System.out.println("La pelota se ha caído");
            }
        }
    }
}
1
ответ дан 24.11.2019, 14:37

Теги

Похожие вопросы