2016-02-04 4 views
1

У меня есть класс игрока со всеми сеттерами & геттеры.Простой способ создания нескольких объектов одного класса

я должен читать в 5 игроков с клавиатуры который я хорошо с, но при создании:

Player player1 = new Player(); 

Затем просит всех входов.

Есть ли способ, я могу просто увеличиваем 1, чтобы сделать Player2, Player3 и т.д.

Я попробовал метод ++. Я не знаю, что именно я прошу. Извините заранее за путаницу.

public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 

    Player player1 = new Player(); 
    player1.getSurname(); 
    player1.getFirstName(); 
    player1.getAge(); 
    player1.getHeight(); 
    player1.getRank(); 

    Player player2 = new Player(); 
    player2.getSurname(); 
    player2.getFirstName(); 
    player2.getAge(); 
    player2.getHeight(); 
    player2.getRank(); 

    Player player3 = new Player(); 
    player3.getSurname(); 
    player3.getFirstName(); 
    player3.getAge(); 
    player3.getHeight(); 
    player3.getRank(); 
+4

Создать хэш или массив игроков, а не отдельных переменных для каждого. –

+0

Неужели я об этом не так понял? –

+0

Ну не совсем неправильно. Вы можете сделать это в цикле. Используйте массив, как сказал Дейв, Player [] players = new Player [10]; – Siddhartha

ответ

5

документирован код является предпочтительным. get методы должны просто return значение, а не выполнять действие, такое как ввод пользователя.

Scanner in = new Scanner(System.in); 

int NUM_PLAYERS = 5; 

ArrayList<Player> players = new ArrayList<Player>(); 

for (int i = 0; i < NUM_PLAYERS; i++) { 
    Player p = new Player(); 

    System.out.print("Surname: "); 
    String surname = in.nextLine(); 

    System.out.print("Firstname: "); 
    String fname = in.nextLine(); 

    System.out.print("Age: "); 
    int age = in.nextInt(); 

    System.out.print("Height: "); 
    int height = in.nextInt(); 

    System.out.print("Rank: "); 
    int rank = in.nextInt(); 

    p.setSurname(surname); 
    p.setFirstName(fname); 
    p.setAge(age); 
    p.setHeight(height); 
    p.setRank(rank); 

    System.out.println("Current Player \n" + p); 
    players.add(p); 
    in.nextLine(); // clear the buffer 
} 

System.out.println("All players"); 
System.out.println(players); 

Использовать полный объектная модель и set методы на самом деле присвоить данные

public class Player { 

    private String surname; 
    private int height; 
    private int rank; 
    private int age; 
    private String firstName; 

    public String getSurname() { 

     return surname; 
    } 

    public void setSurname(String surname) { 
     this.surname = surname; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public int getAge() { 
     return age; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public int getHeight() { 
     return height; 
    } 

    public void setHeight(int height) { 
     this.height = height; 
    } 

    public int getRank() { 
     return rank; 
    } 

    public void setRank(int rank) { 
     this.rank = rank; 
    } 

    @Override 
    public String toString() { 
     return "Player{" + 
       "surname='" + surname + '\'' + 
       ", height=" + height + 
       ", rank=" + rank + 
       ", age=" + age + 
       ", firstName='" + firstName + '\'' + 
       '}'; 
    } 
} 
+0

ах, да, я вижу сейчас. thankyou :) У меня был больший список: Scanner in = new Scanner (System.in); \t public void setSurname (String newSurname) { \t \t фамилия = newSurname; \t} \t общественного недействительными setFirstName (Строка newFirstName) { \t \t Firstname = newFirstName; \t} \t общественный void комплектAge (int новыйAge) { \t \t возраст = новыйAge; –

+0

Добро пожаловать.Я вижу в другом комментарии вы сказали что-то о статических переменных в нестационарном контексте. Не знаете, где вы это делаете, но если этот ответ решит вашу проблему, вы можете принять его, используя галочку слева от ответа под стрелками. –

+0

Кстати, вы должны действительно проверить функции «hasXXX» сканера перед вызовом функций 'nextXXX' ... if (in.hasNextInt()) age = in.nextInt();' иначе они будут вызывать ошибку «InputMismatchException» , Или, по крайней мере, поймать ошибку. –

1

Вы могли бы это сделать.

List<Player> players = new ArrayList<Player>(); 

Тогда вы можете зайти и добавить игроков. Оформить заказ ArrayList documentation

1

Вы можете сделать массив объектов Player

Player[] players = new Player[5]; //creates an array that can hold 5 Player objects 
for (int i = 0; i < 5; i++) { 
    players[i] = new Player(); 
    player.getSurname(); 
    //place rest of code here 
} 
+0

thankyou. Я все еще получаю сообщение об ошибке: «Игрок не может быть разрешен». У меня есть все сеттеры и геттеры в классе Player, это правильно ?, На самом деле мой конструктор называется Player. Невозможно сделать статический ref для нестатического поля. grrrr;) –

+0

@JamesFogarty где вы пытаетесь получить доступ к переменной? Также убедитесь, что вы используете одно и то же имя переменной. – cbender

1
Scanner in = new Scanner(System.in); 
List<Player> players = new ArrayList<Player>(); 
for(...){//decide how many to add 
    Player player = new Player(); 
    player.getSurname(); 
    player.getFirstName(); 
    player.getAge(); 
    player.getHeight(); 
    player.getRank(); 
    players.add(player); 
} 
...//use the Player objects in players