对于我的问题,我必须编写一个方法来接受用户输入并创建一个对象数组。但是可以创建任意数量的对象。因此数组大小为 100,但仅填充了数组的 2 个元素。现在,当我使用我的 getAverage 方法时,我在它经过存储的对象后得到一个空点异常。
public class Item{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter the number of objects to input in the array");
int numOfEntries = input.nextInt();
Item[] itemArray = new Item[100];
Item.input(itemArray, numOfEntries);
System.out.println(Item.getAverage(itemArray));
//Item.input(itemArray);
}
public static void input(Item[] arr) {
Scanner input = new Scanner(System.in);
double pricesAdded = 0;
double average = 0;
double numofEntries = 0;
for ( int i = 0; i < arr.length; i++)
{
System.out.println("Enter item");
String item = input.next();
System.out.println("price");
double price = input.nextDouble();
if (price == -1) break;
arr[i] = new Item(item, price);
numOfItems++;
}
for( int j = 0; j < numofEntries; j++) {
if(arr[j].getName().equals("peas") || arr[j].getName().equals("Peas")) {
for( int k = 0; k < numOfItems; k++) {
pricesAdded = pricesAdded + arr[k].getPrice();
}
average = pricesAdded / numofEntries;
break;
}
}
if(average == 0) System.out.println("No average output " + average);
else System.out.println("The average is " + average);
for ( int i = 0; i < numofEntries; i++)
System.out.println(arr[i].toString());
}
public static double getAverage(Item[] itemArr) {
double pricesAdded = 0;
double average = 0;
for( int i = 0; i < itemArr.length; i++) {
if(itemArr[i].getName().equals("peas") || itemArr[i].getName().equals("Peas")) {
for( int k = 0; k < itemArr.length; k++) {
if ( itemArr[k].getPrice() == 0.0) break;
pricesAdded = pricesAdded + itemArr[k].getPrice();
}
average = pricesAdded / itemArr.length;
break;
}
}
return average;
}
最佳答案
只需添加一个空检查:
if (arr[j] != null) {
// your logic
}
更好的方法是使用像 ArrayList
这样的数据结构,因为它们可以随着您添加元素而增长。
关于Java:我将如何遍历一个未满到其最大大小的数组。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32663646/