如何将数组转为控制台空格列表及按序使用g2d.drawLine绘图
我来帮你搞定这两个Java相关的问题:
问题1:把数组转为控制台空格分隔的列表
如果你有一个像[3, 5, 7, 9, ..., n]这样的数组,要在控制台输出成空格分隔的形式,有两种简单好用的方法:
- 方法1:用Java 8+的Stream和String.join(简洁版)
先把int数组转成字符串流,再拼接成空格分隔的字符串:
int[] nums = {3, 5, 7, 9, 11}; String output = String.join(" ", Arrays.stream(nums).mapToObj(String::valueOf).toArray(String[]::new)); System.out.println(output); // 输出:3 5 7 9 11
- 方法2:循环拼接(兼容所有Java版本)
手动遍历数组,用StringBuilder来拼接,避免频繁创建字符串对象:
int[] nums = {3, 5, 7, 9, 11}; StringBuilder sb = new StringBuilder(); for (int i = 0; i < nums.length; i++) { if (i != 0) { sb.append(" "); // 不是第一个元素就加空格 } sb.append(nums[i]); } System.out.println(sb.toString()); // 输出同样的结果
问题2:按顺序使用drawLine绘制图形
从你的代码片段来看,你应该是想把收集到的整数按x1,y1,x2,y2的顺序传入g2d.drawLine(),这里分两种常见场景给你代码:
场景1:每4个整数画一条独立的线(x1,y1到x2,y2为一组)
假设你的array里已经按[x1,y1,x2,y2,x3,y3,x4,y4,...]的顺序存好了坐标,那可以按步长4遍历:
// 确保Graphics2D对象g2d已经初始化 for (int i = 0; i < array.size(); i += 4) { // 防止数组越界,剩下的元素不够一组就停止 if (i + 3 >= array.size()) { break; } int x1 = array.get(i); int y1 = array.get(i + 1); int x2 = array.get(i + 2); int y2 = array.get(i + 3); g2d.drawLine(x1, y1, x2, y2); }
场景2:连续画线(从(x1,y1)到(x2,y2),再到(x3,y3)...)
如果是想把坐标点依次连接起来,那可以按步长2遍历,记录上一个点的坐标:
if (array.size() >= 2) { int prevX = array.get(0); int prevY = array.get(1); for (int i = 2; i < array.size(); i += 2) { if (i + 1 >= array.size()) break; int currX = array.get(i); int currY = array.get(i + 1); g2d.drawLine(prevX, prevY, currX, currY); // 更新上一个点为当前点,准备下一条线 prevX = currX; prevY = currY; } }
另外,看你代码里有array和array2两个列表,如果是array存x坐标、array2存对应y坐标的话,那可以这样遍历连续点:
// 先确保两个列表长度一致,且至少有2个点 if (array.size() == array2.size() && array.size() >= 2) { for (int i = 0; i < array.size() - 1; i++) { int x1 = array.get(i); int y1 = array2.get(i); int x2 = array.get(i + 1); int y2 = array2.get(i + 1); g2d.drawLine(x1, y1, x2, y2); } }
内容的提问来源于stack exchange,提问作者twyeld
相关产品推荐
相关产品推荐

