Переменная возвращается не обновленной из метода

#java #methods

#java #методы

Вопрос:

Итак, я пишу короткий код, который перемещает «прямоугольник» вправо. Эта часть работает хорошо. Затем я хотел посмотреть, сколько «шагов» делает это поле, пока не остановится. Итак, println должен вывести размер консоли и количество шагов. Но она выводит «ноль».

  import acm.program.*;
 import acm.graphics.*;

public class animation extends GraphicsProgram{

public void run(){
    int x=0;
    GRect box = new GRect(50,50);
    add(box, 10,10);
    moveBox(box, x);
    println(getWidth()   ", "   x);
}

public int moveBox(GObject box, int x){
    while(true){
        box.move(10,0);
        pause(50);
        x  ;
        if (box.getX()==getWidth()) break;
    }
    return x;
}

}
  

Комментарии:

1. Возможно, вам следует прочитать что-нибудь о примитивных типах .

Ответ №1:

Вы возвращаетесь x внутрь метода, но отбрасываете его из вызывающего объекта. Переназначьте ее в x переменную вашего вызывающего объекта

 x = moveBox(box, x);
  

Комментарии:

1. Спасибо! Действительно, теперь она показывает 19 шагов =) Таким образом, «return» выполняет не всю работу. Я также должен исправить возвращаемую переменную, верно? Еще раз спасибо

2. @user3349993 x in run и x in moveBox совершенно не связаны (в том смысле, что изменение одного не влияет на другое).

3. я знаю. Я, хотя и переименовал переменные в run() в «шаги», но, по-видимому, забыл это сделать. Я задавал задание типа «шаги = moveBox(box, x)». Но в любом случае. Спасибо

4. @user О, возвращаемое значение в основном действует как значение разрешения исключения при вызове метода. Если вы ничему ее не присваиваете, вы просто отбрасываете ее, и она удаляется из стека.

Ответ №2:

 return x;
  

просто скажу — я возвращаю значение из этого метода.

но вызывающий объект должен получить возвращаемое значение.

итак, чтобы получить возвращаемое значение, мы должны присвоить возвращаемое значение некоторой переменной.

 x = moveBox(box, x);
  

теперь x в левой части = будет иметь возвращаемое значение.

если мы просто напишем moveBox(box, x); так, то значение возвращается, но никто его не получил.

Комментарии:

1. да, я понял. Это то, о чем я спрашивал у Сотириоса Делиманолиса. Спасибо за ответ!

Ответ №3:

Вы вызываете, moveBox(box, x); который возвращает значение, но у вас нет ничего, что могло бы перехватить значение, выдаваемое из метода moveBox либо вы можете сделать что-то вроде

 int moves = moveBox(box, x);
System.out.println("Movements : " moves);
  

или

 System.out.println("Movements : " moveBox(box, x));
  

Комментарии:

1. да, я понял это из предыдущих ответов. В любом случае спасибо!