2017-05-12 4 views
0

Mon code:Je crée un VotingMachine, tout le code semble correct, mais lorsque je tente de l'exécuter, je ne peux pas obtenir le résultat que je veux

import java.util.*; 

public class VotingMachine { 
    private int WuDI; 
    private int HonST; 
    private int HawLB; 
    private int JanCS; 
    private int HanGU; 
    private int PanWG; 

    public VotingMachine() { WuDI = 0; HonST = 0; HawLB = 0; JanCS = 0;   HanGU = 0; PanWG = 0; } 
    public VotingMachine(int WuDI, int HonST, int HawLB, int JanCS, int HanGU, int PanWG) { 
     this.WuDI = WuDI; 
     this.HonST = HonST; 
     this.HawLB = HawLB; 
     this.JanCS = JanCS; 
     this.HanGU = HanGU; 
     this.PanWG = PanWG; 
    } 
    public void showVote(){ 
     System.out.println("WuDI = " + WuDI + "vote(s)"); 
     System.out.println("HonST = " + HonST + "vote(s)"); 
     System.out.println("HawLB = " + HawLB + "vote(s)"); 
     System.out.println("JanCS = " + JanCS + "vote(s)"); 
     System.out.println("HanGU = " + HanGU + "vote(s)"); 
     System.out.println("PanWG = " + PanWG + "vote(s)"); 
    } 
    public void clear() { WuDI = 0; HonST = 0; HawLB = 0; JanCS = 0; HanGU = 0; PanWG = 0; } 
    public void voteWuDI() { WuDI+=1; } 
    public void voteHonST() { HonST+=1; } 
    public void voteHawLB() { HawLB+=1; } 
    public void voteJanCS() { JanCS+=1; } 
    public void voteHanGU() { HanGU+=1; } 
    public void votePanWG() { PanWG+=1; } 

    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     VotingMachine v1 = new VotingMachine(); 
     v1.clear(); 

     for(;;){ 
      System.out.print("Cast your vote by entering the candidate's name: "); 
      String name = in.next(); 
      if(name == "WuDI") 
       v1.voteWuDI(); 
      else if(name == "HonST") 
       v1.voteHonST(); 
      else if(name == "HawLB") 
       v1.voteHawLB(); 
      else if(name == "JanCS") 
       v1.voteJanCS(); 
      else if(name == "HanGU") 
       v1.voteHanGU(); 
      else if(name == "PanWG") 
       v1.votePanWG(); 
      else System.err.println("The name your entered is not exist."); 

      System.out.print("Do you want to continue to vote? (Y/N): "); 
      char ans = in.next().charAt(0); 
      if(ans == 'N' || ans == 'n'){ 
       System.out.println("The result of the election is: "); 
       v1.showVote(); 
       System.out.println("Thank you for your vote!"); 
       System.exit(0);} 
      else continue; 
     } 

    } 

} 

Mon code semble ok, le compilateur didn « t m'a donné un message d'erreur, mais je continue à obtenir ceci:

Cast your vote by entering the candidate's name: WuDI 
Do you want to continue to vote? (Y/N): The name your entered is not exist. 
N 
The result of the election is: 
WuDI = 0vote(s) 
HonST = 0vote(s) 
HawLB = 0vote(s) 
JanCS = 0vote(s) 
HanGU = 0vote(s) 
PanWG = 0vote(s) 
Thank you for your vote! 

Je continue à recevoir le message err et le vote ne serait pas s'accumuler! Je ne pouvais vraiment pas comprendre où je me trompe! S'il vous plaît aidez-moi, merci!

+0

ne faites pas cela .... name == "HonST" –

Répondre

0

utilisez name.equals ("Wudi") à la place du nom == "Wudi".

Lorsque vous écrivez == vous utilisez le comparateur d'objets standard. Cela renvoie true uniquement si l'objet est exactement le samen. Donc le nom et "Wudi" ne sont pas les mêmes, car ce sont des instances différentes même si elles contiennent les mêmes caractères. Lorsque vous utilisez la méthode equals, vous comparez les chaînes par ce qu'elles représentent.

+1

Vous voudrez ajouter une explication pour expliquer pourquoi cette approche est meilleure, même si elle est de notoriété publique dans le développement Java. – K3v1n

+0

Problème résolu, merci! Je viens de réaliser en utilisant == dans ce cas était une mauvaise pratique. Merci pour votre temps et votre patience ~ – Alex