有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:我如何迭代一个未满到最大大小的数组。

对于我的问题,我必须编写一个方法,该方法将接受用户输入并创建一个对象数组。但是,可以创建任意数量的对象。因此,数组大小为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;
}

共 (3) 个答案

  1. # 1 楼答案

    只需添加一个空检查:

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

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

  2. # 2 楼答案

    很简单,只需在使用该值之前检查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?
        }
    }
    
  3. # 3 楼答案

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

    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;
            }
        }
    

    您可以修复这些问题,并使用全局变量来保持计数

    public class Item{
    
        static int numOfEntries;//global variable
    
        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");
            numOfEntries = input.nextInt();//initialize the global variable
    
            Item[] itemArray = new Item[100];
            Item.input(itemArray, numOfEntries);
            System.out.println(Item.getAverage(itemArray));
            //Item.input(itemArray);
        } 
    

    当你循环时,使用

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

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