Je crée un tableau qui stocke un nom et un score de bowling de la même ligne, puis j'utilise Split () pour diviser le nom et le score en deux tableaux distincts. Ensuite, je dois trouver le score le plus élevé avec le nom avec le score le plus élevé et l'écrire sur la console en utilisant une méthode.

Voici ce que j'ai jusqu'à présent. Merci.

    const int SIZE = 10;

    string[] arrayNames = new string[SIZE];
    int[] arrayScores = new int[SIZE];

    for (int i = 0; i < SIZE; i++){
        Write("Enter the name and score of a player on one line seperated by a space or press Enter to stop ");

        string input = ReadLine();

        if (input == ""){
            break;
        }
        string[] scoreInfo = input.Split();
        arrayNames[i] = scoreInfo[0];

        bool valid = false;
        do{
            if (input == ""){
                break;
            }
            valid = int.TryParse(scoreInfo[1], out arrayScores[i]);
            valid = valid && (arrayScores[i] <= 300);

        } while (!valid);

    }

    int max = bowling.CalcHighest(arrayScores);
    int min = bowling.CalcLowest(arrayScores);
    int average = bowling.CalcAverage(arrayScores);
-1
Evan Glassford 3 avril 2017 à 02:09

2 réponses

Meilleure réponse

Dans votre boucle for, vous avez déjà le score le plus élevé, il vous suffit de le suivre. arrayScores[i]

Voici ce que je ferais:

const int SIZE = 10;

string[] arrayNames = new string[SIZE];
int[] arrayScores = new int[SIZE];

int highScore = 0;
string winner = "";

for (int i = 0; i < SIZE; i++){
    Write("Enter the name and score of a player on one line seperated by a space or press Enter to stop ");

    string input = ReadLine();

    if (input == ""){
        break;
    }
    string[] scoreInfo = input.Split();
    arrayNames[i] = scoreInfo[0];

    bool valid = false;
    do{
        if (input == ""){
            break;
        }
        valid = int.TryParse(scoreInfo[1], out arrayScores[i]);
        valid = valid && (arrayScores[i] <= 300);

        if(valid && arrayScores[i] > highScore){
            highScore = arrayScores[i];
            winner = arrayNames[i];
        }

    } while (!valid);

}

Ensuite, saisissez simplement le gagnant et highScore après la fin de la boucle for.

0
Glen Pierce 2 avril 2017 à 23:22

Votre problème est que vous ne maintenez pas de référence entre le nom et la partition.

Lorsque vous lisez une ligne, vous séparez les valeurs en arrayNames[i] et arrayScores[i].

Pensez peut-être à utiliser un dictionnaire au lieu de deux tableaux séparés.

Dictionary<string, int> dict = new Dictionary<string, int>();
dict.Add(name, score);

Faites ensuite vos calculs en utilisant le dictionnaire comme paramètre plutôt que le tableau. Si vous utilisez System.Linq, vous pouvez faire tous les calculs sur le dictionnaire très facilement:

var orderedDict = dict.OrderByDescending(d => d.Value); //This orders the dictionary by the scor
var first = orderedDict.First(); //This gets the highest score
var last = orderedDict.Last(); //This gets the lowest score
var average = dict.Sum(s => s.Value)/dict.Count(); //This is the average

var firstName = first.Key; //Name of winner
var lastName = last.Key; //Name of loser
1
Jamadan 2 avril 2017 à 23:30