2014-10-18 2 views
0

Моя проблема в том, что для getTime(); команды, вам нужны все параметры скорости, обработки, xcord, ycord и terrainDifficultry для ответа, но я могу только позвонить getTime(); из класса mb1. В основном, я получаю 0.0, когда я добираюсь до System.out getTime(), и я не знаю, как это исправить.Java- Вовлечение объектов и нескольких классов

import java.util.Scanner; 
public class Main_MoonRace { 

    public static void main(String[] args) 
    { 
     Scanner keyboard = new Scanner (System.in); 
     System.out.println("Enter the speed of the moonbuggy as an integer."); 
     int s = keyboard.nextInt(); 
     System.out.println("Enter the handling of the moonbuggy (between 0-0.9)"); 
     double h = keyboard.nextDouble(); 
     moonbuggy mb1 = new moonbuggy(s,h); 

     System.out.println("Enter the x-coordinate of where the moonbuggy will be headed to as an integer."); 
     int xcord = keyboard.nextInt(); 
     System.out.println("Enter the y-coordinate of where the moonbuggy will be headed to as an integer."); 
     int ycord = keyboard.nextInt(); 
     System.out.println("Enter the difficulty of the terrain that the moonbuggy will be experiencing (integer from 1-10)."); 
     int terrainDifficulty = keyboard.nextInt(); 
     MoonLocation mL1 = new MoonLocation(xcord,ycord,terrainDifficulty); 

     System.out.println(mb1.getTime()); 
    } 
} 

moonbuggy.java

public class moonbuggy {  
    private int speed = 1; 
    private double handling = 0; 
    moonbuggy(){ 
     return; 
    } 
    moonbuggy(int s, double h){ 
     speed = s; 
     handling = h; 

     return; 
    } 
    public void setSpeed (int s){ 
     speed = s; 
    } 
    public void setHandling (double h){ 
     handling = h; 
    } 
    public int getSpeed(){ 
     return speed; 
    } 
    public double getHandling(){ 
     return handling; 
    } 
    MoonLocation obj1 = new MoonLocation(); 

    public double getTime(){ 
     double time = (((obj1.getdistance())/(getSpeed()))*(obj1.getTerrain())*(1-(getHandling()))); 
     return time; 
    } 
} 

MoonLocation.java

public class MoonLocation { 
    private int x = 0; 
    private int y = 0; 
    private int terrain = 1; 

    MoonLocation(){ 
     return; 
    } 
    MoonLocation(int xcord, int ycord, int terrainDifficulty){ 
     x= xcord; 
     y = ycord; 
     terrain = terrainDifficulty; 

     return; 
    } 

    public void setX (int xcord){ 
     x = xcord; 
    } 
    public void setY (int ycord){ 
     y = ycord; 
    } 
    public void setTerrain (int terrainDifficulty){ 
     terrain = terrainDifficulty; 
    } 
    public int getX() { 
     return x; 
    } 
    public int getY() { 
     return y; 
    } 
    public int getTerrain() { 
     return terrain; 
    } 
    public double getdistance() { 
     double distance = Math.sqrt((Math.pow(x,2))+(Math.pow(y,2))); 
     return distance; 
    } 
} 
+3

Тот факт, что вы построения 'MoonLocation', а затем полностью игнорируя это указывает на проблему ... но вы на самом деле не задали вопрос, который затрудняет вам помощь ... –

+0

Вам необходимо предоставить код для moonbuggy – dave

ответ

0

Посмотрите на эту часть кода в вашем moonbuggy класса (обратите внимание, что в соответствии с соглашением класса всегда должен начинаться с верхнего регистра в java).

MoonLocation obj1 = new MoonLocation(); 
public double getTime(){ 
    double time = (((obj1.getdistance())/(getSpeed()))*(obj1.getTerrain())*(1-(getHandling()))); 
    return time; 
} 

создании экземпляра MoonLocation без каких-либо параметров, то доступ к нему в методе getTime. Это объясняет, почему вы всегда получаете 0,0 в результате при вызове getTime.

Теперь измените метод getTime к

public double getTime(MoonLocation location){ 
    return (((location.getdistance())/(getSpeed()))*(location.getTerrain())*(1-(getHandling()))); 
} 

Обратите внимание, что я удалил переменное время, поскольку это бесполезно укомплектовать там.

И изменения в основной

MoonLocation mL1 = new MoonLocation(xcord,ycord,terrainDifficulty); 
System.out.println(mb1.getTime()); 

Для

MoonLocation mL1 = new MoonLocation(xcord,ycord,terrainDifficulty); 
System.out.println(mb1.getTime(mL1)); 

Кроме того, пожалуйста, удалите неиспользуемый MoonLocation obj1 = new MoonLocation() в вашем moonbuggy классе.

0

Проблема заключается в вашем коде. В первую очередь, вы создаете объект MoonLocation в классе Main_MoonRace под основной() метод как:

MoonLocation mL1 = new MoonLocation(xcord,ycord,terrainDifficulty); 

Здесь объект MoonLocation создается и инициализируется значениями xcord, ycord и terrainDifficulty.

Теперь в вашем классе Moonbuggy, вы снова создаете объект MoonLocation как:

MoonLocation obj1 = new MoonLocation(); 

Здесь, только пустой объект класса MoonLocation создается.

Теперь, когда вы звоните:

obj1.getDistance(); It will return 0 only. 

Ниже приведен исправленный код для класса Moonbuggy.

public class Moonbuggy {  
    private int speed = 1; 
    private double handling = 0; 

    Moonbuggy(){} 

    Moonbuggy(int s, double h){ 
     speed = s; 
     handling = h; 
    } 
    public void setSpeed (int s){ 
     speed = s; 
    } 
    public void setHandling (double h){ 
     handling = h; 
    } 
    public int getSpeed(){ 
     return speed; 
    } 
    public double getHandling(){ 
     return handling; 
    } 

    private MoonLocation obj1; 

    public MoonLocation getObj1() { 
     return obj1; 
    } 

    public void setObj1(MoonLocation obj1) { 
     this.obj1 = obj1; 
    } 

    public double getTime(){ 
     double time = (((obj1.getdistance())/(getSpeed()))*(obj1.getTerrain())*(1-(getHandling()))); 
     return time; 
    } 
} 

и addtion в основной() метод:

MoonLocation mL1 = new MoonLocation(xcord,ycord,terrainDifficulty); 
     mb1.setObj1(mL1); // set the MoonLocation object 
     System.out.println(mb1.getTime()); 

Теперь, вы получите соответствующий выходной

Смежные вопросы