วิธีเพิ่มองค์ประกอบจากหลายอาร์เรย์ไปยังอาร์เรย์แบบคงที่ใหม่โดยไม่มี ArrayList

สำหรับการมอบหมายงานในโรงเรียน ฉันได้สร้างโปรแกรมที่เก็บสูตรอาหาร (ชื่อ ส่วนผสม คำแนะนำ) ได้สำเร็จ ตอนนี้ฉันต้องเพิ่มฟีเจอร์รายการช็อปปิ้งซึ่งจะนำส่วนผสมจากสูตรอาหารที่ฉันเพิ่มและจัดเก็บไว้ในอาร์เรย์สตริงแบบคงที่ใหม่

ฉันจำเป็นต้องสร้างอาร์เรย์สตริงส่วนผสมที่มีขนาด 20 และ shoppingList เป็นอาร์เรย์สตริงแบบคงที่ที่มีขนาด 40:

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

ฉันเริ่มต้นองค์ประกอบทั้งหมดของอาร์เรย์ทั้งสองเป็นสตริงว่าง

ฉันได้ฮาร์ดโค้ดสองสูตรในโปรแกรมทดสอบของฉันดังนี้:

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");

นี่คือที่ที่ฉันนิ่งงัน:

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

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

เนื่องจากส่วนผสมของ rcp1 และ rcp2 ทั้งคู่ใช้ตำแหน่งของส่วนผสม [0, 1, 2] การพยายามเพิ่มส่วนผสมลงในรายการช็อปปิ้งแบบคงที่โดยใช้ [loc] จะส่งผลให้มีการเขียนทับตำแหน่งเหล่านั้นของสูตรแรก

ฉันได้สร้าง for loop ขึ้นมาเพื่อให้สามารถแสดงส่วนผสมของสูตรแรกได้อย่างเหมาะสม แต่ฉันไม่แน่ใจว่าจะหาตำแหน่งของสตริงว่างถัดไปได้อย่างไร เพื่อที่จะแสดงรายการส่วนผสมของสูตรที่สอง ฉันคิดว่าจะต้องใช้คำสั่ง else if แล้วจึงหาวิธีค้นหาว่าสตริงว่างถัดไปอยู่ที่ไหน เพื่อที่ฉันจะได้เริ่มเพิ่มส่วนผสมของสูตรถัดไปจากจุดนั้นได้..?

มีวิธีอื่นที่อาจง่ายกว่านี้ไหมที่ฉันสามารถนำส่วนผสมจาก rcp2 มาวางไว้หลังส่วนผสมของ rcp1 ใน shoppingList

ฉันคิดว่าฉันได้วิเคราะห์ปัญหานี้มากเกินไปแล้ว แต่ยังไม่สามารถหาวิธีแก้ไขได้ ดังนั้นฉันจะซาบซึ้งเป็นอย่างยิ่งหากใครสามารถชี้ทิศทางที่ถูกต้องให้ฉันได้ ขอบคุณ!


person Kiko    schedule 27.04.2016    source แหล่งที่มา
comment
จุดประสงค์ของฟังก์ชัน setIngredients() ของคุณคืออะไร? การวนซ้ำ for ที่อยู่ข้างในนั้นไม่มีประโยชน์ - คุณไม่ได้ใช้ตัวแปรการวนซ้ำ i ภายในเนื้อหา   -  person Mifeet    schedule 27.04.2016
comment
สิ่งที่คุณพูดดูเหมือนคุณต้องเชื่อมส่วนผสมของทั้งสองสูตรเข้ากับอาร์เรย์อื่น shoppingList ถูกต้องไหม   -  person Mifeet    schedule 27.04.2016


คำตอบ (1)


คุณกำลังเผชิญกับข้อจำกัดปลอมๆ มากมาย ซึ่งคาดว่าจะเกิดขึ้นเนื่องจากนี่คือการมอบหมายหลักสูตร ปัญหาหลักของคุณคือ เห็นได้ชัดว่าคุณไม่รู้ว่าแต่ละสูตรมีส่วนผสมทั้งหมดกี่ส่วนผสมหรือในรายการช็อปปิ้ง โดยปกติแล้ว อาร์เรย์จะมีขนาดที่เหมาะสมสำหรับเนื้อหา ดังนั้นคุณจะมีจำนวนรายการใน arr.length มิฉะนั้นจะใช้คลาสใดคลาสหนึ่งในกรอบงานคอลเลกชัน เช่น ArrayList

อย่างไรก็ตาม คุณกำลังใช้บัฟเฟอร์ที่มีขนาดคงที่ ซึ่งหมายความว่าคุณจะต้องติดตาม ขนาดปัจจุบัน ของรายการของคุณ นอกเหนือจาก ความจุ ซึ่งเป็นสิ่งที่ arr.length มอบให้คุณ มีสองวิธีที่คุณสามารถทำได้:

  • อย่างชัดเจนโดยมีตัวแปร int ที่เกี่ยวข้องกับแนวคิดกับอาร์เรย์เพื่อหมายถึง "องค์ประกอบแรกที่ไม่ได้ใช้" เมื่อคุณเพิ่มองค์ประกอบใหม่ คุณจะเริ่มต้นที่ดัชนีนั้น และเพิ่มตัวแปรนั้นสำหรับส่วนผสมใหม่ทุกรายการที่เพิ่มลงในรายการ นี่คือสิ่งที่ ArrayList ทำ
  • โดยปริยายโดยมีสตริง "เครื่องหมาย" บางอย่างที่จะหมายถึง "ไม่ได้ใช้" นี่อาจเป็นอินสแตนซ์ String ที่เหมาะสมหรือเพียงแค่ null โดยพื้นฐานแล้วนี่คือสิ่งที่ C ทำกับตัวยุติสตริง '\0'

แต่ละตัวเลือกมีข้อดีข้อเสียที่แตกต่างกันและต้องมีการใช้งานที่แตกต่างกัน ซึ่งฉันไม่ได้เพิ่มไว้ที่นี่เนื่องจากคุณต้องคิดเกี่ยวกับมันเป็นส่วนหนึ่งของหลักสูตรของคุณ! อย่าลังเลที่จะถามเพิ่มเติมหากคุณยังติดขัดอีกครั้ง

person Javier Martín    schedule 27.04.2016