Я лично не буду кодировать эту проблему так, как вы это делали, так как это не ООП и просто очень запутанно. Тем не менее, вот что вы можете использовать, чтобы не полностью нарушить ваш код, но исправить свою проблему.
Главный вопрос, на который вы пытаетесь ответить, - это то, почему последний результат появляется. Как утверждали другие, вы используете один массив для оценки игроков.Вот взломать, чтобы изменить код, чтобы получить его работу:
List<int[]> playerScoresList = new ArrayList<int[]>();
for (int i = 0; i < playerCount; i++)
{
int playerScore[] = new int[1];
JOptionPane.showMessageDialog(null, "It is " + playerName[i] + "'s turn now!");
checkQuestion(question, questionAnswer, userAnswer);
System.out.println("Name: " + playerName[i] + " || Age: " + playerAge[i] + "\n\n ~~~~ Results ~~~~");
System.out.println(printQuestionnaireResults(question, userAnswer) + " ~~~~ End of Results ~~~~\n");
playerScore = calculatePlayerScore(userAnswer, playerScore, playerCount);
// double playerScorePercentage = ((double)playerScore[i]/(double)question.length) * 100;
double playerScorePercentage = ((double)playerScore[0]/(double)question.length) * 100;
System.out.println(playerName[i] + " got " + playerScore[0] + " questions correct out of " + question.length + "! (" +
playerScorePercentage + "%)\n");
playerScoresList.add(playerScore);
}
JOptionPane.showMessageDialog(null, printPlayerScore(playerName, playerAge, playerScoresList, playerCount));
Другие методы, которые должны быть изменены:
public static int[] calculatePlayerScore(boolean userAnswer[], int playerScore[], int playerCount) {
for (int i = 0; i < 1; i++) {
playerScore[i] = 0;
for (int ii = 0; ii < userAnswer.length; ii++) {
if (userAnswer[ii]) {
playerScore[i] += 1;
}
}
}
return playerScore;
}
И:
public static String printPlayerScore(String playerName[], int playerAge[], List<int[]> playerScore, int playerCount) {
String displayResult = ""; // Maybe use StringBuilder
for(int i = 0; i < playerCount; i++)
{
int[] score = playerScore.get(i);
displayResult += "\nName: " + playerName[i] + "\nAge: " + playerAge[i] + "\nScore: " + score[0] + "\n";
}
return displayResult;
}
Теперь вы будете создавать новый массив с одним элементом каждый раз для каждого пользователя.
Пожалуйста, имейте в виду, что этот хак предоставляется таким образом, чтобы в вашем был указан минимальный код. Вы должны серьезно подумать о повторной записи всей программы IMO. Я также прокомментировал другой код, чтобы заставить его работать.
Почему? Похоже, он должен работать. Что с этим не так? –
Показывает только последний балл для всех игроков. Если Player1 получил 5, а Player2 получил 10, он отобразит 10 для обоих – Xylus
Вы уверены, что у Player1 есть оценка 10? Вы пробовали смотреть на него в отладчике или делать 'System.out.println (playerScore [0])'? Возможно ли, что вы не ставите оценки игроков в массиве правильно? – Jias