Search code examples
javavoting

I'm creating a VotingMachine, the whole code seems ok but when I try to run it, I can't get the result I want


My code:

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;
        }

    }

}

My code seems ok, the compiler didn't gave me any error message, But I keep getting this:

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!

I keep getting the err message and the vote wouldn't accumulate! I really couldn't figure out where I do wrong! Please help me, thank you!


Solution

  • use name.equals("Wudi") instead of name == "Wudi".

    When you write == you are using the standard object comparator. This returns true only if the object is exactly the samen. So name and "Wudi" are not the same, because they are different instances even though they contain the same characters.

    When you use the equals method, you're comparing the Strings by what they represent.