2014-12-04 2 views
-1

설문지 끝에 점수를 표시하려고하지만 내 방식으로 마지막 점수 만 표시합니다.루프없이 끝에서 모든 점수를 표시하는 방법은 무엇입니까?

JOptionPane.showMessageDialog 루프에 넣는다면 효과가있을 것입니다.하지만이 코드는 한 번만 끝까지 표시하고 싶습니다.

여기 내 코드입니다.

//Main method 

JOptionPane.showMessageDialog(null, printPlayerScore(playerName, playerAge, playerScore, playerCount)); 

//printPlayerScore method 

public static String printPlayerScore(String playerName[], int playerAge[], int playerScore[], int playerCount) { 
    String displayResult = ""; 

    for(int i = 0; i < playerCount; i++) { 
     displayResult += "\nName: " + playerName[i] + "\nAge: " + playerAge[i] + "\nScore: " + playerScore[i] + "\n"; 
    } 

    return displayResult; 
} 

예는 실행

Player1: 12

Player2: 12

이 때 그것이 있어야

Player1: 10

Player2: 12

나는이 방법을 다른 것으로 바꿀 필요가 있다는 것을 알고있다. 그러나 나는 그것을 어떻게 할 수 있을까?

전체 코드 : http://pastebin.com/NME8Dh7N

+4

왜? 그것이 효과가있는 것처럼 보입니다. 그게 뭐가 잘못 됐어? –

+0

모든 플레이어의 마지막 점수 만 표시합니다. Player1에 5 점이 있고 Player2에 10 점이 있으면 두 점에 모두 10 점이 표시됩니다. – Xylus

+0

Player1의 점수는 10 점입니까? 디버거에서 보거나'System.out.println (playerScore [0])'을 해봤습니까? 플레이어의 스코어를 배열에 올리면 안 될까요? – Jias

답변

2

Object-Oriented Programming의 혜택 비명 예입니다. OOP를 사용하면이 코드를 디버그, 읽기 및 쓰기가 더 쉬워집니다. 나는 이것을 더 잘 설명 할 수있는 간단한 코드를 작성할 것입니다 (결코 완벽한 것은 아닙니다). Player의 속성을 사용하여 멋진 출력 문자열을 쉽게 만들 수 있습니다. Player 개체의 배열을 만들고이를 인쇄 방법으로 전달하십시오.

public class Player 
{ 
    public String name; 
    public int age; 
    public int score; 

    public String toString() 
    { 
     return String.format("\nName : %s\nAge: %d\nScore: %s\n", name, age, score); 
    } 
} 

public static String printPlayerScore(Player[] players) 
{ 
    String displayResult = ""; 

    for(Player player : players) 
    { 
     displayResult += player.toString(); 
    } 

    return displayResult; 
} 
+1

ToString을 재정의 (override) 했으므로,'return Arrays.toString (players); –

0

귀하의 pastebin에 따르면, 질문 답변을 저장하기위한 어레이는 1 개뿐입니다. n + 1 플레이어가 n 명의 플레이어의 답을 덮어 쓰는 것을 의미합니다.

매트릭스 (배열 배열)를 수행하거나 대안을 더 쉽게 읽을 수 있고, 플레이어를위한 클래스를 만들고 해당 클래스가 플레이어 목록 만 가진 플레이어 데이터를 관리하게 할 수 있습니다. 함수 호출에서 매개 변수의 수를 줄이고 응답을 쉽게 개별화 할 수 있습니다.

public class Player { 
    private String name; 
    private List<boolean> answers; 
    private int playerId; 
} 

행렬은 다음과 같이 작동합니다 :

boolean answers[][] = new boolean[playerCount][questionCount]; 

그런 식으로, 각 플레이어는 서로 independ 답변 별도의 목록이 있습니다.

그러면 각 플레이어를 함수에 대한 매개 변수로 보내고 필요한만큼 읽는 것이 좋습니다.

1

저는 개인적으로 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 전체 프로그램을 다시 작성하는 것을 진지하게 고려해야합니다. 또한 다른 코드를 주석 처리하여 작동하도록했습니다.

관련 문제