Menu
Coddy logo textTech

Gestion des erreurs

Fait partie de la section Logique & Flux du Journey C# de Coddy — leçon 45 sur 66.

challenge icon

Défi

Facile

Améliorons notre système avec une gestion d'erreurs robuste pour gérer les problèmes potentiels avec élégance. Créez une classe appelée ErrorHandler avec ces méthodes :

  1. ValidateInput(int[][] scoreGrid, int studentIndex, int assignmentIndex) : Valide les indices d'entrée et retourne un message d'erreur approprié ou une chaîne vide si valide.
    • Retourne "Invalid student index" si l'indice de l'étudiant est hors limites.
    • Retourne "Invalid assignment index" si l'indice de l'affectation est hors limites.
    • Retourne une chaîne vide "" si les deux indices sont valides.
  2. SafeGetScore(int[][] scoreGrid, int studentIndex, int assignmentIndex) : Récupère en toute sécurité un score avec gestion d'erreurs.
    • Retourne le score si les deux indices sont valides.
    • Retourne -999 si un indice est invalide.
  3. ProcessBatchUpdate(int[][] scoreGrid, int[][] updates) : Traite les mises à jour par lots où chaque mise à jour est [studentIndex, assignmentIndex, score].
    • Retourne un tableau string[] de messages d'erreur pour chaque mise à jour échouée.
    • Chaque mise à jour peut échouer avec l'un de ces messages d'erreur spécifiques :
      • "Invalid update format" — si la mise à jour ne contient pas exactement 3 valeurs.
      • "Invalid student index" — si l'indice de l'étudiant est hors limites.
      • "Invalid assignment index" — si l'indice de l'affectation est hors limites.
      • "Invalid score value" — si le score est en dehors de la plage valide (0–100).
    • Formatez chaque erreur comme : "Error at index X: [specific error message]"
    • Retournez un tableau vide si toutes les mises à jour sont réussies.
Indice : Pour collecter les erreurs dynamiquement avant de les retourner sous forme de string[], utilisez List<string> errors = new List<string>();List<string> fonctionne comme un tableau redimensionnable où vous pouvez appeler errors.Add(...) pour ajouter des éléments. À la fin, convertissez-le avec errors.ToArray(). L'import using System.Collections.Generic; nécessaire pour cela est déjà inclus en haut du fichier.

Essayez vous-même

using System; // Ne supprimez pas cette ligne
using System.Collections.Generic;

public class ErrorHandler
{
    public static string ValidateInput(int[][] scoreGrid, int studentIndex, int assignmentIndex)
    {
        // Écrivez votre code ici
        
    }
    
    public static int SafeGetScore(int[][] scoreGrid, int studentIndex, int assignmentIndex)
    {
        // Écrivez votre code ici
        
    }
    
    public static string[] ProcessBatchUpdate(int[][] scoreGrid, int[][] updates)
    {
        // Écrivez votre code ici
        
    }
}

// Required for testing - do not modify
public class DataCollector
{
    public static int[][] CreateScoreGrid(int students, int assignments)
    {
        int[][] scoreGrid = new int[students][];
        for (int i = 0; i < students; i++)
        {
            scoreGrid[i] = new int[assignments];
        }
        return scoreGrid;
    }
    
    public static bool ValidateScore(int score)
    {
        return score >= 0 && score <= 100;
    }
    
    public static int[][] PopulateWithDefaultValues(int[][] scoreGrid)
    {
        for (int i = 0; i < scoreGrid.Length; i++)
        {
            for (int j = 0; j < scoreGrid[i].Length; j++)
            {
                scoreGrid[i][j] = -1;
            }
        }
        return scoreGrid;
    }
}

public class DataEntry
{
    public static int SetStudentScore(int[][] scoreGrid, int studentIndex, int assignmentIndex, int score)
    {
        // Vérifier les indices hors limites
        if (studentIndex < 0 || studentIndex >= scoreGrid.Length || 
            assignmentIndex < 0 || assignmentIndex >= scoreGrid[studentIndex].Length)
        {
            return -1;
        }
        
        // Valider la note
        if (!DataCollector.ValidateScore(score))
        {
            return -2;
        }
        
        // Définir la note
        scoreGrid[studentIndex][assignmentIndex] = score;
        return 0;
    }
    
    public static int UpdateAllScores(int[][] scoreGrid, int[] studentIndices, int assignmentIndex, int score)
    {
        int successCount = 0;
        
        for (int i = 0; i < studentIndices.Length; i++)
        {
            int result = SetStudentScore(scoreGrid, studentIndices[i], assignmentIndex, score);
            if (result == 0)
            {
                successCount++;
            }
        }
        
        return successCount;
    }
}

public class DataAnalyzer
{
    public static double CalculateStudentAverage(int[][] scoreGrid, int studentIndex)
    {
        // Vérifier si l'index de l'étudiant est valide
        if (studentIndex < 0 || studentIndex >= scoreGrid.Length)
        {
            return -1;
        }
        
        int sum = 0;
        int count = 0;
        
        // Calculer la somme des notes valides
        for (int j = 0; j < scoreGrid[studentIndex].Length; j++)
        {
            int score = scoreGrid[studentIndex][j];
            if (score != -1)  // Ignorer les devoirs non notés
            {
                sum += score;
                count++;
            }
        }
        
        // Retourner la moyenne ou 0 s'il n'y a pas de notes valides
        return count > 0 ? (double)sum / count : 0;
    }
    
    public static double CalculateAssignmentAverage(int[][] scoreGrid, int assignmentIndex)
    {
        // Vérifier s'il y a des étudiants
        if (scoreGrid.Length == 0)
        {
            return -1;
        }
        
        // Vérifier si l'index du devoir est valide
        if (assignmentIndex < 0 || assignmentIndex >= scoreGrid[0].Length)
        {
            return -1;
        }
        
        int sum = 0;
        int count = 0;
        
        // Calculer la somme des notes valides pour le devoir
        for (int i = 0; i < scoreGrid.Length; i++)
        {
            if (assignmentIndex < scoreGrid[i].Length)
            {
                int score = scoreGrid[i][assignmentIndex];
                if (score != -1)  // Ignorer les devoirs non notés
                {
                    sum += score;
                    count++;
                }
            }
        }
        
        // Retourner la moyenne ou 0 s'il n'y a pas de notes valides
        return count > 0 ? (double)sum / count : 0;
    }
    
    public static int[] FindHighestScore(int[][] scoreGrid)
    {
        int highestStudentIndex = 0;
        int highestAssignmentIndex = 0;
        int highestScore = -1;
        
        // Rechercher la note la plus élevée
        for (int i = 0; i < scoreGrid.Length; i++)
        {
            for (int j = 0; j < scoreGrid[i].Length; j++)
            {
                int currentScore = scoreGrid[i][j];
                if (currentScore > highestScore)
                {
                    highestScore = currentScore;
                    highestStudentIndex = i;
                    highestAssignmentIndex = j;
                }
            }
        }
        
        return new int[] { highestStudentIndex, highestAssignmentIndex, highestScore };
    }
}

Toutes les leçons de Logique & Flux