0

我的编译器一直指向这一行:

arr[i] = new specialDelivery(name,name2,weight,special);

和这个 :

arr[i] = new specialDelivery(name,name2,weight,special);

错误在标题中说明

public static void main ( String args [] )
{   
    int size = 0,distance;
    double weight = 0.0;
    String strinput,method,name,name2,special;
    Parcel arr[] = new Parcel[size];

    strinput = JOptionPane.showInputDialog ( " Enter number of parcel : " );
    size = Integer.parseInt(strinput);

    for (int i = 0; i<size; i++)
    {   
        int j = 0, k = 0;

        method = JOptionPane.showInputDialog ( "Method of delivery (normal/special):  " );  

        if (method.equals("normal"))
        {
            name = JOptionPane.showInputDialog ( " Enter your name : " );
            name2 = JOptionPane.showInputDialog ( " Enter name of receiver : " );
            strinput = JOptionPane.showInputDialog(" Enter the weight of parcel " + j + " : " );  
            weight = Double.parseDouble(strinput);

            strinput = JOptionPane.showInputDialog(" Enter the distance of delivery " + j + " (km) : " );  
            distance = Integer.parseInt(strinput);

            j++;
            arr[i] = new normalDelivery(name,name2,weight,distance); 
        }     

        if (method.equals("special"))
        {
           name = JOptionPane.showInputDialog ( " Enter your name : " );
           name2 = JOptionPane.showInputDialog ( " Enter name of receiver : " ); 
           special = JOptionPane.showInputDialog(" Enter the type of delivery(airplane/ship) :" );
           strinput = JOptionPane.showInputDialog(" Enter the weight of parcel " + j + " : " ); 
           weight = Double.parseDouble(strinput);

           j++;
           arr[i] = new specialDelivery(name,name2,weight,special);
        }
    }
}    
}
4

2 回答 2

9

您已经声明了一个 size 数组0,因为这size是创建数组时的内容。所以你不能给这个数组分配任何东西。最重要的是,数组的大小固定为 0,所以你不能做任何事情来改变它的大小。

在您为 分配一个数字后创建您的数组size,因此它从一开始就具有适当的大小:

strinput = JOptionPane.showInputDialog ( " Enter number of parcel : " );
size = Integer.parseInt(strinput);

Parcel arr[] = new Parcel[size];  // move this line down here
于 2013-08-13T00:23:33.620 回答
0

从您的代码:

int size = 0;
...
Parcel arr[] = new Parcel[size];

因此,您创建了一个长度为 0 的数组。由于 arr[0] 尝试访问第一个元素,但一个长度为零的数组有零个元素,因此您会遇到该异常。您必须为数组分配适当的非零大小,或者使用动态容器,例如ArrayList.

于 2013-08-13T00:28:09.763 回答