好的,我的班级文件中有
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; 在入门方法中,我的问题是为什么我在初始化数组时出现此错误?
答案 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
的值,因此您无法获得所读取的值。
(或者如上所述,你可能只是使用了两个不同的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;