如何使用 ArrayList of ArrayLists of Integers?
How to work with ArrayList of ArrayLists of Integers?
我正在尝试在 Java 中使用整数数组列表的数组列表,代码:
属性和构造函数
int V;
ArrayList<ArrayList<Integer>> gpond;
ArrayList<Integer> vpond;
GrPond(int v){ //Number of total nodes (arraylists in the main arraylist)
V=v;
gpond = new ArrayList<>();
for(int i=0;i<V;i++){
gpond.add(new ArrayList<Integer>(V));
}
}
我正在使用此方法将整数 ArrayList 添加到主 ArrayList (gpond)
void VPond(int v, int w,int val){ // v=origin, w=destination, val=value.
ArrayList<Integer> temp = new ArrayList<Integer>(V);
for(int i=0;i<V;i++){
temp.add(null);
}
temp.set(w, val); //I want to set in the given index a certain value
gpond.add(v, temp); //Then, add that ArrayList with the value (val)
//at the given index (w), to the main ArrayList.
}
并尝试使用以下方式打印它:
void printGraph(){
for(int i=0;i<V;i++){
System.out.println("node "+i);
if(gpond.get(i)!=null){ //Just want to print those who are occupied
for(int j=0;j<V;j++){ //j<V, because each ArrayList<Integer> has maximum V values
if(gpond.get(i).get(j)!=null) //Just print the indexes with a given value
System.out.println("["+i+"]-> ["+j+"] | val: "+gpond.get(i).get(j));
}
}
}
for(ArrayList<Integer> e: gpond){ //Just want to test each ArrayList of the main ArrayList
System.out.println("e: "+ e);
}
}
如果输入是,我希望它做什么,可以说:
v,w,val:
0 1 2
0 2 1
1 0 1
e: [null, 2, null], [null, null, 1] //or something like this. e=origin, [index->value]
e: [1, null, null]
是打印
node 0
[0]->[1] | val: 2
[0]->[2] | val: 1
[1]->[0] | val: 1
而是打印:
node 0
[0]->[2] | val: 1
node 1
[1]->[0] | val: 1
node 2
[2]->[1] | val: 2
e: [null, null, 1]
e: [1, null, null]
e: [null, 2, null]
我试过在 temp and/or 中为 add 更改 set gpond 在 VPond
我认为这是一个相当小的错误,但我就是想不通
您的问题是您总是在方法 VPond 中创建一个全新的列表。所以你失去了你的旧价值观。您应该在 GrPond
的构造函数中创建新列表,并在 VPond
.
中设置新值
GrPond(int v){ //Number of total nodes (arraylists in the main arraylist)
V = v;
gpond = new ArrayList<>();
for(int i=0;i<V;i++){
ArrayList<Integer> temp = new ArrayList<Integer>(V);
for(int j=0;j<V;j++){
temp.add(null);
}
gpond.add(temp);
}
}
void VPond(int v, int w,int val){ // v=origin, w=destination, val=value.
List<Integer> temp=gpond.get(v);
temp.set(w, val); //I want to set in the given index a certain value
}
请考虑变量的名称。您使用 v、w、val、V、VPond、GrPond、i 和 j。如果你在写完这段代码一周后才接触它,你会完全感到困惑(就像我一样)。你连注释都翻译成你的变量名了,为什么不直接用这些意思呢?
int sizeOfLists;
List<List<Integer>> gpond;
List<Integer> vpond;
GrPond(int listSize) {
sizeOfLists = listSize;
gpond = new ArrayList<>();
for (int listIndex = 0; listIndex < sizeOfLists; listIndex++) {
List<Integer> temp = new ArrayList<>(sizeOfLists);
for (int indexInList = 0; indexInList < sizeOfLists; indexInList++) {
temp.add(null);
}
gpond.add(temp);
}
}
void VPond(int listIndex, int indexInList, int value) { listIndex=listIndex, indexInList=indexInList
List<Integer> list = gpond.get(listIndex);
list.set(indexInList, value);
}
我正在尝试在 Java 中使用整数数组列表的数组列表,代码:
属性和构造函数
int V;
ArrayList<ArrayList<Integer>> gpond;
ArrayList<Integer> vpond;
GrPond(int v){ //Number of total nodes (arraylists in the main arraylist)
V=v;
gpond = new ArrayList<>();
for(int i=0;i<V;i++){
gpond.add(new ArrayList<Integer>(V));
}
}
我正在使用此方法将整数 ArrayList 添加到主 ArrayList (gpond)
void VPond(int v, int w,int val){ // v=origin, w=destination, val=value.
ArrayList<Integer> temp = new ArrayList<Integer>(V);
for(int i=0;i<V;i++){
temp.add(null);
}
temp.set(w, val); //I want to set in the given index a certain value
gpond.add(v, temp); //Then, add that ArrayList with the value (val)
//at the given index (w), to the main ArrayList.
}
并尝试使用以下方式打印它:
void printGraph(){
for(int i=0;i<V;i++){
System.out.println("node "+i);
if(gpond.get(i)!=null){ //Just want to print those who are occupied
for(int j=0;j<V;j++){ //j<V, because each ArrayList<Integer> has maximum V values
if(gpond.get(i).get(j)!=null) //Just print the indexes with a given value
System.out.println("["+i+"]-> ["+j+"] | val: "+gpond.get(i).get(j));
}
}
}
for(ArrayList<Integer> e: gpond){ //Just want to test each ArrayList of the main ArrayList
System.out.println("e: "+ e);
}
}
如果输入是,我希望它做什么,可以说:
v,w,val:
0 1 2
0 2 1
1 0 1
e: [null, 2, null], [null, null, 1] //or something like this. e=origin, [index->value]
e: [1, null, null]
是打印
node 0
[0]->[1] | val: 2
[0]->[2] | val: 1
[1]->[0] | val: 1
而是打印:
node 0
[0]->[2] | val: 1
node 1
[1]->[0] | val: 1
node 2
[2]->[1] | val: 2
e: [null, null, 1]
e: [1, null, null]
e: [null, 2, null]
我试过在 temp and/or 中为 add 更改 set gpond 在 VPond
我认为这是一个相当小的错误,但我就是想不通
您的问题是您总是在方法 VPond 中创建一个全新的列表。所以你失去了你的旧价值观。您应该在 GrPond
的构造函数中创建新列表,并在 VPond
.
GrPond(int v){ //Number of total nodes (arraylists in the main arraylist)
V = v;
gpond = new ArrayList<>();
for(int i=0;i<V;i++){
ArrayList<Integer> temp = new ArrayList<Integer>(V);
for(int j=0;j<V;j++){
temp.add(null);
}
gpond.add(temp);
}
}
void VPond(int v, int w,int val){ // v=origin, w=destination, val=value.
List<Integer> temp=gpond.get(v);
temp.set(w, val); //I want to set in the given index a certain value
}
请考虑变量的名称。您使用 v、w、val、V、VPond、GrPond、i 和 j。如果你在写完这段代码一周后才接触它,你会完全感到困惑(就像我一样)。你连注释都翻译成你的变量名了,为什么不直接用这些意思呢?
int sizeOfLists;
List<List<Integer>> gpond;
List<Integer> vpond;
GrPond(int listSize) {
sizeOfLists = listSize;
gpond = new ArrayList<>();
for (int listIndex = 0; listIndex < sizeOfLists; listIndex++) {
List<Integer> temp = new ArrayList<>(sizeOfLists);
for (int indexInList = 0; indexInList < sizeOfLists; indexInList++) {
temp.add(null);
}
gpond.add(temp);
}
}
void VPond(int listIndex, int indexInList, int value) { listIndex=listIndex, indexInList=indexInList
List<Integer> list = gpond.get(listIndex);
list.set(indexInList, value);
}