关于参数和实例变量的混淆

时间:2016-03-06 20:15:35

标签: java eclipse methods

在我的班级玩家中,我有2种方法。在方法玩家中,我在我的主要活动中做了,所以我传递了弗雷德的名字和账单给我的球员战斗方法。我知道你应该把实例变量的参数值,比如我做的。但是,如果我打印player1和player2它会达到相同的结果,所以我很困惑为什么我们需要将它们设置为实例变量??

public class GameTime {
public static void main(String[]args){
    Players hockeyPlayer=new Players();
    hockeyPlayer.simpleMessage();
    hockeyPlayer.playersFight("fred", "bill");


  }

}



public class Players {
String name;

int number;
public void simpleMessage(){
System.out.println("This is another Class");
}
public void playersFight(String player1,String player2){
name=player1;
name=player2;
System.out.println(player1+" fights "+player2); 
}
}

1 个答案:

答案 0 :(得分:1)

据我所知,您的代码和简要说明中没有使用'名称'实例变量。因此,您可以删除它和两行:

name = player1;
name = player2;

然而,只有在你的“玩家战斗”结束时才使用打印声明时才会这样做。方法

在我看来(如果我错了,请纠正我),你想要使用' playersFight'打印出来的方法" fred fights bill。"您似乎也希望稍后重新打印该消息,因此您有一个名字'实例变量应该等于该语句," fred fights bill,"这样您以后可以重用该字符串连接,而无需将变量重新输入为参数

在这种情况下,您的代码错误,因为您将名称设置为播放器1,然后将其重新分配给播放器2。你应该做的是改变这个:

name = player1;
name = player2;

进入这个:

name = player1 + "fights" + player2;

并让您的System.out成为:

System.out.println(name);

您使用实例变量的原因是您可以保留该名称并在您想要的任何功能中打印多次,而无需重新参数。实际上,最好的方法是从你第一次实例化你的玩家时获取名字。宾语。为此,您需要一个输入名称的构造函数。您可能还希望稍后更改名称,因此需要更改名称方法(类似于构造函数)。此外,由于您不会在课堂外调用名称和数字变量,因此您应该将它们公之于众。这些变化将如下所示:

public class GameTime {
    public static void main(String[]args) {
        // First players "Fred" and "Bill"
        Players hockeyPlayer = new Players("fred", "bill");
        hockeyPlayer.simpleMessage();
        hockeyPlayer.playersFight();

        // New players "Amy" and "Sam"
        hockeyPlayers.changePlayers("amy", "sam");
        hockeyPlayer.simpleMessage();
        hockeyPlayer.playersFight();
    }
}

public class Players {
    private String name;
    private int number;

    public Players(String player1, String player2) {
        name = player1 + " fights " player2;
    }

    public void changePlayers(String player1, String player2) {
        name = player1 + " fights " player2;
    }

    public void simpleMessage(){
        System.out.println("This is another Class");
    }

    public void playersFight() {
        System.out.println(name); 
    }
}