我无法结束} catch (Exception ex) {
if(transaction != null) {
try {
transaction.rollback();
} catch (Exception e) { // Log error }
}
ex.printStackTrace();
System.out.println("Transaction is rolled back.");
} finally {
if(session != null) {
try {
session.close();
} catch (Exception e) { // Log error }
}
if(sessionFactory != null) {
try {
sessionFactory.close();
} catch (Exception e) { // Log error }
}
}
循环。即使看起来应该这样做,它仍会继续。
它通过一组指针数组,当最后一个指针返回for
时,它应该结束。但它继续。我觉得我错过了一些相当简单的东西。任何想法都表示赞赏。
NULL
答案 0 :(得分:0)
在每次运行之前评估条件,因此代码的前几部分扩展为:
int idx = 0 ;
while ( 1 )
{
if ( shape[idx] == NULL ) break ;
shape[idx] = getShape() ;
++idx ;
if ( shape[idx] == NULL ) break ;
shape[idx] = getShape() ;
++idx ;
// and so on
}
我假设您在getShape
返回NULL之前尝试运行,请尝试以下操作:
int idx = -1 ;
do
{
shape[++idx] = getShape() ;
} while ( shape[idx] != NULL ) ;
另请注意,我假设您的示例中省略了额外的检查以用于示例目的,但我会提及以防您始终始终检查结束您的C-Array也是如此,因此您不必踩踏在分配的数组段之后的内存。
修改强>
这里是我在一个更完整的代码示例中讨论的其他检查:
enum {
kArraySize = 10
} ;
shape* shapes[kArraySize] ; // note: named it "shapes" instead of "shape" to avoid a name collision
int idx = -1 ;
do
{
++idx ; // *prepare* to go to the next index
if ( idx >= kArraySize ) // only need ==, but >= gives extra safety
break ; // stop before we go past the end of the array!
shapes[idx] = getShape() ;
} while ( shapes[idx] != NULL ) ;
答案 1 :(得分:0)
for循环可以简化为......
for(int idx = 0; idx<10 && (shape[idx]=getShape()) != NULL; ++idx);
您可以在同一声明中进行分配和比较。
您可能想要动态地计算出数组的大小,正如其他答案所暗示的那样。为简单起见,我刚刚编写了10个硬编码。
对于这个特定的例子,最好简单地声明一个常量来定义数组,然后在for循环条件中使用这个常量。
答案 2 :(得分:-1)
如果shape [10]为NULL,则不确定。它可能有一些内容,但尚未删除。
试试这个:
shape *shape[n];
int lng = sizeof(shape)/sizeof(shape);
for(int idx = 0; idx < lng; ++idx)
{
shape[idx] = getShape();
}