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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑强强 中级黑马   /  2012-4-8 17:23  /  2794 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class ArrayTool
{


        public  void selectSort(int [] arr)
        {
                for (int x=0;x<arr.length;x++ )
                {
                        for (int y=x; y<arr.length;y++ )
                        {
                                if(arr[x]>arr[y])
                                        swap(arr,x,y);
                                for (int x=0;x<arr.length ; x++)
                                {
                                        System.out.print("arr="+arr[x]);

                                }
                       
                       
                        }
                }
        }


        public  void swap(int[] arr,int x,int y)
        {
                int temp=arr[x];
                arr[x]=arr[y];
                arr[y]=temp;
        }

public static void main(String[] args)
{
        int[] arr={3,4,2};
        ArrayTool at=new ArrayTool();
        ArrayTool.selectSort();


}

类中可不可只定义功能函数而不定义属性呢?为什么这样运行会出现错误呢?求详解


评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

7 个回复

倒序浏览
你这个程序有问题啊ArrayTool.selectSort();你是创建了一个对象出来但调用函数不是这么调用的。你定义的那个函数是带参的所以你调用的时候必须带参数,没有参数你的方法就不知道怎么执行了。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 曾晓文 于 2012-4-8 17:45 编辑

类中可不可只定义功能函数而不定义属性呢?
当然可以啦。报了什么错,应该是静态方法调用非静态方法而报错。在一个类内静态方法不能调用非静态方法(因为虚拟机加载类是虚拟机先加载静态成员,完了再加载非静态成员。),所以在main方法调用ArrayTool.selectSort();会报错。
你的代码还要2个地方有问题,selectSort里定义类2次x,并且ArrayTool.selectSort();是没有参数,与定义的selectSort方法不批配

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报



class ArrayTool
{


        public  void selectSort(int[] arr)
        {
                for (int x=0;x<arr.length;x++ )
                {
                        for (int y=x; y<arr.length;y++ )
                        {
                                if(arr[x]>arr[y])
                                        swap(arr,x,y);
                                for (int a=0;a<arr.length ; a++)
                                {
                                        System.out.print("arr="+arr[a]);

                                }
                        
                        
                        }
              }
        }

        public  void swap(int[] arr,int x,int y)
        {
                int temp=arr[x];
                arr[x]=arr[y];
                arr[y]=temp;
        }

public static void main(String[] args)
{
        int[] arr={3,4,2};
        ArrayTool at=new ArrayTool();
      at.selectSort(arr);
}



}



我改动后的地方都用红色标识出来了,这些问题最好是自己去处理,做技术的没有问题就没有进步,问题越多进步越快。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
类中当用不到属性的时候当然可以不用定义,在类中定义属性则都是该类对象的属性,出现错误是你这里的语法错误 ArrayTool.selectSort();调用函数,应该用“对象名.函数名”来调用,而不能使用类名调用,类名只能调用静态函数

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
是可以的。

错误:1,静态方法调用非静态方法报错。在类内静态方法不能调用非静态方法,而你在main方法
调用ArrayTool.selectSort()报错,原因你main是静态的 而selectSor和swap都是非静态的,静态是不能调用非静态的;

2嵌入的第三个for拿出来进行遍历,在里面的话相当于循环了3次,3次中符合的值相乘的个数

3 ArrayTool.selectSort(); 调用类方法时对应的arr加上

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
楼上说的很好:毕老师的视频也是这么说的
类中当用不到属性的时候当然可以不用定义,在类中定义属性则都是该类对象的属性,出现错误是你这里的语法错误 ArrayTool.selectSort();调用函数,应该用“对象名.函数名”来调用,而不能使用类名调用,类名只能调用静态函数
回复 使用道具 举报
pray 高级黑马 2014-4-26 06:07:34
8#
我在顶贴~!~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马