如何初始化一个对象数组并传递一个字符串数组?

时间:2018-04-16 23:04:09

标签: java oop object

我正在为学校项目创建基于文本的骰子游戏。以下代码旨在如下工作:

  1. 提示用户玩游戏的玩家数量。
  2. 创建一个字符串数组并提示用户输入播放器名称并相应地填充该数组。
  3. 创建一个qwixx对象并将字符串数组的玩家名称传递给它。
  4. 在qwixx构造函数中创建一个player对象数组。
  5. 循环遍历对象数组,并将String数组中的玩家名称传递给每个对象。
  6. 使用getName()方法打印出所有玩家名称。
  7. 我目前遇到的错误是在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;
        }
    
    }
    

2 个答案:

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