Java:如何遍历未满到最大大小的数组。

Java:如何遍历未满到最大大小的数组。,java,arrays,Java,Arrays,对于我的问题,我必须编写一个方法,该方法将接受用户输入并创建一个对象数组。但是,可以创建任意数量的对象。因此,数组大小为100,但只填充了数组中的2个元素。现在,当我使用getAverage方法时,在经过存储的对象之后,我会得到一个空点异常 public class Item{ public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("E

对于我的问题,我必须编写一个方法,该方法将接受用户输入并创建一个对象数组。但是,可以创建任意数量的对象。因此,数组大小为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;
}
公共类项目{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入数组中要输入的对象数”);
int numOfEntries=input.nextInt();
Item[]itemArray=新项目[100];
Item.input(itemArray,numOfEntries);
System.out.println(Item.getAverage(itemArray));
//Item.input(itemArray);
} 
公共静态无效输入(项目[]arr){
扫描仪输入=新扫描仪(System.in);
双倍价格=0;
双平均=0;
双numofEntries=0;
对于(int i=0;i
简单,只需在使用值之前检查null:

for( int j = 0; j < numofEntries; j++) {
    if(arr[j] == null){
        continue; //break? if you hit one null, can you gurantee everything after is null?
    }
}
for(int j=0;j
简单,只需在使用值之前检查null:

for( int j = 0; j < numofEntries; j++) {
    if(arr[j] == null){
        continue; //break? if you hit one null, can you gurantee everything after is null?
    }
}
for(int j=0;j
只需添加一个空检查:

if (arr[j] != null) {
// your logic
}
更好的方法是使用类似于
ArrayList的数据结构,因为它们可以随着添加元素而增长。

只需添加一个空检查:

if (arr[j] != null) {
// your logic
}

更好的方法是使用像
ArrayList
这样的数据结构,因为它们可以随着元素的添加而增长。

我不知道为什么其他人没有注意到,但这段代码有严重的问题

public static void input(Item[] arr) {
    Scanner input = new Scanner(System.in);
    double pricesAdded = 0;
    double average = 0;
    double numofEntries = 0;//initialized to 0 and never changes
    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++;//no declaration found
    }

    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;//price added divided by 0              
            break;
        }
    }
当你循环时,使用

 for( int j = 0; j < numOfEntries; j++)
for(int j=0;j

这将解决您的问题,因为用户专门输入了项目的数量。

我不确定为什么其他人没有注意到,但此代码存在严重问题

public static void input(Item[] arr) {
    Scanner input = new Scanner(System.in);
    double pricesAdded = 0;
    double average = 0;
    double numofEntries = 0;//initialized to 0 and never changes
    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++;//no declaration found
    }

    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;//price added divided by 0              
            break;
        }
    }
当你循环时,使用

 for( int j = 0; j < numOfEntries; j++)
for(int j=0;j

这将解决您的问题,因为用户专门输入项目的数量。

保留计数器;使用哨兵值;创建新数组+1长度(uhg复杂度,但it世界“工作”);或者,我的建议是,使用列表并使生活更简单。保留计数器;使用哨兵值;创建新数组+1长度(uhg复杂,但it世界“工作”);或者,我的建议是,使用列表,让生活更简单。