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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马任雪刚 中级黑马   /  2012-5-17 19:13  /  1769 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//使用第5题定义的学生类创建5个对象, 属性可为任意值.
//编程对这5个对象按成绩排序, 并将结果输出。
class Student
{
        private String name;
        private int age;
        private double result;
        Student()
        {
               
        }
        Student(String name,int age,double result)
        {
                this.name = name;
                this.age = age;
                this.result = result;
               
        }
        public String getName()
        {
                return name;
        }
        public void setName(String name)
        {
                this.name = name;
        }
        public int getAge()
        {
                return age;
        }
        public void setAge(int age)
        {
                this.age = age;
        }
        public double getResult()
        {
                return result;
        }
        public void setResult(double result)
        {
                this.result = result;
        }
        public void method(Student[] s)
        {
                Student temp=null;
               
                for(int x = 0;x<s.length-1;x++)//为什么在程序运行的时候,这个for循环不运行????????
                {
                        for(int y = 0;y<y-x-1;y++)
                        {
                                if(s[y].result>s[y+1].result)
                                {
                                        temp = s[y];
                                        s[y] = s[y+1];
                                        s[y+1] = temp;
                                       
                                }
                        }
                }
                for(int x = 0;x<s.length;x++)
                {
                        System.out.println(s[x].name+s[x].age+s[x].result);
                }
                       
               
        }
}
public class StudentDemo2
{

       
        public static void main(String[] args)
        {
                Student stu = new Student();
                Student[] s=new Student[5];
                s[0] = new Student("张三",21,87.3);
                s[1] = new Student("王五",23,78.3);
                s[2] = new Student("宋六",19,97.3);
                s[3] = new Student("李四",24,66.3);
                s[4] = new Student("马二",21,83.3);
                stu.method(s);
               
               

        }

}

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
第二个for循环,y=0,y<0-0-1吗?这就是原因。

所以,将for(int y = 0;y<y-x-1;y++)修改为
for(int y = 0;y<s.length-x-1;y++)即可。
回复 使用道具 举报
for(int x = 0;x<s.length-1;x++)//为什么在程序运行的时候,这个for循环不运行???????
        for(int y = 0;y<y-x-1;y++)
语句就写错了,FOR循环冒泡排序 内循环格式是:for(int y=0;y<s.length-x-1;y++)
相邻的两个进行比较,比较一对,减少一个,所以后面-1
回复 使用道具 举报
楼主没把问题说清楚吧。。。倒底想问什么呢?还是我太水了?
回复 使用道具 举报
//使用第5题定义的学生类创建5个对象, 属性可为任意值.
//编程对这5个对象按成绩排序, 并将结果输出。
class Student
{
         private String name;
         private int age;
         private double result;
         Student()
         {
                 
        }
         Student(String name,int age,double result)
         {
                 this.name = name;
                 this.age = age;
                 this.result = result;
                 
        }
         public String getName()
         {
                 return name;
         }
         public void setName(String name)
         {
                 this.name = name;
         }
         public int getAge()
         {
                 return age;
         }
         public void setAge(int age)
         {
                 this.age = age;
         }
         public double getResult()
         {
                 return result;
         }
         public void setResult(double result)
         {
                 this.result = result;
         }
         public void method(Student[] s)
         {
                 Student temp=null;
                  
                for(int x = 0;x<s.length-1;x++) //这里是要循环这个数组的长度-1次。
                 {
                                         //从第一个元素开始循环,循环了5-0-1次,
                                         //第二个元素循环时,循环了5-1-1次,
                                         //第三个元素循环时,循环了5-2-1次
                                         //第四个元素循环时,循环了5-3-1次,
                                         //因为外循环控制了次数为5-1次。再往后内循环就不再循环了。
                                         /*此时,你应该发现了规律吧。就是从第一个元素开始循环,而循环多少次呢?
                                          就是长度-1,再减去该元素的角标。也就是x。
                                          所以,应写成: y<s.length-x-1;
                                          */
                                       
                         for(int y = 0;y<s.length-x-1;y++)
                         {
                                 if(s[y].result>s[y+1].result)
                                 {
                                         temp = s[y];
                                         s[y] = s[y+1];
                                         s[y+1] = temp;
                                         
                                }
                         }
                 }
                 for(int x = 0;x<s.length;x++)
                 {
                         System.out.println(s[x].name+s[x].age+s[x].result);
                 }        
        }
}
class StudentDemo2
{

        
        public static void main(String[] args)
         {
                 Student stu = new Student();
                 Student[] s=new Student[5];
                 s[0] = new Student("张三",21,87.3);
                 s[1] = new Student("王五",23,78.3);
                 s[2] = new Student("宋六",19,97.3);
                 s[3] = new Student("李四",24,66.3);
                 s[4] = new Student("马二",21,83.3);
                 stu.method(s);                        
        }

}

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 万章云 于 2012-5-18 01:21 编辑

for(int x = 0;x<s.length-1;x++)//为什么在程序运行的时候,这个for循环不运行????????               
for(int y = 0;y<y-x-1;y++)
我将你这段代码在我的机上运行了一下,for(int x = 0;x<s.length-1;x++) 这个for循环在程序中执行了,你的代码运行结果并没按成绩有序输出,
是因为 for(int y = 0;y<y-x-1;y++)z这条语句写错了,你这段排序的代码是运用冒泡排序的思想,而冒泡排序的条件应该是: for(int y = 0;y<s.length-x-1;y++)
回复 使用道具 举报
万章云 发表于 2012-5-18 01:13
for(int x = 0;x

可是我按照你的说的改了代码,但是运行后的结果还是没有排序,不知道是我的机子的原因,还是?????
回复 使用道具 举报
万章云 发表于 2012-5-18 01:13
for(int x = 0;x

我又试了一遍OK了,谢了 !!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马