Data Analysis
Teil des Abschnitts Logik & Ablauf der C#-Journey von Coddy — Lektion 42 von 66.
Aufgabe
MittelNun, da wir Schülerdaten sammeln und aktualisieren können, implementieren wir die Analysefunktionalität, um Einblicke in die Noten zu gewinnen. Erstellen Sie eine Klasse namens DataAnalyzer mit diesen Methoden:
CalculateStudentAverage(int[][] scoreGrid, int studentIndex): Berechnet und gibt den Durchschnittswert für einen bestimmten Schüler zurück. Geben Sie -1 zurück, wenn der studentIndex ungültig ist.CalculateAssignmentAverage(int[][] scoreGrid, int assignmentIndex): Berechnet und gibt den Durchschnittswert für eine bestimmte Aufgabe über alle Schüler hinweg zurück. Geben Sie -1 zurück, wenn der assignmentIndex ungültig ist.FindHighestScore(int[][] scoreGrid): Gibt ein Array von drei Ganzzahlen zurück, das die höchste Note und ihren Standort darstellt: [studentIndex, assignmentIndex, score]. Wenn mehrere Einträge die gleiche höchste Note haben, geben Sie den ersten gefundenen zurück.
Hinweis: Beim Berechnen der Durchschnitte berücksichtigen Sie nur gültige Noten (0-100). Ignorieren Sie unbewertete 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
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling8Data Analysis System
Data Collection SetupData Entry Logic3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety