2015-11-01 3 views
0

У меня возникла проблема при создании программы для решения простой кинематики.Сеттер не может изменить поле правильно

Я запустил программу и выяснил, что поля не были изменены должным образом. Вот отброс моей программы, который инициализирует объект и устанавливает переменные.

public class LinearConstantAcceleration1DKinematics { 
    private double distance; 
    private double speed; 
    private double acceleration; 
    private double time; 

    public LinearConstantAcceleration1DKinematics() { 
     /* initialize the object */ 
     distance = 0; 
     speed = 0; 
     acceleration = 0; 
     time = 0; 

    } 

    public void setS(double s) { 
     this.distance = s; 
    } 
    //continue with 3 more setters which is created in the same way ,i have omitted them here 

    public double getU(){ 
    double u_ans; 

    u_ans = (distance - 1/2 *acceleration*time*time)/time; 
    return u_ans; 
    } 



} 

А вот главное, что использует методы

LinearConstantAcceleration1DKinematics kinematics = new LinearConstantAcceleration1DKinematics(); 

    kinematics.setS(175); 
    kinematics.setA(10); 
    kinematics.setT(5); 
    System.out.printf(%f\n", kinematics.getU()); 

В результате получается 35, который incorrect.Many спасибо за вашу помощь.

+2

Можете ли вы опубликовать полный код? потому что System.out.printf (% f \ n ", kinematics.getU()); не компилируется и не существует setA() или setT() – Bon

+0

HaHaman, вы все еще не опубликовали полный код. –

ответ

3

Это не имеет никакого отношения к методам setter - ваше деление ошибочно, так как 1/2 делает int деление и возвращает 0, что приводит к вычислению уравнения просто distance/time.

Изменить на:

u_ans = (distance - 1.0/2.0 * acceleration * time * time)/time; 

Урок, чтобы узнать: не думайте, где ошибка - тест его. Используйте инструкции отладчика или println, чтобы проверить состояние переменных в вашей программе.

+0

Oh , спасибо большое. – HaHaman

+0

@HaHaman: добро пожаловать. –

+1

Хороший улов на целочисленном делении – Bon