2014-03-07 109 views
1

我需要在x,y座標上設置閾值,以便我可以分析圍繞這些座標的數字。基本上我需要在x下面設置一個低閾值1,在y下面設置1,並設置高於x的1和高於y的1的高閾值。整數閾值

我也有限制,這樣,如果x或y爲0的低閾值是0,並且如果x或y爲9的高閾值是9

代碼我迄今爲止如下: - 它的同樣y的,所以我只找到張貼關於x的閾值...

bool CheckNextTo(int X, int Y){ 
     int LowThreshX,LowthreshY; 
     int HighThreshX,HighThreshY; 

     if (X == 0){ 
      LowThreshX =0; 
      HighThreshX =X+1; 
     } 
     else if (X== 9){ 
      LowThreshX =X-1; 
      HighThreshX=9; 
     } 
     else{ 
      LowThreshX=X-1; 
      HighThreshX=X+1; 
     } 
} 

這工作我只是遊蕩,如果沒有做到這一點,我將不得不重新編寫這一切都制定出一個更簡單的方法Y閾值。我知道我可以編寫返回閾值的函數,但除此之外還有其他的東西嗎?

感謝

+1

谷歌夾緊,因爲這是你正在尋找的概念 – Samuel

+0

我可能有一些示例代碼?我查了一下,但有點困惑,它是如何分配1或1的。 – JabbaWook

回答

1

MinMax功能派上用場:

LowThresholdX= Max(0, X-1); 
HighThresholdX= Min(9, X+1); 
LowThresholdY= Max(0, Y-1); 
HighThresholdY= Min(9, Y+1); 
+0

與* if then else if * solution相比,效率會有很小的損失,因爲當'X <= 0'(或Y'= 0)'時,單個比較就足夠了。在手邊處理範圍「[0..9]」中的所有'X'值需要'20'比較而不是''19'。 –

+0

Math :: Max不是C++函數。在算法庫中使用max()宏或std :: max。看到我的(正確的)答案。 –

1

我還沒有真正理解你想要什麼,但不重複寫的東西可能會使事情更清晰的給你。

您的代碼就變成了:

bool CheckNextTo(int X, int Y){ 
     int LowThreshX = X-1; 
     int HighThreshX = X+1; 

     if (X == 0){ 
      LowThreshX = 0; 
     } 
     else if (X == 9){ 
      HighThreshX = 9; 
     } 
} 

這很可能會成爲寫:

bool CheckNextTo(int X, int Y){ 
     int LowThreshX = X-1; 
     int HighThreshX = X+1; 

     if (X == MIN){ 
      LowThreshX = X; 
     } 
     else if (X == MAX){ 
      HighThreshX = X; 
     } 
} 
2

您可以使用三元如果運算符,這是內置在許多語言(C和C++包括)

(條件?然後:其他)

LowThresholdX= (X == 0 ? 0 : X-1); 
HighThresholdX= (X == 9 ? 9 : X+1); 
LowThresholdY= (Y == 0 ? 0 : Y-1); 
HighThresholdY= (Y == 9 ? 9 : Y+1); 
0

嘗試這種情況:

bool CheckNextTo(int X, int Y){ 
    int LowThreshX = MAX(0,X-1); 
    int LowThreshY = MAX(0,Y-1); 
    int HighThreshX = MIN(9,X+1); 
    int HighThreshX = MIN(9,Y+1); 
} 

MAX,MIN或者是宏功能或std ::最大值/最小值。

您可以將其作爲函數編寫,但這取決於您的其他代碼的工作方式,並且您沒有向我們展示過該代碼。

+0

我相信已經接受的答案(由@Yves Daoust提供)和這個一樣。 – JabbaWook

+0

我不這麼認爲。 Math :: Max/Min不是C++。但我同意它很接近 - 他寫的回覆沒有提交。 –

+0

夠公平的,仍然爲我工作[+1] – JabbaWook