java - 如何为正在比较的矩形着色?
问题描述
我是处理环境的新手,正在尝试为冒泡排序构建可视化工具。我对此有一些疑问-
- 矩形的可视化和绘制是否正确?
- 如何为当前正在比较的矩形着色?
- 这可以在 java 中使用 Swing 或任何本机库(即无需处理)来完成吗?如果是,请提供一些资源。
int totalNum = 10;
int[] values = new int[totalNum];
int i = 1;
int noOfComp = 0;
void draw() {
float rectPos = 0;
frameRate(10);
background(255);
for (int i = 0; i< totalNum; i++) {
//text(values[i], rectPos , values[i]);
stroke(220);
fill(50);
rect(rectPos, height - values[i], width / totalNum, values[i]);
rectPos += width / totalNum;
}
textSize(20);
text("No. Of Comparisons: ", 15, 40);
text(noOfComp, 80, 60);
bubbleSort();
}
void bubbleSort() {
if (i < totalNum) {
if (values[i] < values[i-1] && noOfComp++ > 0) {
fill(255,5,5);
swap(i, i-1);
delay(100);
}
i++;
} else {
i = 1;
}
}
void swap(int a, int b) {
int temp = values[a];
values[a] = values[b];
values[b] = temp;
}
void setup() {
size(700, 700);
for (int i = 0; i< totalNum; i++) {
values[i] = round(random(0, height));
}
}
解决方案
矩形的可视化和绘制是否正确?
那是基于意见的。但它有效,所以是的。该代码结构良好,并遵循基本准则。
如何为当前正在比较的矩形着色?
fill()
你必须在绘制矩形之前设置一个单独的颜色。颜色由红色、绿色和蓝色通道组成。通道混合成最终颜色。如果所有 3 个通道具有相同的比例,则颜色为灰度颜色。(0, 0, 0) 是黑色, (255, 255, 255) 是白色。
例如,将比较的矩形涂成红色,将所有其他矩形涂成灰色。比较的矩形具有索引i
和i-1
。
由于for
循环的控制变量也命名为i
,因此必须更改(例如j
):
for (int j = 0; j < totalNum; j++) {
// [...]
}
将索引i
与控制变量进行比较j
。如果 j==i-1
或j==i
然后设置红色填充颜色 ( fill(255, 0, 0)
) 否则为灰色 ( fill(127)
):
for (int j = 0; j < totalNum; j++) {
stroke(220);
if (j==i-1 || j==i) {
fill(255, 0, 0);
} else {
fill(127);
}
rect(rectPos, height - values[j], width / totalNum, values[j]);
rectPos += width / totalNum;
}
如果您只想为“交换的”矩形着色,则必须确定何时noOfComp
发生了变化。在调用prevNoOfComp
之前的变量中声明先前的交换计数。bubbleSort
如果交换计数发生变化,只需使用不同的颜色 ( if (noOfComp != prevNoOfComp && (j==i-1 || j==i))
):
int noOfComp = 0;
int prevNoOfComp = 0;
void draw() {
float rectPos = 0;
frameRate(10);
background(255);
for (int j = 0; j < totalNum; j++) {
stroke(220);
if (noOfComp != prevNoOfComp && (j==i-1 || j==i)) {
fill(255, 0, 0);
} else {
fill(127);
}
rect(rectPos, height - values[j], width / totalNum, values[j]);
rectPos += width / totalNum;
}
textSize(12);
text("No. Of Comparisons: ", 15, 40);
text(noOfComp, 80, 60);
prevNoOfComp = noOfComp;
bubbleSort();
}
[...] 可以使用 Swing 或任何本机库在 java 中完成
要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。
推荐阅读
- javascript - Nodejs:为什么 db.collection().find() 记录多次?
- activerecord - Yii2 只显示附加时间小于当前时间的数据
- html - Bootstrap 可见性实用程序在不应该隐藏元素时隐藏了它
- python - 如何在 SQLite3 for python 中合并两个查询的结果?
- html - 如何阻止 contenteditable div 溢出?
- javascript - 如何使离子元素漂浮在离子头上
- python - Azure - numpy - OSError:[WinError 193] %1 不是有效的 Win32 应用程序
- typescript - 类型错误:book.isEqual 不是函数
- python - 当我尝试使用 IBM-Watson 更改 Speech-to-Text 的语言时出现错误 404
- bash - 如何将带有 if 检查的 curl 结果附加到文件中?