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
相关产品推荐
相关产品推荐

