-1

ですから、私はこのプログラムの一部に数時間続けて取り組んできました。数行のコードがあり、1時間以上困惑しています。それは意味がありません。私は何度も何度もその行を読み、頭の中でそれが何をすべきかを考えますが、それはそれをしていません!それはおそらく私が見落とし続けているいくつかの愚かな間違いです(通常私に起こります..)またはそれは睡眠不足/最後の数時間絶えずそれに取り組んでいることが原因である可能性があります。

プログラムはかなり長いですが、私が問題を抱えているコードのチャンクはほんの数行です-したがって、必要な場合にのみすべてを投稿します。


さて、これが何をすべきかについての簡単な要約です:

手動で設定された文字列(19、それぞれ79文字の長さ)で満たされた単一のベクトルがあります。この1次元のベクトルは、2次元のベクトルとして扱われます。これは、基本的なものにしようとしているためです。したがって、この文字列のベクトルは、1行に1つの文字列を表示すると、基本的に「。」の長方形セクションを持つグリッドを作成します。長方形セクションを接続する「#」のパス。関数に渡されるx座標とy座標を取得する必要があります。2Dベクトルのようにループし、場所を見つけます。その場所の文字が「。」ではないかどうかを確認します。または'#'それ以外の場合は、文字をXに変更してその位置をマークします。'。'の位置である有効なx、y座標を使用してテストを設定しました。-問題は、i cout "match found :::"の行の直後にあります。プログラムを実行すると、vLevel [i] [j]='。'の値を表示します。しかし、何らかの理由で、関数がさらに4回呼び出されるelseステートメントには移動せず、coutステートメントを配置します。グリッドは次のようになります。空白はスペースです。各行はベクトル内の文字列です。

.......                                                                    
.......  .......                                                           
.......##.......      ..........................                           
.......  .......      ..........................                           
         .......      ..........................     ..........            
         .......      ..........................#####..........            
                      ..........................     ..........            
                      ..........................           #               
                      ..........................           #               
                       #                                   #               
                       #                                   #               
    ........           #   ............                .......             
    ........           #   ............                .......             
    ........           #   ............    ....        .......             
    ........###############............    ....        .......             
    ........               ............####....                            
    ........               ............    ....                            

これが私が扱っているコードのセクションです:

void markPosition(vector<string> & vLevel, int x, int y){
    cout << "x: " << x <<endl;
    cout << "y: " << y <<endl;

    bool doubleCheck = true; //extra bool I added for testing purposes

    for( int i = 0; i < vLevel.size(); i++ ){
            for( int j = 0; j < vLevel[i].size(); j++ ){
                    //displays if x and/or y are out of range
                    if (doubleCheck){
                            if ((x < 0) || (x > vLevel[i].size())){
                                    cout << "X is out of range!" << endl;
                                    doubleCheck = false;
                            }
                            if ((y < 0) || (y > vLevel.size())){
                                    cout << "Y is out of range!" << endl;
                                    doubleCheck = false;
                            }
                    }
                    else {
                            return;
                    }

                    if ((j == x) && (i == y)){
     //////THIS IS THE PROBLEM LOL
                            cout << "match found::: " << vLevel[i][j] << endl;
                            if ((vLevel[i][j] != '.') || (vLevel[i][j] != '#')){
                                    cout << "Located in the blankness" << endl;
                                    return;
                            }

                            else {
                                    cout << "I don't get reached!!??" << endl;
                                    vLevel[i][j] = 'X';
                                    markPosition(vLevel,i-1,j);
                                    markPosition(vLevel,i+1,j);
                                    markPosition(vLevel,i,j+1);
                                    markPosition(vLevel,i,j-1);
                           }
                      }
                }
        }
}

貼り付けるときに間隔がめちゃくちゃになったので、少しきれいにしてみました。他をスキップする理由がわかりません。私が言ったように、これが解決されると私は愚かになると確信しています。寝る必要があります笑。

さらに情報が必要な場合はお知らせください。よろしくお願いします!

4

1 に答える 1

3

見る:

if ((vLevel[i][j] != '.') || (vLevel[i][j] != '#'))

これは常にに評価されtrueます。考えてみてください。

(私はあなたが意味したと思いますif((!=)&&(!=))またはif(!((==)||(==)))。)

于 2013-03-07T03:03:47.703 に答える