为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

烙印99 2022-08-17 10:47:37
代码: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。
查看完整描述

4 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

问题是您正在使用两个不同的对象。第一个在方法中创建,第二个在方法中创建。您仅为方法中的对象初始化播放器名称。它们永远不会在第二个对象中初始化。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!");

}


查看完整回答
反对 回复 2022-08-17
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

这是因为在Game call = new Game();greetPlayer()

你有一个新的 Game 实例,所以你失去了输入的 和。xy


查看完整回答
反对 回复 2022-08-17
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

您正在两个地方创建 的对象。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);

    }

}


查看完整回答
反对 回复 2022-08-17
?
SMILET

TA贡献1796条经验 获得超4个赞

您需要将 Game 类的实例作为参数传递到对 greetPlayer 函数的调用中。试试下面这样:start


import 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!");

  }

}


查看完整回答
反对 回复 2022-08-17
  • 4 回答
  • 0 关注
  • 182 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号