类节点
class Node {
int antMinne;
int antProsessorer;
public Node(int minne, int prosessor) {
antMinne = minne;
antProsessorer = prosessor;
}
public int antProsessorer() {
return antProsessorer;
}
public boolean nokMinne(int paakrevdMinne) {
if (paakrevdMinne <= antMinne) {
return true;
}
else {
return false;
}
}
}
类机架
class Rack {
public Node[] rack;
private int noderPerRack;
public Rack(int storrelse) {
noderPerRack = storrelse;
this.rack = new Node[storrelse];
}
public void settInn(Node node, int plass) {
this.rack[plass] = node;
}
public int antNoder() {
int sum = 0;
for (int i = 0; i < noderPerRack; i++) {
if (this.rack[i] != null) {
sum ++;
}
}
return sum;
}
public int antProsessorer() {
int sumPros = 0;
for (int i = 0; i < noderPerRack; i++) {
sumPros = sumPros + this.rack[i].antProsessorer();
}
return sumPros;
}
public int noderMedNokMinne(int paakrevdMinne) {
int sum = 0;
for (int i = 0; i < noderPerRack; i++) {
if (this.rack[i].nokMinne(paakrevdMinne) == true) {
sum++;
}
}
return sum;
}
}
Class Dataklynge
import java.util.ArrayList;
import java.util.Scanner;
import java.io.File;
import java.io.IOException;
class Dataklynge {
ArrayList<Rack> racks;
Rack rack;
int noderPerRack;
ArrayList<Integer> antNoder;
ArrayList<Integer> antProsessorer;
ArrayList<Integer> minne;
int e;
public Dataklynge(String filnavn) throws IOException {
File fil = new File(filnavn);
racks = new ArrayList<Rack>();
this.antNoder = new ArrayList<Integer>();
this.minne = new ArrayList<Integer>();
this.antProsessorer = new ArrayList<Integer>();
Scanner scan = new Scanner(fil);
//scan.useDelimiter(" ");
noderPerRack = scan.nextInt();
this.e = 0;
while (scan.hasNextInt()) {
this.antNoder.add(scan.nextInt());
this.minne.add(scan.nextInt());
this.antProsessorer.add(scan.nextInt());
this.e++;
}
rack = new Rack(noderPerRack);
racks.add(rack);
scan.close();
}
public void settInnNode(Node node) {
boolean opptatt = false;
for (int i = 0; i < noderPerRack; i++) {
if (rack.rack[i] != node) {
rack.settInn(node, i);
opptatt = true;
break;
}
}
if (opptatt == false) {
Rack rack = new Rack(noderPerRack);
racks.add(rack);
}
}
public int antProsessorer() {
int sumPros = 0;
for (int i = 0; i < noderPerRack; i++) {
sumPros += racks.get(i).antProsessorer();
}
return sumPros;
}
public int noderMedNokMinne(int paakrevdMinne) {
int sum = 0;
for (Rack rack : racks) {
sum += rack.noderMedNokMinne(paakrevdMinne);
}
return sum;
}
public int antRacks() {
return racks.size();
}
}
类Hovedprogram
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
class Hovedprogram {
public static void main(String[] args) throws IOException {
Dataklynge abel = new Dataklynge("dataklynge.txt");
for (int j = 0; j < abel.e; j++) {
for (int i = 0; i < abel.antNoder.get(j); i++) {
abel.settInnNode(new Node(abel.minne.get(j), abel.antProsessorer.get(j)));
}
}
System.out.println("Noder med minst 32 GB: " + abel.noderMedNokMinne(32));
System.out.println("Noder med minst 62 GB: " + abel.noderMedNokMinne(64));
System.out.println("Noder med minst 128 GB: " + abel.noderMedNokMinne(128));
System.out.println("");
System.out.println("Antall prosessorer: " + abel.antProsessorer());
System.out.println("Antall rack: " + abel.antRacks());
Exception
Exception in thread "main" java.lang.NullPointerException
at Rack.noderMedNokMinne(Rack.java:37)
at Dataklynge.noderMedNokMinne(Dataklynge.java:65)
at Hovedprogram.main(Hovedprogram.java:13)
编辑以希望澄清。我从某些方法中获取了NullPointerException,但还不知道那么多Java,因此似乎也无法弄清楚什么地方出了问题。它说异常来自noderMedNokMinne,但是当我测试其他方法时,我得到了相同的异常。我已经测试了Node和Rack,它们没有问题,因此错误必须在Dataklynge中。任务是创建一个由多个机架组成的Dataklynge,并且机架中具有一定数量的节点。非常感谢您的帮助!
答案取决于输入文件(dataklynge.txt)或代码的用途。基本上是创建数组,像这样]
this.rack = new Node[storrelse];
但是您不必初始化所有事件,因此可以解决这样做或在访问数组之前进行检查的问题,像这样
public int antProsessorer() { int sumPros = 0; for (int i = 0; i < noderPerRack; i++) { if (this.rack[i] != null) sumPros = sumPros + this.rack[i].antProsessorer(); } return sumPros; } public int noderMedNokMinne(int paakrevdMinne) { int sum = 0; for (int i = 0; i < noderPerRack; i++) { if (this.rack[i] != null && this.rack[i].nokMinne(paakrevdMinne) == true) { sum++; } } return sum; }
...
public int antProsessorer() { int sumPros = 0; for (int i = 0; i < noderPerRack; i++) { if (i < racks.size() && racks.get(i) != null) sumPros += racks.get(i).antProsessorer(); } return sumPros; }
如果发布目标和意见,我可以告诉您哪种是修复代码的正确方法。