我的 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();
}
}
}
答案 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
类名称应始终以大写字母开头。
或某些变化