Java-涉及对象和多个类

时间:2014-10-18 14:53:31

标签: java class object methods

我的问题是getTime();命令,你需要所有的速度,处理,xcord,ycord和terrainDifficultry变量来得到答案,但我只能调用getTime();来自mb1类。基本上,当我到达System.out getTime()并且我不知道如何解决它时,我一直得到0.0。

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;
    }
}

2 个答案:

答案 0 :(得分:0)

查看moonbuggy类中的这部分代码(请注意,按照惯例,类应始终以java中的大写字母开头)。

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

您在没有任何参数的情况下实例化MoonLocation,然后使用getTime方法访问它。这解释了为什么在调用getTime时总是得到0.0的结果。

现在将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

答案 1 :(得分:0)

问题在于您的代码。首先,您将在main()方法下的Main_MoonRace类中创建MoonLocation的对象:

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

这里,使用xcord,ycord和terrainDifficulty值创建并初始化MoonLocation的对象。

现在,在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;
    }
}

和main()方法中的一个add:

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

现在,您将获得正确的输出