当我实现选择排序方法并执行它时,一些元素被排序,而其他元素则没有。我通过互联网查看了正确的实施情况,但除了额外的开启和关闭支撑外,我没有发现任何差异。
这是我的代码:
public void selectionSort()
{
for(int i = 0;i<=arrSize;i++)
{
int min = i ;
for(int j = i+1;j<=arrSize;j++)
{
if(theArray[j]<theArray[min])
min = j;
swap(min,i);
}
}
}
以下是我在互联网上发现的内容:
public void SelectionSort()
{
for(int i = 0;i<=arrSize;i++)
{
int min = i ;
for(int j=i+1;j<=arrSize;j++)
{
if(theArray[j]<theArray[min])
{
min = j ;
swap(min,i);
}
}
}
}
我试图追踪错误的位置,但是我失败了所以我决定在这里询问这个逻辑错误,我希望你回答这个问题并解释在这种特殊情况下大括号如何影响代码的输出。
答案 0 :(得分:2)
if(theArray[j]<theArray[min])
min = j;
swap(min,i);
和这个
if(theArray[j]<theArray[min])
{
min = j ;
swap(min,i);
}
是两个不同的代码。
答案 1 :(得分:0)
大括号限制if条件操作。在if条件之后没有baces,只有一个表达式将有条件地运行,而if之后的第二行中的swap将始终执行。
通过大括号搜索有关Java中受限制的if else表达式范围的更多信息。
答案 2 :(得分:0)
我正在尝试自己学习java
你应该得到一本关于java基础知识的书,并阅读它。
除了额外的开合括号外,我没有发现任何差异。
但他们有所不同:
没有大括号:如果if语句中的条件不匹配,则if
仅跳过下一个语句。
在Java中,花括号创建所谓的块。与if
语句相结合,这样的块作为一个洞是 next语句。
答案 3 :(得分:0)
见
.mdf
上面将在for循环的每次迭代中执行swap方法。因为它的for循环块。
和
for(int j = i+1;j<=arrSize;j++)
{
if(theArray[j]<theArray[min])
min = j;
swap(min,i);
}
只有当条件满足时,才会执行上面的交换方法。
循环,如果或任何块将考虑括号内的语句。如果你不使用大括号,那么它将只考虑块中的下一个语句。
答案 4 :(得分:0)
如果没有括号,则编译器在内部仅为下一行添加括号。所以,
if(theArray[j]<theArray[min])
min = j;
swap(min,i);
类似于
if(theArray[j]<theArray[min])
{
min = j;
}
swap(min,i);
这就是你输出错误的原因。