为了账号安全,请及时绑定邮箱和手机立即绑定

如何为正在比较的矩形着色?

如何为正在比较的矩形着色?

牛魔王的故事 2023-09-27 21:25:55
我是处理环境的新手,正在尝试构建一个用于冒泡排序的可视化工具。我对此有一些疑问 -矩形的可视化和绘制是否正确?如何为当前正在比较的矩形着色?这可以在 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));  }}
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

矩形的可视化和绘制是否正确?

这是基于意见的。但它确实有效,所以是的。该代码结构良好并遵循基本准则。


如何为当前正在比较的矩形着色?

fill()在绘制矩形之前,您必须设置单独的颜色。颜色由红色、绿色和蓝色通道组成。通道混合成最终颜色。如果所有 3 个通道具有相同的比例,则颜色为灰度颜色。(0, 0, 0) 为黑色,(255, 255, 255) 为白色。

例如,将比较的矩形着色为红色,将所有其他矩形着色为灰色。比较的矩形具有索引ii-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 来说是偏离主题的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决问题所采取的措施。


查看完整回答
反对 回复 2023-09-27
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信