[英]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實例,因此您丟失了輸入的x
和y
。
您將在兩個地方創建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.