从另一个班级访问一个班级的成员

时间:2019-03-17 21:58:18

标签: java

代码:

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 个答案:

答案 0 :(得分:2)

问题是您正在使用两个不同的Game对象。第一个在您的main()方法中创建,第二个在greetPlayer()方法中创建。您仅在main()方法中为对象初始化播放器名称。它们永远不会在第二个对象中初始化。

我假设您只想使用一个Game对象。一种解决方案是将Game对象传递给greetPlayer()方法:

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

答案 1 :(得分:1)

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

您有一个新的Game实例,因此您丢失了输入的xy

答案 2 :(得分:1)

您要在两个地方创建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);
    }
}

答案 3 :(得分:0)

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

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