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

我是处理环境的新手,正在尝试构建一个用于冒泡排序的可视化工具。我对此有一些疑问 -

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

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

  • 这可以在 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));

  }

}


牛魔王的故事
浏览 81回答 1
1回答

杨__羊羊

矩形的可视化和绘制是否正确?这是基于意见的。但它确实有效,所以是的。该代码结构良好并遵循基本准则。如何为当前正在比较的矩形着色?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 来说是偏离主题的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决问题所采取的措施。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java