การเริ่มต้นอาร์เรย์บูลีนใน java


102

ฉันมีรหัสนี้

public static Boolean freq[] = new Boolean[Global.iParameter[2]];
freq[Global.iParameter[2]] = false;

ใครช่วยบอกทีว่าฉันทำอะไรผิดที่นี่และฉันจะแก้ไขอย่างไร ฉันต้องเริ่มต้นองค์ประกอบอาร์เรย์ทั้งหมดเป็น Boolean false ขอบคุณ

คำตอบ:


285

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

ใช้boolean[]แทนเพื่อให้ค่าทั้งหมดเป็นค่าเริ่มต้นfalse:

boolean[] array = new boolean[size];

หรือใช้Arrays#fill()เพื่อเติมเต็มอาร์เรย์ทั้งหมดด้วยBoolean.FALSE:

Boolean[] array = new Boolean[size];
Arrays.fill(array, Boolean.FALSE);

โปรดทราบว่าดัชนีอาร์เรย์เป็นศูนย์ บรรทัดที่คุณได้ก็จะก่อให้เกิดfreq[Global.iParameter[2]] = false; ArrayIndexOutOfBoundsExceptionหากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับอาร์เรย์ใน Java โปรดดูบทช่วยสอน Oracle พื้นฐานนี้


3
โค้ดชิ้นที่สองมีประโยชน์ในกรณีที่เราต้องการเริ่มต้น (ตั้งค่า) เป็นค่าจริงทั้งหมด ตอบโจทย์มาก!
เผด็จการ

3
ฉันอยากจะผกผันชื่อตัวแปรและใช้ค่าเริ่มต้นเริ่มต้นด้วยค่าเท็จ
BalusC

ฉันจริงในความโปรดปรานของBoolean[] arrayมันช่วยให้คุณมีสามรัฐสำหรับแต่ละองค์ประกอบ: true, falseและnullซึ่งจะเป็นประโยชน์สำหรับกรณีที่คุณต้องการทราบว่าสิ่งที่ "ไม่ได้ประมวลผล"
Abhishek Divekar

20

อาร์เรย์จะเริ่มต้นเป็นเท็จเมื่อคุณจัดสรร

อาร์เรย์ทั้งหมดใน Java เริ่มต้นเป็นค่าดีฟอลต์สำหรับชนิด ซึ่งหมายความว่าอาร์เรย์ของ ints เริ่มต้นเป็น 0 อาร์เรย์ของบูลีนจะเริ่มต้นเป็นเท็จและอาร์เรย์ของชนิดการอ้างอิงเริ่มต้นเป็น null


12
เขาใช้Booleanไม่ได้จึงจะเริ่มต้นboolean null
BalusC

1
แก้ไข. ฉันไม่เห็นสิ่งนั้น Arrays.fill ควรทำเคล็ดลับ
Jørgen Fogh

9

อาร์เรย์ใน Java เริ่มสร้างดัชนีที่ 0 ดังนั้นในตัวอย่างของคุณคุณกำลังอ้างถึงองค์ประกอบที่อยู่นอกอาร์เรย์ทีละรายการ

มันน่าจะเป็น freq [Global.iParameter [2] -1] = false;

คุณจะต้องวนรอบอาร์เรย์เพื่อเริ่มต้นทั้งหมดบรรทัดนี้เริ่มต้นองค์ประกอบสุดท้ายเท่านั้น

อันที่จริงฉันค่อนข้างแน่ใจว่าเท็จเป็นค่าเริ่มต้นสำหรับบูลีนใน Java ดังนั้นคุณอาจไม่จำเป็นต้องเริ่มต้นเลย

ขอแสดงความนับถืออย่างสูง


2
เขาใช้Booleanไม่ได้จึงจะเริ่มต้นboolean null
BalusC

5

โดยจะเริ่มต้นเป็นfalseค่าเริ่มต้น ในอาร์เรย์ Java ถูกสร้างขึ้นบนฮีปและทุกองค์ประกอบของอาร์เรย์จะได้รับค่าดีฟอลต์ขึ้นอยู่กับประเภทของอาร์เรย์ สำหรับข้อมูลพิมพ์ค่าเริ่มต้นคือbooleanfalse


3
เขาใช้Booleanไม่ได้จึงจะเริ่มต้นboolean null
BalusC

ฉันตั้งใจจะใช้บูลีนฉันไม่ดี ... ขอโทษที่ทำให้เข้าใจผิด
leba-lev

2

ความถี่บูลีนคงที่สาธารณะ [] = บูลีนใหม่ [Global.iParameter [2]];

Global.iParameter [2]:

ควรเป็นค่า const


1
นี่ไม่เป็นความจริง. อาจเป็นตัวแปรได้เช่นกัน ปัญหาคือคุณกำลังใช้ Global.iParameter [2] เพื่อเข้าถึงอาร์เรย์ แต่ดัชนีจะเริ่มจาก 0 จนเหลือเพียง Global.iParameter [2] -1 !!
Karussell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.