Michael M
Michael M

Reputation: 141

Array not returning max value

This is homework, but a small portion... I'm trying to return the largest number in an array using arr.MAX(); , but I keep on getting zero.

After debugging, I can see that values are being stored (from the user) yet it still returns zero.

The method in question is at the bottom.

Class ElectionUI 
{
    public void candidateInfo() 
    {
         do
         {
             for (int i = 0; i < theElection.CandidateNames.Length; i++)
             {
                Console.Write("Please enter the name for Candidate #" + (i + 
                1) + ": ");
                theElection.CandidateNames[i] = Console.ReadLine();
                Console.Write("Please enter the number of votes for: {0}: ", 
                theElection.CandidateNames[i]);
                theElection.NumVotes[i] = int.Parse(Console.ReadLine());
                Console.WriteLine("");
             }
         } while (theElection.NumVotes.Length < 5);
    }
}
Class Election 
{
    private string[] candidateNames = new string[5];
    private int[] numVotes = new int[5];        
        //get/set Candidate Names
        public string[] CandidateNames 
        {
            get { return candidateNames; }
            set { candidateNames = value; }
        }

        //Get/Set Candidate votes
        public int[] NumVotes 
        {
            get { return numVotes; }
            set { numVotes = value; }
        }

    public void findWinner()
    {
        int max = NumVotes.Max();
            for (var i = 0; i < numVotes.Length; i++)
            {
                if (NumVotes[i] > max) 
                {
                    max = NumVotes[i];
                }
            }
        Console.WriteLine(max);
    }
}

Upvotes: 1

Views: 77

Answers (3)

Jorge Altieri
Jorge Altieri

Reputation: 134

I think that you wanted to return the candidate name of who won, right?

Using your code you should change the findWinner method to:

public void findWinner()
{
    int max = NumVotes.Max();
    string winnerName = null;
    for (var i = 0; i < numVotes.Length; i++) {
        if (NumVotes[i] = max) {
            winnerName = CandidateNames[i];
        }
    }
    Console.WriteLine(winnerName);
} 

Upvotes: 0

Deepak Sharma
Deepak Sharma

Reputation: 4170

from the code its not clear, how you are initializing you election class instance, and how you are calling findWinner method. And yes your Do-While looping doing nothing. Because you already set the name array length as 5 so it will run the for loop once and then it will exit. even if you remove your do-while you will get the same output.

check the fiddle your code is working fine. I just assume you are creating instance of Election and then passing it to ElectionUI class to use it.

https://dotnetfiddle.net/oiVK9g

using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        var ele = new Election();
        var ui = new ElectionUI(ele);
        ui.candidateInfo();
        ele.findWinner();

    }
}

class ElectionUI 
{
    Election theElection;
    public ElectionUI(Election obj)
    {
        theElection = obj;
    }

    public void candidateInfo() 
    {
         do
         {
             for (int i = 0; i < theElection.CandidateNames.Length; i++)
             {
                Console.Write("Please enter the name for Candidate #" + (i + 
                1) + ": ");
                theElection.CandidateNames[i] = Console.ReadLine();
                Console.Write("Please enter the number of votes for: {0}: ", 
                theElection.CandidateNames[i]);
                theElection.NumVotes[i] = int.Parse(Console.ReadLine());
                Console.WriteLine("");
             }
         } while (theElection.NumVotes.Length < 5);
    }
}

class Election 
{
    private string[] candidateNames = new string[5];
    private int[] numVotes = new int[5];        
        //get/set Candidate Names
        public string[] CandidateNames 
        {
            get { return candidateNames; }
            set { candidateNames = value; }
        }

        //Get/Set Candidate votes
        public int[] NumVotes 
        {
            get { return numVotes; }
            set { numVotes = value; }
        }

    public void findWinner()
    {
        int max = NumVotes.Max();

        Console.WriteLine(max);
    }
}

Upvotes: 2

Phillip Ngan
Phillip Ngan

Reputation: 16106

You need to initialize the local variable max with Int32.MinValue. That way any value encountered will replace it.

Upvotes: -1

Related Questions