我正在为学校项目创建基于文本的骰子游戏。以下代码旨在如下工作:
我目前遇到的错误是在play()方法中,说明“玩家”和“玩家”都无法解析为变量。任何对此的帮助都是OOP语言的新功能。
import java.util.Scanner;
public class driver {
public static void main(String[] args) {
Scanner input_scanner = new Scanner(System.in);
System.out.print("Please enter the number of players (2-5): ");
numPlayers = input_scanner.nextInt();
String players[] = new String[numPlayers];
for (int x = 0; x < numPlayers; x++) {
System.out.print("Please enter the name of Player" + (x+1) + ": ");
players[x] = input_scanner.next();
}
qwixx game = new qwixx(players);
game.play();
input_scanner.close();
}
}
public class qwixx {
public qwixx(String[] players) {
player[] Players = new player[players.length];
for (int x = 0; x < players.length; x++) {
Players[x] = new player(players[x]);
}
}
public void play() {
for (int i = 0; i < players.length; i++) {
System.out.println(Players[i].getName());
}
}
}
public class player {
public player(String playerName) {
name = playerName;
}
public String getName() {
return name;
}
}
答案 0 :(得分:0)
首先,您已经在main方法中实例化了大部分数据,导致您的操作代码变为静态! 其次,以下行未声明为全局“但需要使用 static ”,因此只能在静态main方法中看到。
String players[] = new String[numPlayers];
在main方法中使用的“公共类qwixx”应该是“public static class qwixx”
以下是“新实例”而非静态
qwixx game = new qwixx(players);
但调用它的问题如下所示,因为静态类未声明为new,只需使用需要使用的方法调用
qwixx.play();
不仅如此,任何类名都可以通过以UPPER大小写字母开头的惯例来更好地编写,以帮助读取代码和编译器不会跳过。例如“公共静态类Qwixx”
“删除静态上下文”或完全在其中工作,只有一个或另一个。
答案 1 :(得分:0)
您的代码存在一些问题。但最重要的一个是如何在除了main之外的每个类中,你真的没有声明任何属于该类的变量。不要在构造函数中引入类变量。在构造函数之外声明它们,因此它们可以是全局变量。尝试:
public class qwixx {
player[] Players; //declared before using it in any methods / constructor
public qwixx(String[] players) {
Players = new player[players.length]; //value initialized inside the constructor
for (int x = 0; x < players.length; x++) {
Players[x] = new player(players[x]);
}
}
public void play() {
for (int i = 0; i < Players.length; i++) {
System.out.println(Players[i].getName());
}
}
}
同样,尝试在你的玩家类中做同样的事情:
public class player {
String name;
public player(String playerName) {
name = playerName;
}
public String getName() {
return name;
}
}
在你的主要上,你忘了将numPlayers声明为int。也这样做。
int numPlayers = input_scanner.nextInt