Bagaimana cara menambahkan elemen dari beberapa array ke array statis baru tanpa ArrayList?

Untuk tugas sekolah, saya berhasil membuat program yang menyimpan resep (nama, bahan, petunjuk). Saya sekarang perlu menambahkan fitur daftar belanja yang akan mengambil bahan-bahan dari resep yang telah saya tambahkan dan menyimpannya dalam array string statis baru.

Saya diminta untuk membuat array string bahan dengan ukuran 20 dan ShoppingList sebagai array string statis dengan ukuran 40:

private String[] ingredients = new String[20];
private static String[] shoppingList = new String[40]; 

Saya menginisialisasi semua elemen dari kedua array ke string kosong.

Saya juga telah membuat kode keras dua resep dalam program pengujian saya seperti ini:

rcp1.setIngredients(0, "Butter");
rcp1.setIngredients(1, "Garlic");
rcp1.setIngredients(2, "Parsley");
rcp1.setIngredients(3, "Bread");
rcp1.setIngredients(4, "Cheese");

rcp2.setIngredients(0, "Biscuits");
rcp2.setIngredients(1, "Pepperoni");
rcp2.setIngredients(2, "Pizza sauce");

Di sinilah saya bingung:

public void setIngredients(int loc, String ingredient) {
    ingredients[loc] = ingredient;

        for (int i=0; i<shoppingList.length; i++){
            if (shoppingList[loc] == "") {
            shoppingList = ingredients;
            } 
        }      
}

Karena bahan dari rcp1 dan rcp2 sama-sama menggunakan lokasi bahan [0, 1, 2], mencoba menambahkan bahan ke Daftar belanja statis menggunakan [loc] akan menimpa lokasi resep pertama tersebut.

Saya telah membuat loop for sehingga dapat menampilkan bahan-bahan resep pertama dengan benar; namun, saya tidak yakin bagaimana cara melanjutkan mencari lokasi string kosong berikutnya untuk mencantumkan bahan-bahan resep kedua. Saya berpikir bahwa saya harus menggunakan pernyataan else if dan kemudian mencari cara untuk menemukan di mana string kosong berikutnya sehingga saya dapat mulai menambahkan bahan resep berikutnya dari titik itu..?

Apakah ada cara lain, yang mungkin lebih sederhana, agar saya dapat mengambil bahan-bahan dari rcp2 dan menempatkannya setelah bahan-bahan rcp1 di daftar belanja?

Saya pikir saya telah menganalisis masalah ini secara berlebihan dan saya belum dapat menemukan solusinya, jadi saya akan sangat menghargai jika ada yang bisa mengarahkan saya ke arah yang benar. Terima kasih!


person Kiko    schedule 27.04.2016    source sumber
comment
Apa tujuan dari fungsi setIngredients() Anda? Perulangan for yang ada di dalamnya tidak berguna - Anda tidak menggunakan variabel iterasi i di dalam badan.   -  person Mifeet    schedule 27.04.2016
comment
Bagi saya, apa yang Anda katakan terdengar seperti Anda hanya perlu menggabungkan bahan-bahan dari kedua resep ke susunan lain shoppingList, apakah itu benar?   -  person Mifeet    schedule 27.04.2016


Jawaban (1)


Anda menghadapi banyak kendala buatan, yang memang wajar terjadi karena ini adalah tugas mata kuliah. Masalah utama Anda adalah - rupanya - Anda tidak tahu berapa banyak bahan yang ada di setiap resep, atau di daftar belanjaan. Biasanya, array akan memiliki ukuran yang tepat untuk isinya sehingga Anda akan memiliki jumlah item dalam arr.length. Kalau tidak, seseorang akan menggunakan salah satu kelas dalam kerangka koleksi, seperti ArrayList.

Namun, Anda menggunakan buffer berukuran tetap, yang berarti Anda perlu melacak ukuran saat ini daftar Anda selain kapasitas, yang diberikan arr.length kepada Anda. Ada dua cara untuk melakukannya:

  • Secara eksplisit, dengan memiliki variabel int yang secara konseptual dikaitkan dengan array berarti "elemen pertama yang tidak digunakan". Saat Anda menambahkan elemen baru, Anda akan mulai dari indeks tersebut, dan menambah variabel tersebut untuk setiap bahan baru yang ditambahkan ke daftar. Inilah yang dilakukan ArrayList.
  • Secara implisit, dengan memiliki semacam "penanda" String yang berarti "tidak terpakai". Ini bisa berupa instance String yang tepat, atau cukup null. Ini pada dasarnya adalah apa yang dilakukan C dengan terminator string '\0'.

Setiap opsi memiliki trade-off yang berbeda dan memerlukan implementasi yang berbeda, yang tidak saya tambahkan di sini karena Anda perlu memikirkannya sebagai bagian dari kursus Anda! Namun, jangan ragu untuk bertanya lebih lanjut jika Anda mengalami kebuntuan lagi.

person Javier Martín    schedule 27.04.2016