【发布时间】:2018-08-26 18:59:57
【问题描述】:
我没有为我的问题找到任何解决方案,所以我问,当我有多个声明时,? 和 : 运算符如何工作?
我想做的是,我在中间有像素pixel[pos] 和周围的像素,它看起来像:
0 0 0
0 x 0
0 0 0
x 是一个中心像素。
我正在检查它周围是否有任何白色 (zero) 像素。如果有人,我将像素标记为two。如果不是,那么模式看起来像:
1 1 1
1 x 1
1 1 1
1 是黑色像素,我将其设置为one。
现在,代码:
if(pixels[positionOfPixel] == one && x > 0 && x < width
&& y > 0 && y < height)
{
pixels[positionOfPixel] = pixels[positionOfPixel - 1] == zero ? two :
pixels[positionOfPixel] = pixels[positionOfPixel + 1] == zero ? two :
pixels[positionOfPixel] = pixels[positionOfPixel - offset] == zero ? two :
pixels[positionOfPixel] = pixels[positionOfPixel + offset] == zero ? two :
pixels[positionOfPixel] = pixels[positionOfPixel - offset + 1] == zero ? two :
pixels[positionOfPixel] = pixels[positionOfPixel + offset - 1] == zero ? two :
pixels[positionOfPixel] = pixels[positionOfPixel - offset - 1] == zero ? two :
pixels[positionOfPixel] = pixels[positionOfPixel - offset + 1] == zero ? two : zero;
}
我的问题是,为什么每个 one 像素都标记为 two ?为什么它没有识别像素,每个像素都是one(就像第二个模式一样)?
感谢您的任何建议!
【问题讨论】:
-
你真正的问题是什么?
-
a?b:c是具有 3 个操作数的 1 个运算符。 -
并且指导原则是谨慎使用它而不是嵌套它。您将其嵌套 8 次,并嵌入了作业以增加不可读性。这不是一个好的编码方式。
-
三元在这里是正确的选择吗?您甚至对自己的代码都进行了混淆。我认为您的实现不会因传统的
if语句而受到太大影响