Java Academy · Lektion

Rensning og validering af 2D-data

Rens og validér 2D-heltalsdata: beskyt mod null-rækker, kontrollér indeksgrænser, begræns værdier uden for intervallet, normalisér ujævne former, og generér valideringsrapporter.

Lektion 6 af 68 trin

Rensning og validering af 2D-data er en gratis Java Academy-lektion på CoddyKit. Dette er lektion 6 af 6. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Java Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Java Academy-kurset indeholder 6 lektioner i alt.

Hvorfor rydde op i 2D-data

Mål: Gør 2D-data med heltal sikre og ensartede. Vi vil: (1) håndtere null-rækker, (2) kontrollere grænser for hver række, (3) begrænse værdier til et gyldigt interval, (4) normalisere takkede former efter behov og (5) generere en valideringsrapport.

Null-værdier og grænser

Trin 1: Erstat null-rækker med tomme arrays, og lav defensive kopier af værdierne. Opret en inBounds-hjælpefunktion, der kontrollerer grænserne for hver rækkes længde.

public class Main {
  // Make a defensive copy of m. Replace null rows with empty arrays.
  static int[][] copyOrEmpty(int[][] m) {
    if (m == null) return new int[0][0];
    int[][] out = new int[m.length][];
    for (int r = 0; r < m.length; r = r + 1) {
      if (m[r] == null) {
        out[r] = new int[0];
      } else {
        out[r] = new int[m[r].length];
        for (int c = 0; c < m[r].length; c = c + 1) out[r][c] = m[r][c];
      }
    }
    return out;
  }

  // Safe bounds check for jagged matrices
  static boolean inBounds(int[][] m, int r, int c) {
    return m != null && r >= 0 && r < m.length && m[r] != null && c >= 0 && c < m[r].length;
  }

  public static void main(String[] args) {
    int[][] raw = new int[][] { null, {1, 2, 3}, {4} };
    int[][] cleaned = copyOrEmpty(raw);

    System.out.println("rows = " + cleaned.length);
    for (int r = 0; r < cleaned.length; r = r + 1) System.out.println("row " + r + " len = " + cleaned[r].length);

    System.out.println("inBounds(1,2) = " + inBounds(cleaned, 1, 2));  // true
    System.out.println("inBounds(2,2) = " + inBounds(cleaned, 2, 2));  // false
  }
}

Begræns værdier

Trin 2: Begræns værdier til et gyldigt interval, f.eks. 0–100. Ugyldige negative værdier bliver til 0, og for store værdier bliver til 100.

public class Main {
  static int clamp(int v, int lo, int hi) { if (v < lo) return lo; if (v > hi) return hi; return v; }
  static void clampAll(int[][] m, int lo, int hi) {
    if (m == null) return;
    for (int r = 0; r < m.length; r = r + 1) {
      if (m[r] == null) continue;
      for (int c = 0; c < m[r].length; c = c + 1) m[r][c] = clamp(m[r][c], lo, hi);
    }
  }
  static void print(int[][] m) {
    for (int r = 0; r < m.length; r = r + 1) {
      if (m[r] == null) { System.out.println("<null row>"); continue; }
      for (int c = 0; c < m[r].length; c = c + 1) System.out.print(m[r][c] + (c + 1 < m[r].length ? " " : ""));
      System.out.println();
    }
  }
  public static void main(String[] args) {
    int[][] m = { { -5, 101, 50 }, null, { 200 } };
    System.out.println("before clamp:");
    print(m);
    clampAll(m, 0, 100);
    System.out.println("after clamp [0..100]:");
    print(m);
  }
}

Normaliser formen

Trin 3: Normaliser til en rektangulær form ved at udfylde hver kort eller null-række til længden af den længste række med en udfyldningsværdi, f.eks. 0.

public class Main {
  static int[][] padToMaxCols(int[][] m, int pad) {
    if (m == null) return new int[0][0];
    int rows = m.length;
    int maxCols = 0;
    for (int r = 0; r < rows; r = r + 1) if (m[r] != null && m[r].length > maxCols) maxCols = m[r].length;
    int[][] out = new int[rows][maxCols];
    for (int r = 0; r < rows; r = r + 1) {
      int cols = (m[r] == null) ? 0 : m[r].length;
      for (int c = 0; c < cols; c = c + 1) out[r][c] = m[r][c];
      for (int c = cols; c < maxCols; c = c + 1) out[r][c] = pad;  // pad missing cells
    }
    return out;
  }
  static void print(int[][] x) {
    for (int r = 0; r < x.length; r = r + 1) {
      for (int c = 0; c < x[r].length; c = c + 1) System.out.print(x[r][c] + (c + 1 < x[r].length ? " " : ""));
      System.out.println();
    }
  }
  public static void main(String[] args) {
    int[][] jag = { {1, 23, 456}, {7, 8}, null, {90} };
    int[][] rect = padToMaxCols(jag, 0);
    print(rect);
  }
}

Valideringsrapport

Trin 4: Opret en valideringsrapport: Tæl negative værdier, for store værdier, null-rækker og det samlede antal gennemløbne celler.

public class Main {
  static class Report { int negatives; int overMax; int nullRows; int cells; }
  static Report validate(int[][] m, int hi) {
    Report r = new Report();
    if (m == null) return r;
    for (int i = 0; i < m.length; i = i + 1) {
      if (m[i] == null) { r.nullRows = r.nullRows + 1; continue; }
      for (int j = 0; j < m[i].length; j = j + 1) {
        int v = m[i][j];
        r.cells = r.cells + 1;
        if (v < 0) r.negatives = r.negatives + 1;
        if (v > hi) r.overMax = r.overMax + 1;
      }
    }
    return r;
  }
  public static void main(String[] args) {
    int[][] m = { { -5, 101, 50 }, null, { 200 } };
    Report r = validate(m, 100);
    System.out.println("cells=" + r.cells + ", negatives=" + r.negatives + ", overMax=" + r.overMax + ", nullRows=" + r.nullRows);
  }
}

Udskrift uden null-rækker

Trin 5: Opret en justeret udskrift, der håndterer null-rækker ved at springe dem over og respekterer længden af hver række.

public class Main {
  static boolean inBounds(int[][] m, int r, int c) {
    return m != null && r >= 0 && r < m.length && m[r] != null && c >= 0 && c < m[r].length;
  }
  static int[] widths(int[][] m) {
    int maxCols = 0; if (m == null) return new int[0];
    for (int r = 0; r < m.length; r = r + 1) if (m[r] != null && m[r].length > maxCols) maxCols = m[r].length;
    int[] w = new int[maxCols];
    for (int r = 0; r < m.length; r = r + 1) {
      if (m[r] == null) continue;
      for (int c = 0; c < m[r].length; c = c + 1) {
        int len = Integer.toString(m[r][c]).length();
        if (len > w[c]) w[c] = len;
      }
    }
    for (int c = 0; c < w.length; c = c + 1) if (w[c] < 1) w[c] = 1;
    return w;
  }
  static void printAlignedSkipNull(int[][] m) {
    int[] w = widths(m);
    for (int r = 0; r < m.length; r = r + 1) {
      if (m[r] == null) { System.out.println("<skipped null row>"); continue; }
      String line = "";
      for (int c = 0; c < m[r].length; c = c + 1) {
        String s = Integer.toString(m[r][c]);
        while (s.length() < w[c]) s = " " + s;
        line = line + s + (c + 1 < m[r].length ? " " : "");
      }
      System.out.println(line);
    }
  }
  public static void main(String[] args) {
    int[][] m = { { 1, 200, -3 }, null, { 45 } };
    printAlignedSkipNull(m);
  }
}

Kontrol af sikker adgang

Hurtig kontrol: Hvordan får du sikker adgang til m[r][c] i data, der potentielt er takkede?

Opsummering og næste trin

Opsummering: Du kopierede data defensivt, kontrollerede indekser, begrænsede værdier, normaliserede takkede former og genererede valideringsoversigter. Disse byggesten gør senere 2D-algoritmer robuste.

Gratis at komme i gang

Lær Java med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
104
Lektioner
374

Ofte stillede spørgsmål

Er lektionen “Rensning og validering af 2D-data” gratis?

Ja — hele teksten til “Rensning og validering af 2D-data” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Java Academy-kurset, skal du opgradere til CoddyKit PRO. Java Academy-kurset indeholder 6 lektioner i alt.

Hvad lærer jeg i “Rensning og validering af 2D-data”?

Rens og validér 2D-heltalsdata: beskyt mod null-rækker, kontrollér indeksgrænser, begræns værdier uden for intervallet, normalisér ujævne former, og generér valideringsrapporter. Du øver dig i Java Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Java Academy?

Der kræves ingen tidligere erfaring. Java Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 6 af 6.

Hvor lang tid tager lektionen “Rensning og validering af 2D-data”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Java Academy-lektion?

Ja. Alle Java Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Grundlæggende 2D-arrays og indlejret iteration
  2. Ujævne arrays og tabelformatering
  3. Maksimumværdier pr. række/kolonne, transponering og formatering
  4. 2D-miniprojekt: Karakterbog
  5. 2D-værktøjer som hjælpeklasse (refaktorering)
  6. Rensning og validering af 2D-data
← Tilbage til Java Academy