Java:在外部函数中设置对象变量

时间:2011-05-25 17:06:18

标签: java

    public static void main(String[] args) {

        Player Anfallare = new Player("A");
        Player Forsvarare = new Player("F");
        MotVarandra(Anfallare.getDice(1), Forsvarare.getDice(1));
    (...)
   }

我在main函数中有什么,现在我自己创建了函数,

public static void MotVarandra(int a, int f){
    if(f >= a){
        Anfallare.armees-=1;
    }else{
        Forsvarare.armees-=1;
    }
}

应该将对象的变量设置为 - = 1 ..但这不起作用,因为函数不知道Anfallare和Forsvarare是一个对象..

在这种情况下我该怎么办?

2 个答案:

答案 0 :(得分:5)

您需要将Player定义为类字段,而不是主方法内部。

对于Java的温和介绍,我建议你从这里开始阅读:

http://download.oracle.com/javase/tutorial/java/index.html

此外,这里有很棒的书籍建议:https://stackoverflow.com/questions/75102/best-java-book-you-have-read-so-far。其中一些书很适合开始学习。


此处示例:

public class Game {
  private static Player Anfallare, Forsvarare; //  <-- you define them here, so they are available to any method in the class

  public static void main(String[] args) {

    Anfallare = new Player("A");  //  <-- it is already defined as a Player, so now you only need to instantiate it
    Forsvarare = new Player("F");
    MotVarandra(Anfallare.getDice(1), Forsvarare.getDice(1));
    // ...
  }
  public static void MotVarandra(int a, int f){
    if(f >= a){
        Anfallare.armees-=1; //  <-- it is already defined and instantiated
    }else{
        Forsvarare.armees-=1;
    }
  }
}

答案 1 :(得分:2)

虽然Aleadam的解决方案是迄今为止最好的答案,但你可以做的另一件事就是更改函数的参数:

public static void MotVarandra(Player a, Player f){
    if(f.getDice(1) >= a.getDice(1)){
        f.armees-=1;
    }else{
        a.armees-=1;
    }
}

最终,您的最佳解决方案仅取决于您的计划正在做什么。可能是,这只是另一种看待它的方式。

作为旁注,请务必使用描述性命名技术,a和f稍微硬编码,只有在您的玩家只使用这些变量名称时才有意义。最好不要限制你的代码。