簡體   English   中英

從另一個班級訪問一個班級的成員

[英]Access members of one class from another class

編碼:

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。

問題是您正在使用兩個不同的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!");
}

這是因為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);
    }
}

您需要將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!");
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM