วิธีการเริ่มต้นอาร์เรย์ใน Java?


434

ฉันกำลังเริ่มต้นอาร์เรย์เช่นนี้

public class Array {

    int data[] = new int[10]; 
    /** Creates a new instance of Array */
    public Array() {
        data[10] = {10,20,30,40,50,60,71,80,90,91};
    }     
}

NetBeans ชี้ไปที่ข้อผิดพลาดที่บรรทัดนี้:

data[10] = {10,20,30,40,50,60,71,80,90,91};

ฉันจะแก้ปัญหาได้อย่างไร


3
คุณสามารถแทนที่ "int data [] = new int [10]" โดย "int data []" คุณกำลังสูญเสียความทรงจำที่นั่น
missingfaktor

คำตอบ:


642
data[10] = {10,20,30,40,50,60,71,80,90,91};

ด้านบนไม่ถูกต้อง (ข้อผิดพลาดทางไวยากรณ์) มันหมายความว่าคุณกำลังกำหนดอาเรย์data[10]ที่สามารถเก็บเพียงองค์ประกอบ

หากคุณต้องการเริ่มต้นอาร์เรย์ลองใช้Array Initializer :

int[] data = {10,20,30,40,50,60,71,80,90,91};

// or

int[] data;
data = new int[] {10,20,30,40,50,60,71,80,90,91};

สังเกตเห็นความแตกต่างระหว่างสองประกาศ เมื่อกำหนดอาร์เรย์ใหม่ให้กับตัวแปรที่ประกาศnewจะต้องใช้

แม้ว่าคุณจะแก้ไขไวยากรณ์การเข้าถึงdata[10]ยังคงไม่ถูกต้อง (คุณเท่านั้นที่สามารถเข้าถึงdata[0]ไปdata[9]เพราะดัชนีของอาร์เรย์ใน Java เป็น 0-based) การเข้าถึงdata[10]จะโยนArrayIndexOutOfBoundsException


2
จริงๆแล้วเหตุผลหลักที่มันไม่ถูกต้องก็คือมันเป็นข้อผิดพลาดทางไวยากรณ์! AIOB จะเกิดขึ้นก็ต่อเมื่อไวยากรณ์เป็นที่ยอมรับ
สตีเฟ่น C

1
คุณช่วยฉันหน่อยได้ไหมถ้าฉันประกาศอาร์เรย์เช่นนี้: public static void product(int[] array){ int[] productArray = new int[array.length];และต้องการตั้งค่าทั้งหมดเป็นproductArray ศูนย์ฉันควรเขียนอะไร (ฉันคิดว่าฉันควรเขียนลูปและตั้งค่าทั้งหมดเป็นศูนย์มีวิธีใดที่จะทำสิ่งนี้ได้ดีกว่านี้หรือไม่)
Hengameh

2
@Hengameh: มันถูกเตรียมใช้งานเป็น 0 โดยค่าเริ่มต้น ดูstackoverflow.com/a/2154340/1000655
Neal Gokli

39

ลอง data = new int[] {10,20,30,40,50,60,71,80,90,91 };


1
+1 คุณมีเหล็กดัดเปิดที่พิเศษ หนึ่งยังสามารถเขียน: data [0] = 10; ข้อมูล [1] = 20; .... หลังจาก int data [] = new int [10] แต่มันเป็นรหัสที่มากเกินไปและมันจะจบลงด้วยการทำสิ่งเดียวกัน
Hamish Grubijan

28

เมื่อคุณสร้างอาร์เรย์ขนาด 10 มันจะจัดสรร 10 สล็อต แต่จาก 0 ถึง 9 การทำเช่นนี้สำหรับลูปอาจช่วยให้คุณเห็นว่าดีขึ้นเล็กน้อย

public class Array {
    int[] data = new int[10]; 
    /** Creates a new instance of an int Array */
    public Array() {
        for(int i = 0; i < data.length; i++) {
            data[i] = i*10;
        }
    }
}

16

คุณทำได้:

int[] data = {10,20,30,40,50,60,71,80,90,91};

3
ฉันสงสัยว่าสิ่งนี้มีคุณค่าเพิ่มขึ้นจากคำตอบที่ยอมรับได้เมื่อ 5 ปีก่อน
TylerH

12

วากยสัมพันธ์

 Datatype[] variable = new Datatype[] { value1,value2.... }

 Datatype variable[]  = new Datatype[] { value1,value2.... }

ตัวอย่าง:

int [] points = new int[]{ 1,2,3,4 };

8

แทนที่จะเรียนรู้เว็บไซต์ที่ไม่เป็นทางการเรียนรู้จากเว็บไซต์ oracle

ลิงค์ดังนี้: คลิกที่นี่

* คุณสามารถค้นหาการเริ่มต้นรวมทั้งการประกาศพร้อมคำอธิบายแบบเต็ม *

int n; // size of array here 10
int[] a = new int[n];
for (int i = 0; i < a.length; i++)
{
    a[i] = Integer.parseInt(s.nextLine()); // using Scanner class
}

อินพุต : 10 // ขนาดอาร์เรย์ 10 20 30 40 50 60 71 80 90 91

แสดงข้อมูล:

for (int i = 0; i < a.length; i++) 
{
    System.out.println(a[i] + " ");
}

เอาท์พุท: 10 20 30 40 50 60 71 80 90 91


3

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

data[0] = 10;
data[1] = 20;
...
data[9] = 91;

3

หากคุณต้องการเริ่มต้นอาร์เรย์ใน Constructor คุณจะไม่สามารถใช้ initializer ของอาร์เรย์เหล่านั้นได้

data= {10,20,30,40,50,60,71,80,90,91};

เพียงแค่เปลี่ยนเป็น

data = new int[] {10,20,30,40,50,60,71,80,90,91};

คุณไม่จำเป็นต้องระบุขนาดด้วยdata[10] = new int[] { 10,...,91} เพียงประกาศคุณสมบัติ / ฟิลด์ด้วยint[] data;และเริ่มต้นมันเหมือนด้านบน รหัสของคุณที่แก้ไขแล้วจะมีลักษณะดังนี้:

public class Array {

    int[] data;

    public Array() {
        data = new int[] {10,20,30,40,50,60,71,80,90,91};
    }

}

ตามที่คุณเห็นวงเล็บว่างเปล่า ไม่จำเป็นต้องบอกขนาดระหว่างวงเล็บเนื่องจากการกำหนดค่าเริ่มต้นและขนาดของมันถูกระบุโดยการนับจำนวนขององค์ประกอบระหว่างวงเล็บปีกกา


2

คุณกำลังพยายามตั้งค่าองค์ประกอบที่ 10 ของอาร์เรย์เป็นลองอาร์เรย์

data = new int[] {10,20,30,40,50,60,71,80,90,91};

FTFY


0

อาจจะใช้งานได้:

public class Array {

    int data[] = new int[10]; 
    /* Creates a new instance of Array */
    public Array() {
        data= {10,20,30,40,50,60,71,80,90,91};
    }
}

6
สิ่งนี้แตกต่างจากคำถามอย่างไร โปรดขยายคำตอบของคุณ!
อเล็กซานเดอร์โฟกท์

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