したがって、8 つのエントリを持つ Graph という ArrayList があります。エントリ 1 は「ソース」と呼ばれる整数配列への参照であり、エントリ 2 ~ 8 は「データ」と呼ばれる整数配列への参照です。ただし、私が本当にやりたかったのは、データへの参照を保存するのではなく、「ソース」と「データ」内にデータを保存することだけでした。このため、「データ」を変更すると「グラフ」が台無しになり、「グラフ」に格納されたデータを編集するのは面倒です。
この時点で、while/for ループで一度に 1 つずつ「Graph」からデータを引き出し、それを temp という整数配列に格納し、temp を変更してから「Graph」に格納できるようにしたいと考えています。 、しかし、これは最終的に「Graph」のすべてのエントリが「temp」への参照であり、最終的にはすべて同じ値を持つことを意味するため、これは機能しません。これはもちろん間違っています。
この問題を回避できるように、Graph でデータを編集する、またはこれを再構築する良い方法は何ですか?
これがコードです。グラフの作成方法を示すテキスト ファイルからデータを読み込んでいます。
BufferedReader br = new BufferedReader(new FileReader("graph.txt"));
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while(line.charAt(z)!=' '){
sizeString=sizeString+line.charAt(z);
z++;
}
size = Integer.valueOf(sizeString);
int graph[][] = new int[size][size];
while (line != null) {
sb.append(line);
sb.append("\n");
line = br.readLine();
z=0;
if(line != null){
while(line.charAt(z)!=' '){
xString=xString+line.charAt(z);
z++;
}
z++;
while(line.charAt(z)!=' '){
yString=yString+line.charAt(z);
z++;
}
z++;
while(z<line.length()){
weightString=weightString+line.charAt(z);
z++;
}
System.out.println(xString+yString+weightString);
x=Integer.valueOf(xString);
y=Integer.valueOf(yString);
weight=Integer.valueOf(weightString);
graph[x][y]=weight;
xString="";yString="";weightString="";
vertices++;
}
}
//Set non adjacent node weights to infinity
ArrayList Graph = new ArrayList();
int[] source = new int[2];
int[] data = new int[2];
source[0]=0;
source[1]=-1;
Graph.add(0,source);
data[0]=99999; //Represents 'infinity'
data[1]=-1; //No source node
x=1;
while(x<graph.length){
Graph.add(x, data);
x++;
}