对象数组点为空

时间:2019-08-31 12:56:55

标签: java arrays object static-methods

我的 eYMethods 类有2个静态方法,第一个是 writeUSB ,它用扫描仪填充了我的对象数组,而我想停止创建对象数组if (sumMemory > 80)并删除通过条件的对象。但是,当我这样做时,我在主类中调用的第二个静态方法showDocs指向null原因示例:(如果我创建了2个对象数组,而第一个覆盖了sumMemory的条件,则第二个对象数组会从我的吸气剂中等待一些值因此它指向null)。我该如何解决?

package eymain;

public class eYMethods {

    static int writeUSB(ekpaideytikoYliko usb[]) {

        double sumMemory = 0 ;
        int noOfObjects = 0;
        for(int i = 0; i < usb.length; i++) {                  
            System.out.println("Δωσε fileName : ");
            String fileName = scannerUserInput.getString();
            System.out.println("Δωσε minutes : ");
            double minutes = scannerUserInput.getDouble();
            System.out.println("Δωσε memorySpace");
            double memorySpace = scannerUserInput.getDouble();
            System.out.println();
            ekpaideytikoYliko tempEkpaideytikoYliko = new ekpaideytikoYliko(fileName, minutes, memorySpace);
            usb[i] = tempEkpaideytikoYliko;
            noOfObjects++;
            sumMemory += memorySpace;
            if (sumMemory > 80) {  
                noOfObjects--;                
                System.out.println("OverLimit");
                break;               
            }
        }

        System.out.println("sumMemory : " + sumMemory);
        return noOfObjects;

    }
    static void showDocs(ekpaideytikoYliko usb[]) {

        for(int i =0; i < usb.length; i++) {
            System.out.println("fileName : " + usb[i].getFileName());
            System.out.println("minutes : " + usb[i].getMinutes());
            System.out.println("memorySpace : " + usb[i].getMemorySpace());
            System.out.println();
        }
    }
 }

2 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,那么您会尝试找到一种方法来在ekpaideytikoYliko tempEkpaideytikoYliko = new ekpaideytikoYliko(fileName, minutes, memorySpace);大于80时不将usb添加到sumMemory数组中(如果是这种情况)在检查tempEkpaideytikoYliko小于或等于80之后,可以通过在数组中添加if sumMemory来轻松实现此目的:

static int writeUSB(ekpaideytikoYliko usb[]) {

        double sumMemory = 0 ;
        int noOfObjects = 0;
        for(int i = 0; i < usb.length; i++) {                  
            System.out.println("Δωσε fileName : ");
            String fileName = scannerUserInput.getString();
            System.out.println("Δωσε minutes : ");
            double minutes = scannerUserInput.getDouble();
            System.out.println("Δωσε memorySpace");
            double memorySpace = scannerUserInput.getDouble();
            System.out.println();

            sumMemory += memorySpace;
            if (sumMemory > 80) {                 
                System.out.println("OverLimit");
                break;               
            }else{
                ekpaideytikoYliko tempEkpaideytikoYliko = new ekpaideytikoYliko(fileName, minutes, memorySpace);
                usb[i] = tempEkpaideytikoYliko;
                noOfObjects++;
            }
        }

        System.out.println("sumMemory : " + sumMemory);
        return noOfObjects;

    }

答案 1 :(得分:1)

好的,因此似乎是由于usb[i]null而您正在尝试执行此操作,从而导致了该问题的发生:

 System.out.println("fileName : " + usb[i].getFileName());

它将尝试在null上调用方法并为您提供NPE。

解决方案1:测试是否为空。

static void showDocs(ekpaideytikoYliko usb[]) {
    for (int i = 0; i < usb.length && usb[i] != null; i++) {
         ....
    }
}

解决方案2:传递并使用noOfObjects

static void showDocs(ekpaideytikoYliko usb[], int noOfObjects) {
    for (int i = 0; i < usb.noOfObjects; i++) {
         ....
    }
}

解决方案3:使用List<ekpaideytikoYliko>代替ekpaideytikoYliko[]

这是最干净的,因为它也解决了另一个问题。如果您使用List,则不必预先分配“足够大”的数组,并希望它是足够的。


样式。

根据Google翻译,“ ekpaideytikoYliko”是两个词:可能是εκπαιδευτικΥλικο,被音译成罗马字符。因此正确的类名称应为:

  EkpaideytikoYliko

类名称应始终以大写字母开头。

或某些变化