【问题标题】:Confusion regarding parameters and instance variables [duplicate]关于参数和实例变量的混淆[重复]
【发布时间】:2016-03-06 20:15:35
【问题描述】:

在我下面的班级球员中,我有 2 种方法。在我的主要活动中的方法 playerFight 中,我将名称 fred 和 bill 传递给我的玩家战斗方法。我知道您应该像我一样将参数值传递给实例变量。但是,如果我打印 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 个实例变量,因为您要覆盖第一个分配。实例变量用于保存信息以备后用。在您的程序使用 playersFight 完成后,它仍然保持该值
  • 哦,那么在需要实例变量的情况下,什么是一个很好的例子?
  • 您应该将 Java 对象视为真实的对象或概念,其中实例变量构成对象/概念的状态。你的 Players 类似乎没有代表任何具体的东西。但是您可能会想像一个包含 GameTable 列表的 CasinoRoom,其中每个 GameTable 将有两个 Player,每个 Player 都有一个名称和一个分数。然后,您可以询问每个 GameTable,谁是两个玩家的赢家。您可以向 CasinoRoom 询问得分最高的玩家的姓名。等等。你问对象的所有这些问题都是方法,即来自状态的信息。

标签: java eclipse methods


【解决方案1】:

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

name = player1;
name = player2;

但是,这仅适用于您仅在“playersFight”方法末尾使用 print 语句的情况。

在我看来(如果我错了,请纠正我),您想使用“playersFight”方法打印出“fred Fights bill”。您似乎还想稍后重新打印该消息,因此您有一个“名称”实例变量应该等于该语句“fred Fights bill”,以便您可以稍后重用该字符串连接,而无需重新输入您的变量为参数

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

name = player1;
name = player2;

进入这个:

name = player1 + "fights" + player2;

让你的 System.out 成为:

System.out.println(name);

您使用实例变量的原因是您可以保留该名称并在您想要的任何函数中多次打印它,而无需重新获取参数。确实,最好的方法是从您第一次实例化“播放器”对象时获取名称。为此,您需要一个输入名称的构造函数。您可能还想稍后更改名称,因此需要一个更改名称方法(类似于构造函数)。此外,由于您不会在他们的类之外调用 name 和 number 变量,因此您应该将它们公开。这些更改将如下所示:

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

【讨论】:

    猜你喜欢
    • 2014-10-27
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    相关资源
    最近更新 更多