arrayindexoutofboundexception:0,带有初始化数组

时间:2015-12-16 21:10:24

标签: java arrays indexoutofboundsexception

好的,我的班级文件中有

import java.util.Scanner;

public class PriceArray
{
int n;
Scanner sc = new Scanner(System.in);
double pArray[];

public PriceArray(int nBooks)
{
    pArray = new double[n];
    n = nBooks;
}

public void pEntry()
{
    double p;
    for(int i =0;i<n;i++)
{
    p=-1;
    while(p<0)
    {
        System.out.println("Please enter a positive price for item #" + i);
        p = sc.nextDouble();
        pArray[i] = p;
    }

}
}

在我的测试文件中我有

public class PriceArrayTest
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int n;
do
    {
System.out.println("Please enter a positive number of books in the         store");
n = sc.nextInt();
}while(n<0);

PriceArray store = new PriceArray(n);

store.pEntry();

当调用pEntry方法时,我得到arrayindexoutofboundexception:0为该行  pArray [i] = p;  在入门方法中,我的问题是为什么我在初始化数组时出现此错误?

3 个答案:

答案 0 :(得分:2)

你需要切换&#34; n = nBooks;&#34;发生在&#34; pArray = new double [n];&#34;

答案 1 :(得分:1)

使用n初始化pArray时,请仔细查看new double[n]的值:

int n;
double pArray[];

public PriceArray(int nBooks) {
    pArray = new double[n];
    n = nBooks;
}

在代码中的那一点,n尚未分配值。 由于它是int,因此在这种情况下其值默认为0.

因此,pArray有效地使用new double[0]初始化, 一个空数组,因此引用索引0将超出范围。

一种解决方法:

public PriceArray(int nBooks) {
    pArray = new double[nBooks];
    n = nBooks;
}

另一种方式:

public PriceArray(int nBooks) {
    n = nBooks;
    pArray = new double[n];
}

答案 2 :(得分:1)

您在代码中隐藏了n的值,因此您无法获得所读取的值。

Hiding Fields

(或者如上所述,你可能只是使用了两个不同的n而没有隐藏。另一个n只是未初始化。)

此变量隐藏(或至少不同于)您在代码的其他部分中使用的值:

int n;
do
    {
        System.out.println("Please enter a positive number of books in the         store");
        n = sc.nextInt();  // <-- This 'n' hides the other n

代码的另一部分,它不使用相同的n

public class PriceArray
{
    int n;                    // <-- a *DIFFERENT* 'n'
    Scanner sc = new Scanner(System.in);
    double pArray[];


    public PriceArray(int nBooks)
    {
        pArray = new double[n];  // <-- This 'n' is not the same as the other
        n = nBooks;