-1
我遇到了一個程序的一部分出現問題,它需要一個名爲userRect的動態分配對象,並檢查它是否重疊在以矩形形狀排列的字符數組上。其他矩形rect [0]和rect [1]隨機放置在控制檯窗口中的假想網格上。檢查字符的二維數組中的重疊問題
rect [0]用'0'打印0 rect [1]用'1'打印出來 如果沒有重疊,userRect用'#'打印出來。 userRect在與另一個對象重疊的數組中的每個char處用'+'打印。
對象userRect可與w,a,s,d鍵一起移動。 應該發生的事情是當用戶移動userRect對象並且它與另一個rect對象重疊時。每個重疊的字符都被替換爲「+」。
當userRect重疊另一個矩形時,程序不打印'+'。任何人都可以指出是什麼導致了這一點?
這裏是我的代碼示例:
bool isOverlapping(Rect const & r) const
{
return !(min.x >= r.max.x || max.x <= r.min.x
|| min.y >= r.max.y || max.y <= r.min.y);
}
int main()
{
srand(time(NULL));
// initialization
Rect * userRect;
const int rectSize = 5;
Rect rect[rectSize];
const int ARRAY_SIZE = 13; // size of userRect
userRect = new Rect();
// set
rect[0].setRandom(rect[0]);
rect[1].setRandomByPointer(& rect[1]);
userRect->setMin(7, 5);
userRect->setMax(10, 9);
//rect0.setMin(10, 2);
//rect0.setMax(14, 4);
//rect1.setMin(1, 6);
//rect1.setMax(5, 15);
int userInput;
do
{
// draw
rect[0].draw('0');
rect[1].draw('1');
for (int i = 0; i < ARRAY_SIZE; i++)
{
if (userRect->isOverlapping(rect[i]))
{
userRect->draw('+');
}
else userRect->draw('#');
}
我在這裏沒有看到實際的問題。另外,如果您希望增加獲得幫助的機會,您可能需要將其壓縮到[MCVE](http://stackoverflow.com/help/mcve)中。 – Dolda2000
您的開發環境幾乎可以肯定[有調試器](https://en.wikipedia.org/wiki/Debugger)。你越早使用它,你就會越有效率的程序員。 – user4581301
我正在使用調試器,從我可以告訴userRect-> isOverlapping(rect [i])傳遞每個rect [i]對象到函數中,並檢查是否min.x> = r.max.x || max.x <= r.min.x || min.y> = r.max.y || max.y <= r.min.y爲真,返回相反。我的問題是這不會導致錯誤,因爲如果其中一個返回true和另一個返回false(意味着一個是字符重疊),結果仍然會返回錯誤的布爾導致布爾isOverlapping總是返回false。 –