การเริ่มต้นหลายอาร์เรย์ของ Android Java

เมื่อประกาศและกำหนด primitives ก่อน loop ทุกอย่างทำงานได้ดีและอาจแตกต่างออกไปในภายหลัง

//example
double sum1, sum2, sum3, sum4;
sum1 = sum2 = sum3 = sum4 = 0;
//later each gets own value correctly

เป็นไปได้ไหมที่จะสร้าง oneliner สำหรับอาร์เรย์?

//example
double[][] compare, updated; // works as intended
compare = updated = new double[SIZE][]; // makes compare=updated

ปัญหากับบรรทัดที่สองคือไม่สนใจการคำนวณต่อไปนี้ทั้งหมดสำหรับ อัปเดต และรับค่าจาก เปรียบเทียบ


person JayJayAbrams    schedule 28.07.2018    source แหล่งที่มา
comment
คุณสามารถทำเช่นนี้ได้ด้วยพื้นฐาน แต่ไม่ใช่ Object Object ใช้การอ้างอิงและอาร์เรย์ใน java คือ Object   -  person zhh    schedule 28.07.2018


คำตอบ (2)


ถ้าโดย "one-liner" คุณหมายถึงคำสั่งเดียวและเขียน new double[] หนึ่งครั้ง ใช่ คุณสามารถทำได้:

    double[] arr1, arr2;
    arr1 = (arr2 = new double[10]).clone(); // this is the line
    arr1[0] = 10;
    System.out.println(arr2[0]); // 0.0

แต่อ่านไม่ค่อยได้ จะยิ่งแย่ลงไปอีกเมื่อคุณทำเช่นนี้กับอาร์เรย์ที่มากขึ้น:

arr1 = (arr2 = (arr3 = new double[10]).clone()).clone();

ฉันขอแนะนำให้คุณยังคงใช้หลายบรรทัดเพื่อทำสิ่งนี้

person Sweeper    schedule 28.07.2018
comment
ใช่ โดยพื้นฐานแล้วฉันหมายถึงคำสั่งบรรทัดเดียว ดังนั้นจึงไม่มีวิธีอื่นใดที่สะดวกสำหรับการเริ่มต้นอาร์เรย์ที่มีขนาดเท่ากันหลายรายการใช่ไหม - person JayJayAbrams; 28.07.2018
comment
@JayJayAbrams ฉันไม่คิดว่าจะมี - person Sweeper; 28.07.2018

เป็นทางเลือกแทนคำตอบของ @Sweeper ให้ลองใช้วิธี Arrays.copyOf() ตามที่แนะนำในคำตอบนี้ โปรดทราบว่า copyOf() เมธอดเป็นประเภทที่ปลอดภัย ในขณะที่ clone() เมธอดไม่ใช่

double[] a, b, c;
c = Arrays.copyOf((b = Arrays.copyOf((a = new double[10]), a.length)), b.length);

แต่ขอย้ำอีกครั้งเหมือนกับ @Sweeper ว่าโค้ดนี้มีกลิ่นจริงๆ และคุณควรพิจารณาดำเนินการในหลายบรรทัด ดังที่ Steve McConnell พูดใน Code Complete 2nd Ed. ความจำเป็นทางเทคนิคเบื้องต้นของซอฟต์แวร์คือการจัดการความซับซ้อน (เช่น ทำให้โค้ดของคุณง่ายขึ้น) นี่ไม่ได้หมายความว่าจะต้องลดบรรทัดของโค้ด แต่ต้องทำมากกว่าเพื่อให้ผู้ที่อ่านโค้ดของคุณเข้าใจถึงสิ่งที่โค้ดทำในทันที

person entpnerd    schedule 28.07.2018
comment
ฉันไม่ได้ใช้ Arrays.copyOf เพราะฉันพยายามสร้างความรู้สึกของ a = b = c ขึ้นมาใหม่ให้มากที่สุดเท่าที่จะเป็นไปได้ ทำให้ตัวแปรอาร์เรย์อยู่ใกล้กันมากขึ้น แต่คำตอบที่ดีอยู่แล้ว +1 - person Sweeper; 28.07.2018