代码:
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。
答案 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实例,因此您丢失了输入的x
和y
。
答案 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!");
}
}