【发布时间】:2021-06-26 15:45:24
【问题描述】:
package set01;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class DFTList {
static List<Integer>[] list;
static boolean[] visited;
public DFTList(int nodes) {
list = new ArrayList[nodes];
visited = new boolean[nodes];
for(int i=0;i<nodes;i++) {
list[i] = new ArrayList<>();
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter no. of nodes : ");
int nodes = scan.nextInt();
DFTList obj = new DFTList(nodes);
System.out.println("Enter no.of vertex : ");
int vertex = scan.nextInt();
for(int i=0;i<vertex;i++) {
int v1 = scan.nextInt();
int v2 = scan.nextInt();
list[v1].add(v2);
list[v2].add(v1);
}
solve(0);
}
public static void solve(int a) {
visited[a] = true;
ArrayList<Integer> l = list[a];
}
}
在上面的代码 sn-p 中,在DFTList 构造函数中,我在数组的所有索引处插入了ArrayList 对象。但是,当我尝试在 solve 方法 中检索相同的对象并将其存储在 same reference 下时,我遇到了一个错误,指出“类型不匹配:无法从列表到 ArrayList”。为什么会出现这个错误?
【问题讨论】:
-
顺便说一句,每次创建新实例时(在构造函数中)设置静态字段意味着每个新实例都会覆盖前一个实例使用的字段。要解决此问题,应将字段和
solve方法设为非静态。然后将在实例上进行所有操作,而不是静态方法:DFTList obj = new DFTList(nodes); ... obj.list[v1].add(v2); obj.list[v2].add(v1); ... obj.solve(0);。
标签: java casting compiler-errors