2017-02-18 11 views
1

Я хотел бы знать, как я могу сделать цикл for для цикла for, чтобы отображать имена имен игроков вместе с рулонами их кубиков в зависимости от количества игроков, введенных Пользователь.Как связать строковый массив в цикле

if (num_of_players == 1) { 
    players[0] = player1; 
} 
if (num_of_players == 2) { 
    players[0] = player1; 
    players[1] = player2; 
} 
if (num_of_players == 3) { 
    players[0] = player1; 
    players[1] = player2; 
    players[2] = player3; 
} 
if (num_of_players == 4) { 
    players[0] = player1; 
    players[1] = player2; 
    players[2] = player3; 
    players[3] = player4; 
} 
if (num_of_players == 5) { 
    players[0] = player1; 
    players[1] = player2; 
    players[2] = player3; 
    players[3] = player4; 
    players[4] = player5; 
} 
if (num_of_players == 6) { 
    players[0] = player1; 
    players[1] = player2; 
    players[2] = player3; 
    players[3] = player4; 
    players[4] = player5; 
    players[5] = player6; 
} 

for (String y : players) { 
    JOptionPane.showMessageDialog(null, "The first dice rolls " + y); 
+1

Вы не можете сделать это в цикле for из-за ваших переменных 'player1',' player2' и т. Д. Но вы можете написать 'if (num_of_players> = 1) игроков [0] = player1; if (num_of_players> = 2) игроки [1] = player2; ... '. –

+0

Похоже, что может быть что-то испорченное вашим дизайном, если у вас есть отдельная переменная для каждого игрока с именем playerN. Покажите немного больше кода, чтобы обеспечить некоторый контекст, и вы получите более полезные ответы. – Martin

+0

Что вы имеете в виду рулоны их кубиков? Пожалуйста, уточните, с чем вам нужна помощь. –

ответ

1

Не уверен, что петли применимы здесь, но это упрощение возможно, учитывая каждый блок повторяет работу предыдущих ...

if (num_of_players == 1) { 
    players[0] = player1; 
} 
if (num_of_players >= 2) { 
    players[1] = player2; 
} 
if (num_of_players >= 3) { 
    players[2] = player3; 
} 
if (num_of_players >= 4) { 
    players[3] = player4; 
} 
if (num_of_players >= 5) { 
    players[4] = player5; 
} 
if (num_of_players >= 6) { 
    players[5] = player6; 
} 

Другой способ решения этой бы быть создать массив и использовать это с вашим циклом. Лучше все еще player1, переменные player2 будут массивом для начала.

String [] playersArray = {player1, player2, player3, player4, player5, player6}; 

for (int i = 0; i< num_of_players; i++) { 
    players[i] = playersArray[i]; 
} 
3

Так как вы уже получили 6 player переменные, вы можете просто поместить их в массив, а затем взять копию части массива. Там нет никакого явного цикла требуется:

String[] aPlayers = {player1, player2, player3, player4, player5, player6}; 
System.arraycopy(aPlayers, 0, players, 0, num_of_players); 

Обратите внимание, что вы только установив первые num_of_players элементы players, вы будете иметь null элементы в конце (или что-то случается в этих элементах уже); и цикл for будет по-прежнему перебирать эти элементы.

Если это не то, что вы хотите, вы можете рассмотреть вопрос о назначении меньший список players:

players = Arrays.copyOfRange(aPlayers, 0, num_of_players); 

Или вы можете обернуть массив в список и взять подсписок:

for (String y : Arrays.asList(players).subList(0, num_of_players)) {