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

Processing构建图结构:Graph类addNode方法实现报错求助

问题分析与修正方案

首先,你的核心问题是误解了ArrayList的add()方法用法,同时addNode方法的参数设计不符合Node类的实际属性逻辑——x、y、r、col应该是Node的属性值,而非Node对象本身。

错误原因拆解

  • ArrayList的add()方法重载限制:
    Java(Processing基于Java)中ArrayList<Node>的add()只有两种常用重载:

    • add(Node item):直接添加一个Node实例到列表末尾
    • add(int index, Node item):在指定索引位置插入Node实例
      你写的this.node.add(c,x,y,r,col)试图传入5个参数,完全不符合add()的参数要求,这就是报错的根源。
  • addNode方法的参数设计错误:
    你传入了5个Node对象作为参数,但实际上x(坐标)、y(坐标)、r(半径)、col(颜色)应该是创建Node实例时需要的属性值,而非Node对象。

修正后的代码示例

假设你的Node类构造函数是这样设计的(符合Processing图形节点的常见属性):

class Node {
  float x, y;
  float r;
  color col;

  Node(float x, float y, float r, color col) {
    this.x = x;
    this.y = y;
    this.r = r;
    this.col = col;
  }

  // 你已实现的其他Node方法,比如draw()等
}

那么Graph类的正确写法应该是:

import java.util.ArrayList;

public class Graph {
  // 命名更清晰:nodes表示多个节点
  ArrayList<Node> nodes = new ArrayList<Node>();

  // 提供无参构造,方便初始化空图
  public Graph() {
    this.nodes = new ArrayList<>();
  }

  // 提供可选的构造函数,支持传入已有的节点列表
  public Graph(ArrayList<Node> initialNodes) {
    this.nodes = initialNodes;
  }

  // 方法1:直接传入一个已创建好的Node实例
  void addNode(Node newNode) {
    this.nodes.add(newNode);
  }

  // 方法2:接收创建Node所需的属性,内部创建Node并添加(更易用)
  void addNode(float x, float y, float r, color col) {
    Node newNode = new Node(x, y, r, col);
    this.nodes.add(newNode);
  }
}

使用示例

在Processing的主sketch中,你可以这样调用:

void setup() {
  size(600, 400);
  Graph myGraph = new Graph();
  
  // 用方法2直接传入属性创建节点
  myGraph.addNode(100, 100, 20, color(255,0,0));
  
  // 或者先创建Node实例,再用方法1添加
  Node anotherNode = new Node(200, 200, 30, color(0,255,0));
  myGraph.addNode(anotherNode);
}

这样就能正确实现向Graph中添加Node的功能,不会再出现参数不匹配的报错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:48:44