黑马程序员技术交流社区
标题:
这段代码不懂
[打印本页]
作者:
完美恋爱
时间:
2013-10-14 18:24
标题:
这段代码不懂
本帖最后由 完美恋爱 于 2013-10-14 20:05 编辑
class a
{
public static void main(String[] args)
{
int[] arr = {2,1,3,8,6,9,5};
for(int x = 0; x < arr.length; x++)
{
int y;
for(y = 0; y < arr.length-x-1; y++)
{
if(arr[y] > arr[y+1])
{
int s = arr[y];
arr[y] = arr[y+1];
arr[y+1] = s;
}
}
System.out.println(arr[y]);
}
}
}
请问为什么打印出来的是从大到小排序的顺序啊,我认为是从小到大排序才对啊?
作者:
阿里策
时间:
2013-10-14 18:36
if(arr[y] > arr[y+1])
{
int s = arr[y];
arr[y] = arr[y+1];
arr[y+1] = s;
}
复制代码
这段代码是说,如果数组里前面的数大于后面的那个数,那么二者互换,这样就把小的数换到了前面。你用了两个循环,这样就把所有的数组元素都遍历比较一边,所以最后会是从小到大输出。希望能帮助你理解{:soso_e100:}
作者:
郑齐育
时间:
2013-10-14 19:04
问题在于你将int y 定义在了内循环外
public class a {
public static void main(String[] args) {
int[] arr = { 2, 1, 3, 8, 6, 9, 5 };
for (int x = 0; x < arr.length; x++) {
int y;
for (y = 0; y < arr.length - x - 1; y++) {
if (arr[y] > arr[y + 1]) {
int s = arr[y];
arr[y] = arr[y + 1];
arr[y + 1] = s;
}
}
System.out.println(y);
//System.out.println(arr[y]);
}
}
}
输出为
6
5
4
3
2
1
0
也就是说你每次内循环好后将数组从小到大排列了,但是你每次输出都是从数组的末尾来输出。而且实际上从第二次内循环开始,你都是在做无用功。
下面是一种正确的代码。
public class A {
public static void main(String[] args) {
int[] arr = { 2, 1, 3, 8, 6, 9, 5 };
for (int x = 0; x < arr.length; x++) {
//int y;
for (int y = 0; y < arr.length - x - 1; y++) {
if (arr[y] > arr[y + 1]) {
int s = arr[y];
arr[y] = arr[y + 1];
arr[y + 1] = s;
}
}
System.out.println(arr[x]);
//System.out.println(y);
//System.out.println(arr[y]);
}
}
}
作者:
To
时间:
2013-10-14 19:25
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:
http://bbs.itheima.com/thread-89313-1-1.html
作者:
凝聚
时间:
2013-10-14 19:55
package seventeen;
import java.util.Arrays;
public class a {
public static void main(String[] args) {
int[] arr = {2,1,3,8,6,9,5};
System.out.println(" "+Arrays.toString(arr));
for(int x = 0; x < arr.length; x++)
{
int y;
for( y = 0; y < arr.length-x-1; y++)
{
if(arr[y] > arr[y+1])
{
int s = arr[y];
arr[y] = arr[y+1];
arr[y+1] = s;
}
}
System.out.print(arr[y]+" ");
System.out.println(Arrays.toString(arr));
}
}
}
输出的结果为:
[2, 1, 3, 8, 6, 9, 5]
9 [1, 2, 3, 6, 8, 5, 9]
8 [1, 2, 3, 6, 5, 8, 9]
6 [1, 2, 3, 5, 6, 8, 9]
5 [1, 2, 3, 5, 6, 8, 9]
3 [1, 2, 3, 5, 6, 8, 9]
2 [1, 2, 3, 5, 6, 8, 9]
1 [1, 2, 3, 5, 6, 8, 9]
仔细分析【】号中的元素是一个接一个的比较,由于y++的缘故等比较最后一个是其元素角标为arr[y],这时
arr[y]以比较完它的结果以确定,输出arr[y],此时的arr[y]就是数组中的最后一个元素。
我表达的不清楚,希望你能领悟。
作者:
完美恋爱
时间:
2013-10-14 20:05
太谢谢各位了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2