从一个类访问另一个类的成员

代码:


import java.util.*;

/*

TicTac Game

__X_|__O_|__X_

__O_|__X_|__O_

  X |  O |  X

*/

public class TicTac{

  public static void main(String[] args) {

    Welcome.greet();

    Game start = new Game();

    start.inputName();

    Welcome.greetPlayer();

    start.show();

  }

}

class Welcome{

  public static void greet(){

    System.out.println("\tTicTac Game By Abhi:");

    System.out.println("\t  __X_|__O_|__X_");

    System.out.println("\t  __O_|__X_|__O_");

    System.out.println("\t    X |  O |  X");

  }

  public static void greetPlayer(){

    Game call = new Game();

    System.out.println("Welcome " + " " + call.x + " and " + call.y + "\n" + "Have Fun!");

  }

}

class Game{

  public String x,y;

  public void inputName(){

    Scanner input = new Scanner(System.in);

    System.out.println("Enter your name Player 1:");

    String Player1 = input.nextLine();

    System.out.println("Enter your name Player 2:");

    String Player2 = input.nextLine();

    x = Player1;

    y = Player2;

  }

  public void show(){

    System.out.println("Hi " + " " + x + " and " + y);

  }

}

当我尝试调用Welcome.greetPlayer()时,它两次都给出了一个空值。但是每当尝试调用start.show时,它都会给我x和y的值。我想在欢迎类中访问字符串 x 和 y。


烙印99
浏览 183回答 4
4回答

慕斯王

问题是您正在使用两个不同的对象。第一个在方法中创建,第二个在方法中创建。您仅为方法中的对象初始化播放器名称。它们永远不会在第二个对象中初始化。Gamemain()greetPlayer()main()我假设您只想使用一个对象。一种解决方案是将对象传递给方法:GameGamegreetPlayer()public static void main(String[] args) {    Welcome.greet();    Game start = new Game();    start.inputName();    Welcome.greetPlayer(start);    start.show();}public static void greetPlayer(Game call){    System.out.println("Welcome " + " " + call.x + " and " + call.y + "\n" + "Have Fun!");}另一种选择是将名称直接传递给方法:greetPlayer()public static void main(String[] args) {    Welcome.greet();    Game start = new Game();    start.inputName();    Welcome.greetPlayer(start.x, start.y);    start.show();}public static void greetPlayer(String player1, String player2){    System.out.println("Welcome " + " " + player1 + " and " + player2 + "\n" + "Have Fun!");}

凤凰求蛊

这是因为在Game call = new Game();greetPlayer()你有一个新的 Game 实例,所以你失去了输入的 和。xy

有只小跳蛙

您正在两个地方创建 的对象。Game()在 main() 中:Game start = new Game();在 :greetPlayer()Game call = new Game();您可以尝试合并两个类,这样您就可以在一个类中引入玩家,获取名称和游戏的其余部分:import java.util.Scanner;public class TicTac {    public static void main(String[] args) {        Game start = new Game();        Game.greet();        start.inputName();        start.show();    }}class Game {    public String x, y;    public void inputName() {        Scanner input = new Scanner(System.in);        System.out.println("Enter your name Player 1:");        String player1 = input.nextLine();        System.out.println("Enter your name Player 2:");        String player2 = input.nextLine();        x = player1;        y = player2;    }    public static void greet() {        System.out.println("\tTicTac Game By Abhi:");        System.out.println("\t  __X_|__O_|__X_");        System.out.println("\t  __O_|__X_|__O_");        System.out.println("\t    X |  O |  X");    }    public void show() {        System.out.printf("Hi %s and %s", x, y);    }}

SMILET

您需要将 Game 类的实例作为参数传递到对 greetPlayer 函数的调用中。试试下面这样:startimport java.util.*;public class TicTac{  public static void main(String[] args) {    Welcome.greet();    Game start = new Game();    start.inputName();    Welcome.greetPlayer(start);    start.show();  })class Welcome{  public static void greetPlayer(Game call){    System.out.println("Welcome " + " " + call.x + " and " + call.y + "\n" + "Have Fun!");  }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java