Menu
Coddy logo textTech

Error Handling

Teil des Abschnitts Logik & Ablauf der C#-Journey von Coddy — Lektion 45 von 66.

challenge icon

Aufgabe

Einfach

Lassen Sie uns unser System mit robuster Fehlerbehandlung erweitern, um potenzielle Probleme elegant zu handhaben. Erstellen Sie eine Klasse namens ErrorHandler mit diesen Methoden:

  1. ValidateInput(int[][] scoreGrid, int studentIndex, int assignmentIndex): Validiert die Eingabeindizes und gibt eine passende Fehlermeldung oder einen leeren String zurück, wenn gültig.
    • Gibt "Invalid student index" zurück, wenn der Studentenindex außerhalb der Grenzen liegt.
    • Gibt "Invalid assignment index" zurück, wenn der Aufgabenindex außerhalb der Grenzen liegt.
    • Gibt einen leeren String "" zurück, wenn beide Indizes gültig sind.
  2. SafeGetScore(int[][] scoreGrid, int studentIndex, int assignmentIndex): Holt sicher einen Score mit Fehlerbehandlung ab.
    • Gibt den Score zurück, wenn beide Indizes gültig sind.
    • Gibt -999 zurück, wenn ein Index ungültig ist.
  3. ProcessBatchUpdate(int[][] scoreGrid, int[][] updates): Verarbeitet Batch-Updates, wobei jedes Update [studentIndex, assignmentIndex, score] ist.
    • Gibt ein string[]-Array mit Fehlermeldungen für jedes fehlgeschlagene Update zurück.
    • Jedes Update kann mit einer dieser spezifischen Fehlermeldungen fehlschlagen:
      • "Invalid update format" — wenn das Update nicht genau 3 Werte enthält.
      • "Invalid student index" — wenn der Studentenindex außerhalb der Grenzen liegt.
      • "Invalid assignment index" — wenn der Aufgabenindex außerhalb der Grenzen liegt.
      • "Invalid score value" — wenn der Score außerhalb des gültigen Bereichs (0–100) liegt.
    • Formatieren Sie jeden Fehler als: "Error at index X: [specific error message]"
    • Geben Sie ein leeres Array zurück, wenn alle Updates erfolgreich sind.
Tipp: Um Fehler dynamisch zu sammeln, bevor sie als string[] zurückgegeben werden, verwenden Sie List<string> errors = new List<string>();List<string> funktioniert wie ein skalierbares Array, bei dem Sie errors.Add(...) aufrufen können, um Elemente anzuhängen. Am Ende konvertieren Sie es mit errors.ToArray(). Der benötigte Import using System.Collections.Generic; ist bereits oben in der Datei enthalten.

Probier es selbst

using System; // Diese Zeile nicht löschen
using System.Collections.Generic;

public class ErrorHandler
{
    public static string ValidateInput(int[][] scoreGrid, int studentIndex, int assignmentIndex)
    {
        // Schreibe deinen Code hier
        
    }
    
    public static int SafeGetScore(int[][] scoreGrid, int studentIndex, int assignmentIndex)
    {
        // Schreibe deinen Code hier
        
    }
    
    public static string[] ProcessBatchUpdate(int[][] scoreGrid, int[][] updates)
    {
        // Schreibe deinen Code hier
        
    }
}

// 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)
    {
        // Prüfe auf Indizes außerhalb der Grenzen
        if (studentIndex < 0 || studentIndex >= scoreGrid.Length || 
            assignmentIndex < 0 || assignmentIndex >= scoreGrid[studentIndex].Length)
        {
            return -1;
        }
        
        // Validiere die Punktzahl
        if (!DataCollector.ValidateScore(score))
        {
            return -2;
        }
        
        // Setze die Punktzahl
        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)
    {
        // Prüfe, ob der Studentenindex gültig ist
        if (studentIndex < 0 || studentIndex >= scoreGrid.Length)
        {
            return -1;
        }
        
        int sum = 0;
        int count = 0;
        
        // Berechne Summe der gültigen Punktzahlen
        for (int j = 0; j < scoreGrid[studentIndex].Length; j++)
        {
            int score = scoreGrid[studentIndex][j];
            if (score != -1)  // Ignoriere nicht benotete Aufgaben
            {
                sum += score;
                count++;
            }
        }
        
        // Gib Durchschnitt oder 0 zurück, falls keine gültigen Punktzahlen
        return count > 0 ? (double)sum / count : 0;
    }
    
    public static double CalculateAssignmentAverage(int[][] scoreGrid, int assignmentIndex)
    {
        // Prüfe, ob Studenten vorhanden sind
        if (scoreGrid.Length == 0)
        {
            return -1;
        }
        
        // Prüfe, ob der Aufgabenindex gültig ist
        if (assignmentIndex < 0 || assignmentIndex >= scoreGrid[0].Length)
        {
            return -1;
        }
        
        int sum = 0;
        int count = 0;
        
        // Berechne Summe der gültigen Punktzahlen für die Aufgabe
        for (int i = 0; i < scoreGrid.Length; i++)
        {
            if (assignmentIndex < scoreGrid[i].Length)
            {
                int score = scoreGrid[i][assignmentIndex];
                if (score != -1)  // Ignoriere nicht benotete Aufgaben
                {
                    sum += score;
                    count++;
                }
            }
        }
        
        // Gib Durchschnitt oder 0 zurück, falls keine gültigen Punktzahlen
        return count > 0 ? (double)sum / count : 0;
    }
    
    public static int[] FindHighestScore(int[][] scoreGrid)
    {
        int highestStudentIndex = 0;
        int highestAssignmentIndex = 0;
        int highestScore = -1;
        
        // Suche nach der höchsten Punktzahl
        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 };
    }
}

Alle Lektionen in Logik & Ablauf