A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韶山 高级黑马   /  2014-9-28 21:22  /  1632 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面注释的那里,加个分号也能编译通过,执行后有个错误的排序结果。class Demo
{

public static void selectSort(int[] arr)
{

        for (int x= 0;x<arr.length-1 ;x++ )
        {
                for (int y= x+1 ;y<arr.length ;y++ )
                {
                        if(arr[x]>arr[y]) //在这里写了分号也能编译正确并且能执行出一个错误的结果
                        {
                                int temp = arr[x];
                                arr[x] = arr[y];
                                arr[y] = temp;
                        }
                }
        }
}
public static void printArray(int[] arr)
{
        System.out.print("[");
        for (int x=0;x<arr.length ;x++ )
        {
                if(x!= arr.length-1)
                        System.out.print(arr[x]+", ");
                else
                        System.out.println(arr[x]+"]");
        }
       
}

public static void main(String[] args)
        {
                int [] arr = new int[]{3,1,4,2,7,5};
                System.out.println("排序前的数组:");
                printArray(arr);
                selectSort(arr);
                System.out.println();
                System.out.println("排序后的数组:");
                printArray(arr);
        }

}

5 个回复

倒序浏览
你加了分号表示你的if语句已经结束了。下面括号里面的东西跟if就没关系了,相当于局部代码块,编译是肯定不会报错的
回复 使用道具 举报
class Demo
{

public static void selectSort(int[] arr)
{

        for (int x= 0;x<arr.length-1 ;x++ )
        {
                for (int y= x+1 ;y<arr.length ;y++ )
                {
                        if(arr[x]>arr[y]);    //如果这样写的话,表示这个if只有判断的条件,但是没有if所控制作用范围的区域.也就是说只不过就是读了一次就结束了.
                       //从这里开始, 和if一点关系都没有,下面的{}区域只是作为局部代码块所使用. 所以这里的代码是一定会被for循环执行到的. 也就是说, 每一次遍历都要交换一次.
       {
                                int temp = arr[x];
                                arr[x] = arr[y];
                                arr[y] = temp;
                        }
                }
        }
}
public static void printArray(int[] arr)
{
        System.out.print("[");
        for (int x=0;x<arr.length ;x++ )
        {
                if(x!= arr.length-1)
                        System.out.print(arr[x]+", ");
                else
                        System.out.println(arr[x]+"]");
        }

}

public static void main(String[] args)
        {
                int [] arr = new int[]{3,1,4,2,7,5};
                System.out.println("排序前的数组:");
                printArray(arr);
                selectSort(arr);
                System.out.println();
                System.out.println("排序后的数组:");
                printArray(arr);
        }

}


评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
双皮奶 发表于 2014-9-28 21:24
你加了分号表示你的if语句已经结束了。下面括号里面的东西跟if就没关系了,相当于局部代码块,编译是肯定不 ...

原来,有了分号相当于空语句。
回复 使用道具 举报
韶山 发表于 2014-9-28 22:56
原来,有了分号相当于空语句。

就跟{}一样的作用
回复 使用道具 举报
一楼正解,那个分号就已经结束了那个if语句,那后面的{}就没有和if关联了!后面的代码与if完全没有关系,
但是它包括在for语句里面,
没有被if语句执行到,会被for语句执行的,
所以能输出一个错误的结果,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马