Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有一种简单的方法可以忽略c++;? int Square::countmines(){ int numofmines=0; 对于(int valuey=y_u1;valuey_C++ - Fatal编程技术网

C++ 有没有一种简单的方法可以忽略c++;? int Square::countmines(){ int numofmines=0; 对于(int valuey=y_u1;valuey

C++ 有没有一种简单的方法可以忽略c++;? int Square::countmines(){ int numofmines=0; 对于(int valuey=y_u1;valuey,c++,C++,问题是,当计算位于电路板边缘的一个正方形中的一个正方形附近的地雷时,程序抛出一个索引错误。在python中,我可以这样修复它: int Square::countmines(){ int numofmines = 0; for (int valuey = y_ - 1; valuey < valuey + 2; valuey ++){ for (int valuex = x_ -1; valuex < valuex + 2; valuex ++){

问题是,当计算位于电路板边缘的一个正方形中的一个正方形附近的地雷时,程序抛出一个索引错误。在python中,我可以这样修复它:

int Square::countmines(){
    int numofmines = 0;
    for (int valuey = y_ - 1; valuey < valuey + 2; valuey ++){
        for (int valuex = x_ -1; valuex < valuex + 2; valuex ++){
            if(lauta_-> at(valuex).at(valuey).returnmine() == true){
            numofmines ++;
            }
        }
试试看:
除索引器外:
通过
<>在C++中有类似的方法吗?< /P> 问题是,当计算位于电路板边缘的一个正方形中的一个正方形附近的地雷时,程序抛出一个索引错误

是的,它告诉你不要这样做。你不能忽略错误,你要修正代码来停止这样做

你需要让程序检测错误并以不同的方式处理。这就是编程的意义所在,而不仅仅是在所有情况下都做同样的事情,忽略错误

编辑:

<>在C++中有类似的方法吗?< /P> <>你需要阅读关于C++的代码< > 和<代码> catch < /C> > C++ / 问题是,当计算位于电路板边缘的一个正方形中的一个正方形附近的地雷时,程序抛出一个索引错误

是的,它告诉你不要这样做。你不能忽略错误,你要修正代码来停止这样做

你需要让程序检测错误并以不同的方式处理。这就是编程的意义所在,而不仅仅是在所有情况下都做同样的事情,忽略错误

编辑:

<>在C++中有类似的方法吗?< /P>
<>你需要阅读关于C++的代码> >代码> >代码> catch < /c> > .< /p> ,可以使用<代码> [ValueX] < /C> >而不是<代码>(值)来忽略错误等。这将使您直接进入未定义的行为区域。不要这样做。解决此问题有两种简单的方法:添加保护区域,或在索引到数组之前检查边界

对于护卫方阵,无论你的阵型大小,增加每个维度两个。当你进入“真实”正方形,在每个索引值上加1。当你计数时,只需按照你现在的方式访问正方形。通过在雷区周围放置一个守卫正方形边界,你可以使用距离雷区边界1倍的索引值,而无需超出基础阵列


要检查边界,只要在雷区边缘时不要使用-1或+2索引。

您可以使用
[valuex]
而不是
at(值)忽略错误
等。这将使您直接进入未定义的行为区域。不要这样做。解决此问题有两种简单的方法:添加保护区域,或在索引到数组之前检查边界

对于护卫方阵,无论你的阵型大小,增加每个维度两个。当你进入“真实”正方形,在每个索引值上加1。当你计数时,只需按照你现在的方式访问正方形。通过在雷区周围放置一个守卫正方形边界,你可以使用距离雷区边界1倍的索引值,而无需超出基础阵列


为了检查边界,当你处于雷区边缘时,不要使用-1或+2索引。

你的问题是缺乏抽象性


如果你有一个游戏场类,它有一个很好的访问器函数来判断一个场是否是地雷,那么你可以修改这个访问器,只返回false作为越界而不是错误。

你的问题是缺乏抽象


如果你有一个游戏场类,它有一个很好的访问器函数来判断一个场是否是地雷,那么你可以修改该访问器,使其在越界时返回false,而不是错误。

提前计算你的限制并使用它们,而不是将计算包含在for循环中。你还可以修复其他错误(valuey
int Square::countmines(){
int numofmines=0;
自动下降=标准::最大值(x_u0-1,0);
auto upperx=std::min(x_u+1,(int)lauta_uz->size());
对于(int valuex=lowerx;valuexat(valuex).size());
对于(int valuey=lowery;valueyat(valuex).at(valuey).returnmine()==true){
NumoMines++;
}
}
}
归还地雷;
}

如果将宽度和高度存储为类中的值,则可以使用这些有效值将这些size()调用和强制转换为int,而不是提前计算并使用它们,而不是将计算包含在for循环中。您还可以修复其他错误(valuey
int Square::countmines(){
int numofmines=0;
自动下降=标准::最大值(x_u0-1,0);
auto upperx=std::min(x_u+1,(int)lauta_uz->size());
对于(int valuex=lowerx;valuexat(valuex).size());
对于(int valuey=lowery;valueyat(valuex).at(valuey).returnmine()==
try:
         <MY CODE>
     except IndexError:
         pass
int Square::countmines(){
    int numofmines = 0;
    auto lowerx = std::max(x_ - 1, 0);
    auto upperx = std::min(x_ + 1, (int)lauta_->size());
    for (int valuex = lowerx; valuex < upperx; valuex ++){
        auto lowery = std::max(y_ - 1, 0);
        auto uppery = std::min(y_ + 1, (int)lauta_->at(valuex).size());
        for (int valuey = lowery; valuey < uppery; valuey ++){
            if(lauta_-> at(valuex).at(valuey).returnmine() == true){
                numofmines ++;
            }
        }
    }
    return numofmines;
}