저는 개인적으로 OOP가 아니며 매우 혼란스러운 방식으로이 문제를 코딩하지 않았습니다. 그러나 코드를 완전히 중단하지 않고 문제를 해결할 수 있도록 다음과 같이 사용할 수 있습니다.
당신이 대답하려고하는 주요 질문은 왜 마지막 점수가 나타나는지입니다. 다른 사람들이 말했듯이 플레이어 점수에 하나의 배열을 사용하고 있습니다.
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;
}
그리고 : 변경해야
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 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 전체 프로그램을 다시 작성하는 것을 진지하게 고려해야합니다. 또한 다른 코드를 주석 처리하여 작동하도록했습니다.
출처
2014-12-04 16:50:42
cno
왜? 그것이 효과가있는 것처럼 보입니다. 그게 뭐가 잘못 됐어? –
모든 플레이어의 마지막 점수 만 표시합니다. Player1에 5 점이 있고 Player2에 10 점이 있으면 두 점에 모두 10 점이 표시됩니다. – Xylus
Player1의 점수는 10 점입니까? 디버거에서 보거나'System.out.println (playerScore [0])'을 해봤습니까? 플레이어의 스코어를 배열에 올리면 안 될까요? – Jias