Datenanalyse
Teil des Abschnitts Logik & Ablauf der C#-Journey von Coddy. Lektion 42 von 66.
Aufgabe
MittelDa wir nun Schülerdaten erfassen und aktualisieren können, implementieren wir die Analysefunktionalität, um Erkenntnisse aus den Bewertungen zu gewinnen. Erstelle eine Klasse namens DataAnalyzer mit diesen Methoden:
CalculateStudentAverage(int[][] scoreGrid, int studentIndex): Berechnet den Durchschnittswert für einen bestimmten Schüler und gibt ihn zurück. Gibt -1 zurück, wenn studentIndex ungültig ist.CalculateAssignmentAverage(int[][] scoreGrid, int assignmentIndex): Berechnet den Durchschnittswert für eine bestimmte Aufgabe über alle Schüler hinweg und gibt ihn zurück. Gibt -1 zurück, wenn assignmentIndex ungültig ist.FindHighestScore(int[][] scoreGrid): Gibt ein Array aus drei Ganzzahlen zurück, das die höchste Punktzahl und ihre Position darstellt: [studentIndex, assignmentIndex, score]. Wenn mehrere Einträge dieselbe höchste Punktzahl haben, gib den zuerst gefundenen zurück.
Hinweis: Berücksichtige bei der Berechnung von Durchschnittswerten nur gültige Punktzahlen (0-100). Ignoriere nicht bewertete Aufgaben (-1).
Probier es selbst
using System; // Diese Zeile nicht löschen
public class DataAnalyzer
{
public static double CalculateStudentAverage(int[][] scoreGrid, int studentIndex)
{
// Schreibe deinen Code hier
}
public static double CalculateAssignmentAverage(int[][] scoreGrid, int assignmentIndex)
{
// Schreibe deinen Code hier
}
public static int[] FindHighestScore(int[][] scoreGrid)
{
// 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;
}
// Validate the score
if (!DataCollector.ValidateScore(score))
{
return -2;
}
// Set the score
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;
}
}Alle Lektionen in Logik & Ablauf
1Mehrdimensionale Arrays
Grundlagen 2D-Arrays2D-Arrays deklarieren und initialisierenAuf Elemente von 2D-Arrays zugreifenVerschachtelte Schleifen mit 2D-ArraysGezackte ArraysHäufige MatrixoperationenZusammenfassung – Mehrdimensionale Arrays4Techniken zur Ablaufsteuerung
Frühe RückgabenWächterklauselnSprunganweisungen (goto)Break und ContinueVerschachtelte Bedingungen abflachen7Logische Operatoren – Fortgeschritten
KurzschlussauswertungBedingte logische OperatorenOperatorrangfolgeRückblick – Erweiterte Operatoren2Fortgeschrittene Entscheidungslogik
Mehrere BedingungenKomplexe boolesche LogikVergleich: If vs. SwitchVerschachtelte Switch-AnweisungenRückblick – Fortgeschrittene Entscheidungen5Fehlerbehandlung mit Exceptions
Grundlagen von Try-CatchException-TypenMehrere Catch-BlöckeArbeiten mit DateienFinally-BlockUsing im Vergleich zu Try-FinallyBenutzerdefinierte ExceptionsZusammenfassung – Fehlerbehandlung8Datenanalysesystem
Einrichtung der DatenerfassungLogik der Dateneingabe3Schleifenverbesserungen
SchleifenleistungKomplexe IterationJeder SchleifentypSchleifen refaktorierenRückblick – Optimierte Schleifen6Behandlung von Nullwerten
Grundlagen von NullreferenzenNullable WerttypenMuster zur NullprüfungDefensive ProgrammierungZusammenfassung – NullsicherheitÜbe selbstständig: Online-C#-Compiler