You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

报错“No suitable method”:vertices.set(v, new ArrayList())行出错,求解释

问题分析与解决方案

首先,你遇到的**"No suitable method"**错误,本质是Java编译器找不到符合你调用方式的set方法。咱们拆解下核心问题:

你的vertices是List<Vertex>类型,Java中List接口的set方法签名是这样的:

E set(int index, E element)

它要求第一个参数是整数类型的索引位置,第二个参数是和列表元素类型一致的对象(这里就是Vertex)。但你调用时传的是Vertex v作为第一个参数,第二个参数是ArrayList<Edge>——既不符合参数类型要求,也和列表存储的元素类型不匹配,编译器自然找不到合适的方法,就报了这个错。

再看你的代码逻辑,insertVertex方法应该是想添加新顶点,同时为这个顶点初始化边的列表?那你的代码存在两个关键问题:

  1. 用错了List的方法:要添加新元素应该用add,而不是set(set是用来替换已有索引位置的元素)
  2. 存储结构选错了:如果要关联顶点和它的边列表,List<Vertex>做不到这种键值映射,你需要一个Map<Vertex, List<Edge>>来存储这种对应关系。

修正后的代码示例

// 用Map存储顶点与对应边列表的映射关系
Map<Vertex, List<Edge>> vertexEdges = new HashMap<>();
// 如果需要单独维护顶点列表,可保留这个List
List<Vertex> vertices = new ArrayList<>();

public Vertex insertVertex(String n){
    Vertex v = new Vertex(n);
    // 初始化该顶点的边列表并存入Map
    vertexEdges.put(v, new ArrayList<Edge>());
    // 往顶点列表添加新创建的顶点
    vertices.add(v);
    // 原方法声明返回Vertex,但你之前返回的是String类型的n,这里要修正
    return v;
}

额外说明

  • 原方法的返回值也存在编译错误:方法声明返回Vertex,但你写的return n;(n是String类型),必须改成return v;才能符合方法签名要求。
  • 如果你只是单纯想往vertices列表里添加新顶点,那只需要把错误的set调用改成vertices.add(v);即可,但这样没法维护顶点和边的关联关系,所以用Map是更合理的方案。

内容的提问来源于stack exchange,提问作者okmijn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:05:06