Массив перезаписи программы с Null

Для проекта в школе (введение в java), мы должны сделать программу, используя массивы. Я решил сделать программу входа, которая хранит логины. Он отлично работает, за исключением удаления элементов. Это мой код

    public void delete() throws FileNotFoundException{
    int p;
    c.clear();
    c.print("Please enter a website to delete it's login info: ");
    String delete_name = c.readLine();
    Boolean found = false;

    // Search for the search key, and display the matching elements
    c.println("Searching for " + delete_name + "...");
    for (int i = 0; i < pass.length; i++)
        if (pass[i][0].equals(delete_name)) {
            c.println("Deleting login for " + pass[i][0]);


            String new_array[][] = new String[pass.length - 1][3];
            //remove an element
            for (int w = 0; i < new_array.length; i++)
                for (int j = 0; j <= 2; j++) {
                    p = w;
                    if (i >= p) {
                        new_array[w][j] = pass[w + 1][j];

                    } else {
                        new_array[w][j] = pass[w][j];


                    }
                }

            found = true;
            pass = new_array;
        }

    if (found == false) {
        c.println("No luck! " + delete_name + " wasn't found, please try again.");
        delete();
    }
        fileWriter();

}

Когда он записывает в файл, все После части, которая должна была быть удалена, изменяется на»null».

Извините, если формат ужасный, я только начинаю с java 🙂 любая помощь очень ценится, спасибо!

1 ответ

  1. При удалении строки 2D массива в Java можно использовать этот ярлык (не for-loopsтребуется)

    List<String[]> tempArr = new ArrayList<String[]>(Arrays.asList(pass));
    //Remove row at index of "delete_name":
    for(int i = 0; i < pass.length; i++){
      if(pass[i][0].equals(delete_name)){
        tempArr.remove(i);
      }
    }
    String[][] new_array = tempArr.toArray(new String[][]{});
    

    Однако это решение работает только при удалении только одного объекта в списке. Я бы предложил изучить» iterators«, чтобы сделать это решение лучше.

    РЕДАКТИРОВАТЬ:

    Вот пример сiterator

        String[][] pass = new String[][]{{"Name","data1","data2"}};
        List<String[]> tempArr = new ArrayList<String[]>(Arrays.asList(pass));
        for (Iterator<String[]> iterator = tempArr.iterator(); iterator.hasNext();) {
            String id = iterator.next()[0];
            if (id.equals(delete_name)){
                iterator.remove();
            }
        }