#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
inrun
иx
inmoveBox
совершенно не связаны (в том смысле, что изменение одного не влияет на другое).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. да, я понял это из предыдущих ответов. В любом случае спасибо!