Java 问题,在线急求

本帖由 小小清风9 天前 发布。版面名称:求学深造

随便看看 小小清风的其它帖子 发新主题 回复主题
  1. 小小清风

    小小清风 园友

    注册:
    2007-05-03
    帖子:
    2,285
    赞:
    644
    用java写个飞船程序。两个飞船A,B,一个太阳系,包括9个星球。
    问题是,A,B在9个星球间交替move,每移动一次记住自己的currentPosition,下次接着出发。
    问题是,A,B用同一个method(moveTo)交替进行,那currentPosition不就是变的了吗?
    比如第一步:A从地球到水星,那currentPosition=水星。
    第二步:B从地球到木星,那currentPosition=木星。
    第三步:A应该从水星出发,可是currentPosition已经=水星了,所以报错。
    飞船的constructor里没有currentPosition,但是attribute里有。
    如何解决?
     
  2. popiston

    popiston 活跃园友

    注册:
    2006-06-13
    帖子:
    7,018
    赞:
    2,352
    所在地:
    Barrie欢迎你
    Current position应该设置为飞船类的一个属性。move to 是method.
    A B 各是一个飞船类的实例。
    你改变的是实例的位置,互相不会影响。
    A.Current position
    B.Current position

    Current position可以设计为一个enum, 列出那些行星。
     
    popiston, 通过 家园移动版发帖, 9 天前
    #2
    已获得ahctasdfg12345678小小清风另外1人的赞。
  3. 小小清风

    小小清风 园友

    注册:
    2007-05-03
    帖子:
    2,285
    赞:
    644
    public classGame {
    private Spaceship A;
    private Spaceship B;

    A.moveto();
    B.moveto();

    A.moveto();
    B.moveto();
    }

    public class Spaceship {
    private Planete currentPlanet;
    private name

    public Spaceship(String name){
    }

    public void moveto{
    ...find currentplanet;
    ....move to next planet;
    ...save currentplanet;
    }
    大概这个意思,就是没明白怎么能把currentplant跟spaceship捆绑起来
     
    已获得xchn818的赞。
  4. 小小清风

    小小清风 园友

    注册:
    2007-05-03
    帖子:
    2,285
    赞:
    644
    实际上还有个Planet class, 列出9个行星的名字。
     
  5. popiston

    popiston 活跃园友

    注册:
    2006-06-13
    帖子:
    7,018
    赞:
    2,352
    所在地:
    Barrie欢迎你
    代码看上去正确。
    再调试下吧

    A.moveto();前后可以检查A.Current Planet. 属性已经是私有,不是他俩值混的原因。
     
    popiston, 通过 家园移动版发帖, 9 天前
    #5
    已获得小小清风的赞。
  6. 小小清风

    小小清风 园友

    注册:
    2007-05-03
    帖子:
    2,285
    赞:
    644
    public class SpaceGame{

    private Spaceship A;
    private Spaceship B;

    public SpaceGame(String name){
    ArrayList<Planet> planets = FileIO.loadPlanets("sol.txt");
    Spaceship.setPlanets(planets);

    Spaceship s = new Spaceship();
    String playerName = A.getName();
    s.setName(playerName);
    String firstPlanetName = planets.get(0).getName();
    s.moveTo(firstPlanetName);

    Spaceship s = new Spaceship();
    String playerName = B.getName();
    s.setName(playerName);
    String lastPlanetName = planets.get(8).getName();
    s.moveTo(lastPlanetName);


    public class Spaceship{
    private String name;
    private Planet currPlanet;

    public void moveTo(String name){
    int x = Planet.findPlanet(name,Spaceship.planets);
    String Name = getName();

    Planet currPlanet = planets.get(x);
    String currName = currPlanet.getName();
    System.out.println("Spaceship " +Name +" moved to " + currName);
    setCurrPlanet(currPlanet);
    }
     
  7. 小小清风

    小小清风 园友

    注册:
    2007-05-03
    帖子:
    2,285
    赞:
    644
    已经熬了三个晚上了,卡在这里了,大侠救命:wdb7:
     
  8. dennistan2009

    dennistan2009 园友

    注册:
    2009-11-02
    帖子:
    1,435
    赞:
    780
    别把currentPosition设置成静态变量就好了。
     
    已获得小小清风的赞。
  9. 小小清风

    小小清风 园友

    注册:
    2007-05-03
    帖子:
    2,285
    赞:
    644
    没有设静态啊
    private Planet currPlanet;

    我觉得是我引用的不对,可是不知道怎么引用
    Spaceship s = new Spaceship();
    System.out.println(s.currPlanet);
    这样写不成功
     
  10. kakalin

    kakalin 园友

    注册:
    2012-06-06
    帖子:
    70
    赞:
    2
    Java程序员改作C#了。忘记怎么写了。
    public interface SomeBehaviourAndProperty{
    public int position;
    public void move();

    }

    public abstract class Star implements SomeBehaviourAndProperty{
    public void move(){
    //do some common
    }
    }

    public class Solar {
    private Earth earth;

    }

    public class Earth extends Start{
    public Earth(){
    }
    public void move(){
    super.move();
    //some special move
    }
    }

    public class Moon extends Start{
    public Moon(){
    }
    public void move(){
    super.move();
    //some special move
    }
    }
     
    已获得小小清风的赞。
  11. kakalin

    kakalin 园友

    注册:
    2012-06-06
    帖子:
    70
    赞:
    2
    你的AB的运行轨迹需要记录下来,放到公众变量里面去。
     
  12. popiston

    popiston 活跃园友

    注册:
    2006-06-13
    帖子:
    7,018
    赞:
    2,352
    所在地:
    Barrie欢迎你
    这个设计有点问题
    Array是reference type. 两个地方改动,会冲突,不要改动它。
    你要给AB分别一个位置数字,用数字去决定planet名字就可以了。
     
    最后编辑: 9 天前
    popiston, 通过 家园移动版发帖, 9 天前
    #12
    已获得小小清风的赞。
  13. fieldmarshal

    fieldmarshal 活跃园友

    注册:
    2009-09-16
    帖子:
    3,311
    赞:
    1,605
    这孩子看的让人着急啊
     
    fieldmarshal, 通过 家园移动版发帖, 9 天前
    #13
  14. 小小清风

    小小清风 园友

    注册:
    2007-05-03
    帖子:
    2,285
    赞:
    644
    没懂:wdb5:
    能写个例子吗
     
  15. 小小清风

    小小清风 园友

    注册:
    2007-05-03
    帖子:
    2,285
    赞:
    644
    急啊,三个晚上2点睡了。:wdb7:
     
  16. popiston

    popiston 活跃园友

    注册:
    2006-06-13
    帖子:
    7,018
    赞:
    2,352
    所在地:
    Barrie欢迎你
    private Planete currentPlanet
    大概改成private int currentPlanet
     
    popiston, 通过 家园移动版发帖, 9 天前
    #16
    已获得小小清风的赞。
  17. lkkkkk

    lkkkkk 园友

    注册:
    2005-06-25
    帖子:
    945
    赞:
    72
    多想帮你,可惜不会写code:wdb10:
     
    已获得小小清风的赞。
  18. popiston

    popiston 活跃园友

    注册:
    2006-06-13
    帖子:
    7,018
    赞:
    2,352
    所在地:
    Barrie欢迎你
    比很多学生强 哈哈
     
    popiston, 通过 家园移动版发帖, 9 天前
    #18
  19. 小小清风

    小小清风 园友

    注册:
    2007-05-03
    帖子:
    2,285
    赞:
    644
    A Planet which is where the spaceship is (the current planet)
    好像不能改,有要求
     
  20. 小小清风

    小小清风 园友

    注册:
    2007-05-03
    帖子:
    2,285
    赞:
    644
    那就帮我哭吧:wdb7: