有没有一种简单的方法可以忽略 c++ 中的索引错误
Is there a simple way to ignore index error in c++?
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++ 扫雷游戏。Square 是一个具有 x 和 y 坐标的对象,如果有地雷,则为布尔值。计数地雷通过遍历正方形周围的每个方块并在有地雷的情况下将 +1 添加到地雷数值来计算正方形附近的地雷数量。
问题是,当计算位于棋盘边缘的正方形的正方形的附近地雷时,程序会抛出索引错误。在python中,我可以像这样修复它:
try:
<MY CODE>
except IndexError:
pass
在c ++中是否有类似的方法?
问题是,当计算位于棋盘边缘的正方形的正方形的附近地雷时,程序会抛出索引错误。
是的,它告诉你不要那样做。您不会忽略错误,而是修复代码以停止执行此操作。
您需要使程序检测边缘情况并以不同的方式处理它。这就是编程的意义所在,而不仅仅是对所有情况做同样的事情并忽略错误。
编辑:
在c ++中是否有类似的方法?
您需要阅读有关C++try
和catch
的信息。
使用 [valuex]
而不是 at(values)
等来忽略该错误。这将使你直接陷入未定义的行为状态。别这样。解决此问题有两种简单的方法:添加保护方块,或在索引到数组之前检查边界。
对于保护方块,而不是数组的大小,将每个维度增加 2。当您访问"真实"方块时,为每个索引值加 1。当你数数时,只需以与现在相同的方式访问方块。通过在雷区周围放置一个护卫方块的边界,您可以使用与雷区边界 1-off 的索引值,而无需超出基础数组。
要检查边界,当您处于雷区边缘时,请不要使用 -1 或 +2 索引。
你的问题是缺乏抽象。
如果你有一个用于运动场的类,它有一个很好的访问器函数,用于判断一个场是否是地雷,那么你可以只修改该访问器,为越界返回 false 而不是错误。
提前计算您的限制并使用它们,而不是将计算包含在 for 循环中。您还将修复其他错误(valuey
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;
}
如果你在类中将宽度和高度存储为值,你可以将这些 size(( 调用和强制转换为 int 与这些值
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'