Java Academy · Oppitunti

Lisääminen, indeksin perusteella poistaminen ja siirtäminen

Lisätkää alkio uuteen taulukkoon, poistakaa alkio indeksin perusteella vasemmalle siirtämällä ja harjoitelkaa turvallisia rajaehtojen tarkistuksia.

Oppitunti 3/38 vaihetta

Lisääminen, indeksin perusteella poistaminen ja siirtäminen on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 3 oppituntia.

Lisäämisen yleiskatsaus

Lisääminen tavalliseen taulukkoon luo yleensä uuden taulukon, jossa on yksi paikka enemmän. Kopioikaa ennen lisäyskohtaa olevat alkiot, sijoittakaa uusi arvo paikalleen ja kopioikaa loput alkiot yhden paikan verran siirrettyinä.

Lisääminen uuteen taulukkoon

Lisätkää alkio indeksin i kohdalle uudessa taulukossa:

public class Main {
  // Method to insert a value at a given index
  static int[] insertAt(int[] a, int i, int val) {
    // Create a new array, one element larger
    int[] b = new int[a.length + 1];

    // Copy elements before the insertion index
    for (int p = 0; p < i; p = p + 1) {
      b[p] = a[p];
    }

    // Insert the new value at position i
    b[i] = val;

    // Copy the rest of the elements after position i
    for (int p = i; p < a.length; p = p + 1) {
      b[p + 1] = a[p];
    }

    return b;
  }

  public static void main(String[] args) {
    // Example array
    int[] a = {5, 8, 9, 12};

    // Insert 99 at index 2 (between 8 and 9)
    int[] b = insertAt(a, 2, 99);

    // Print new array
    System.out.print("Array after insertion: ");
    for (int x : b) {
      System.out.print(x + " ");
    }
  }
}

Poistaminen ja siirtäminen

Poistakaa alkio indeksin perusteella siirtämällä alkiot vasemmalle ja tyhjentämällä viimeinen paikka:

public class Main {
  // Method to delete an element at index k
  static void deleteAt(int[] a, int k) {
    // Shift elements to the left, starting from index k
    for (int i = k; i < a.length - 1; i = i + 1) {
      a[i] = a[i + 1];
    }

    // Clear the last element (since it's now duplicated)
    a[a.length - 1] = 0; 
  }

  public static void main(String[] args) {
    // Example array
    int[] a = {5, 8, 9, 12, 15};

    // Delete element at index 2 (value = 9)
    deleteAt(a, 2);

    // Print updated array
    System.out.print("Array after deletion: ");
    for (int x : a) {
      System.out.print(x + " ");
    }
  }
}

Rajojen tarkistus

Rajojen tarkistus auttaa välttämään ajonaikaisia virheitä. n alkion tapauksessa kelvolliset indeksit ovat 0..n-1. Lisäämistä varten kelvollinen i on välillä 0..n.

public class Main {
  // Insert a value at a given index
  static int[] insertAt(int[] a, int i, int val) {
    // Validate index (0 ≤ i ≤ a.length is allowed for insert)
    if (i < 0 || i > a.length) {
      throw new IllegalArgumentException("bad index");
    }

    int[] b = new int[a.length + 1];
    for (int p = 0; p < i; p++) b[p] = a[p];
    b[i] = val;
    for (int p = i; p < a.length; p++) b[p + 1] = a[p];
    return b;
  }

  // Delete a value at a given index
  static void deleteAt(int[] a, int k) {
    // Validate index (0 ≤ k < a.length is required for delete)
    if (k < 0 || k >= a.length) {
      throw new IllegalArgumentException("bad index");
    }

    for (int i = k; i < a.length - 1; i++) {
      a[i] = a[i + 1];
    }
    a[a.length - 1] = 0; // clear the last slot
  }

  public static void main(String[] args) {
    int[] a = {5, 8, 9, 12};

    // Test insert
    int[] b = insertAt(a, 2, 99);
    System.out.print("After insert: ");
    for (int x : b) System.out.print(x + " ");

    System.out.println();

    // Test delete
    deleteAt(b, 3);
    System.out.print("After delete: ");
    for (int x : b) System.out.print(x + " ");
  }
}

Poistaminen uuteen taulukkoon

Luokaa pienempi kopio, josta indeksi k on jätetty pois:

public class Main {
  // Method to create a new array without the element at index k
  static int[] without(int[] a, int k) {
    // Validate index
    if (k < 0 || k >= a.length) {
      throw new IllegalArgumentException("bad index");
    }

    // New array has one fewer element
    int[] b = new int[a.length - 1];

    // Copy elements before k
    for (int p = 0; p < k; p = p + 1) {
      b[p] = a[p];
    }

    // Copy elements after k (shift left by one)
    for (int p = k + 1; p < a.length; p = p + 1) {
      b[p - 1] = a[p];
    }

    return b;
  }

  public static void main(String[] args) {
    int[] a = {5, 8, 9, 12, 15};

    // Remove element at index 2 (value = 9)
    int[] b = without(a, 2);

    // Print original
    System.out.print("Original array: ");
    for (int x : a) System.out.print(x + " ");
    System.out.println();

    // Print new array
    System.out.print("Array without index 2: ");
    for (int x : b) System.out.print(x + " ");
  }
}

Lisäämisen ja poistamisen esimerkki

Suorittakaa: Näette lisäämisen uuteen taulukkoon, poistamisen paikallaan siirtämällä vasemmalle sekä poistamisen kopioimalla.

public class Main {
  static int[] insertAt(int[] a, int i, int val) {
    if (i < 0 || i > a.length) throw new IllegalArgumentException("bad index");
    int[] b = new int[a.length + 1];
    for (int p = 0; p < i; p = p + 1) b[p] = a[p];
    b[i] = val;
    for (int p = i; p < a.length; p = p + 1) b[p + 1] = a[p];
    return b;
  }

  static void deleteAtShift(int[] a, int k) {
    if (k < 0 || k >= a.length) throw new IllegalArgumentException("bad index");
    for (int i = k; i < a.length - 1; i = i + 1) {
      a[i] = a[i + 1];
    }
    a[a.length - 1] = 0;
  }

  static int[] without(int[] a, int k) {
    if (k < 0 || k >= a.length) throw new IllegalArgumentException("bad index");
    int[] b = new int[a.length - 1];
    for (int p = 0; p < k; p = p + 1) b[p] = a[p];
    for (int p = k + 1; p < a.length; p = p + 1) b[p - 1] = a[p];
    return b;
  }

  static String join(int[] a) {
    String s = "";
    for (int i = 0; i < a.length; i = i + 1) {
      s = s + a[i] + (i + 1 < a.length ? " " : "");
    }
    return s;
  }

  public static void main(String[] args) {
    int[] a = {10, 20, 30, 40};
    System.out.println("a           = " + join(a));

    int[] b = insertAt(a, 2, 99);
    System.out.println("insertAt(2) = " + join(b));

    deleteAtShift(a, 1);
    System.out.println("deleteAt(1) = " + join(a));

    int[] c = without(b, 3);
    System.out.println("without(3)  = " + join(c));
  }
}

Poistamisen ja siirtämisen tarkistus

Pikatarkistus: Mikä koodinpätkä poistaa alkion indeksistä k siirtämällä alkiot vasemmalle ja tyhjentää viimeisen paikan?

Kertaus ja seuraava aihe

Kertaus: Lisäsitte alkion uuteen taulukkoon, poistitte alkion siirtämällä vasemmalle ja loitte pienempiä kopioita. Tarkistakaa aina rajat.

Seuraavaksi: Siirrytte oliotaulukoihin ja yksinkertaisiin algoritmeihin, kuten esiintymistiheyksien laskemiseen.

Aloita maksutta

Opi Java tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
104
Oppitunnit
374

Usein kysytyt kysymykset

Onko oppitunti ”Lisääminen, indeksin perusteella poistaminen ja siirtäminen” ilmainen?

Kyllä – oppitunnin ”Lisääminen, indeksin perusteella poistaminen ja siirtäminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”Lisääminen, indeksin perusteella poistaminen ja siirtäminen”?

Lisätkää alkio uuteen taulukkoon, poistakaa alkio indeksin perusteella vasemmalle siirtämällä ja harjoitelkaa turvallisia rajaehtojen tarkistuksia. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/3.

Kuinka kauan ”Lisääminen, indeksin perusteella poistaminen ja siirtäminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?

Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Taulukoiden perusteet ja läpikäynti
  2. Haku, minimi/maksimi ja kääntäminen
  3. Lisääminen, indeksin perusteella poistaminen ja siirtäminen
← Takaisin: Java Academy