2015-03-17 3 views
0

je suis un débutant en java et j'ai ces codes pour mon système de vote:mon système de vote est déjà très bien, mais

public void Result_Election(){ 
     int vote1=Vote_President(); 
     String pres1="Theo"; 
     String pres2="William"; 
     String pres3="Maxon"; 
     String pres4="Douglas"; 
     int n1=0, n2=0, n3=0, n4=0; 

     try{ 
      PrintWriter i=new PrintWriter(new FileWriter("voting_score.txt", true)); 
      if (vote1==1){ 
       int[] addVotes = {1}; 
       for (int add : addVotes){ 
        result[add-1]+=1; 
        n1=result[add-1]; 
       } 
       i.println(pres1+" "+n1); 
      } 
      else if (vote1==2){ 
       int[] addVotes = {2}; 
       for (int add : addVotes){ 
        result[add-1]+=1; 
        n2=result[add-1]; 
       } 
       i.println(pres2+" "+n2); 
      } 
      else if (vote1==3){ 
       int[] addVotes = {3}; 
       for (int add : addVotes){ 
        result[add-1]+=1; 
        n3=result[add-1]; 
       } 
       i.println(pres3+" "+n3); 
      } 
      else if (vote1==4){ 
       int[] addVotes = {4}; 
       for (int add : addVotes){ 
        result[add-1]+=1; 
        n4=result[add-1]; 
       } 
       i.println(pres4+" "+n4); 
      } 
      i.close(); 
     }catch (Exception e){ 
     } 
    } 

mon problème est la sortie. chaque fois que j'ajoute des votes à un candidat, il ajoutera un autre nom avec ses votes incrémentés. mais je veux juste un nom par candidat et chaque fois que j'ajoute des votes à un candidat, il n'ajoutera pas un autre nom. juste le nombre de voix. s'il vous plaît aider

+1

Bien première chose à apprendre. JavaScript n'a rien à voir avec Java. Balise JS supprimée – epascarello

+0

Lorsque vous passez en revue ceci dans un débogueur, où cela se passe-t-il spécifiquement? – David

+1

Je voudrais regarder dans l'utilisation d'un HashMap – DHerls

Répondre

1

Pour éviter toutes ces variables et si-else bloc, peut-on faire simplement quelque chose comme -

Map<String, Integer> candidates = new HashMap<String, Integer>(); 
candidates.put("Theo", 0); 
candidates.put("William", 0); 
candidates.put("Maxon", 0); 
candidates.put("Douglas", 0); 

switch (vote1) 
{ 
    case 1: 
     candidates.put("Theo", candidates.get("Theo")+1); 
    break; 
    case 2: 
     candidates.put("William", candidates.get("William")+1); 
    break; 
    case 3: 
     candidates.put("Maxon", candidates.get("Maxon")+1); 
    break; 
    case 4: 
     candidates.put("Douglas", candidates.get("Douglas")+1); 
    break; 
} 

Il sera plus facile à comprendre et à déboguer. C'est juste un exemple. Vous pouvez l'utiliser comme vous le souhaitez.

Je ne vois aucune utilisation de "int [] addVotes = {1};" et itératif sur elle comme cela va toujours avoir une seule valeur? Quelle est votre intention ici? Comment avez-vous initialisé "résultat"?

[Mise à jour] le faire dans votre chemin et en réduisant les détails inutiles:

public void Result_Election(){ 

    int vote1 = Vote_President(); 
    String[] candidateArray = {"Theo", "William", "Maxon", "Douglas"}; 
    String fileAbsolutePath = "C:/voting_score.txt"; 

    try 
    { 
     int[] result = getStorredResult(fileAbsolutePath, candidateArray); 
     PrintWriter pw = new PrintWriter(new FileWriter(fileAbsolutePath)); 
     result[vote1-1] = result[vote1-1]+1; 

     for (int i = 0; i < candidateArray.length; i++) { 
      pw.println(candidateArray[i]+" "+result[i]); 
     } 

     pw.flush(); 
     pw.close(); 

    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); // better write in log 
    } 
} 

private int[] getStorredResult(String fileName, String[] candidateArray) throws NumberFormatException, IOException { 

    String currentLine = null; 
    int[] result = new int[candidateArray.length]; 
    File file = new File(fileName); 

    if(file.exists()) { 
     BufferedReader br = new BufferedReader(new FileReader(file)); 
     while((currentLine = br.readLine()) != null) { 
      for (int i = 0; i < candidateArray.length; i++) { 
       if(currentLine.startsWith(candidateArray[i])) { 
        result[i] = Integer.parseInt(currentLine.split(" ")[1]); 
        break; 
       } 
      } 
     } 
     br.close(); 
    } 

    return result; 
} 
+0

je voudrais vraiment utiliser ce SI je sais quelle est l'utilisation de la HashMap. Croyez-le ou non, c'est mon projet et j'ai besoin de défendre ce qu'est ce code ou ce code. Pouvez-vous suggérer un moyen plus facile? ça ira si ça va faire durer mes codes (je sais que ce sera génial si les codes sont plus courts que possible) mais je veux que mes codes soient assez compréhensibles pour que je puisse le défendre auprès de notre prof. – lel

+0

Dans ce cas, je vais sûrement jeter un coup d'oeil. Comment avez-vous initialisé "résultat"? – Kartic