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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© demown 中级黑马   /  2014-4-16 20:16  /  2127 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class zsT {

public static void sum(int arr[]){
  
  for(int x = 0;x < arr.length-1;x++){
   
   for(int y = 0;y < arr.length-1;y++ ){
   
    if(arr[y]>arr[y+1]){
     int temp = arr[y];
     
     arr[y] = arr[y+1];
     arr[y+1]=temp  ;}
   
   }
  }
  

}
  public static void main(String[] args){
  int arr[] ={1,8,3,7,0,6,4,5};
  
  sum(arr);
}
}
错误: 在类 JDK5AhhotationTest.zsT 中找不到主方法, 请将主方法定义为:
   public static void main(String[] args)

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

13 个回复

倒序浏览
您的算法没有错,只是少了输出,写一个在控制台输出的方法即可:
例如:
public static void main(String[] args){
  int arr[] ={1,8,3,7,0,6,4,5};
  
  sum(arr);
  for(int i=0;i<arr.length;i++){
          System.out.print(arr[i]+",");
  }
}
这是我在eclipse上运行的结果:0,1,3,4,5,6,7,8,

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
我把你这个代码复制下来试了一下……运行正常……没有任何错误……
回复 使用道具 举报
#在这里快速回复#public static void main(String[] args)
回复 使用道具 举报
public static void main(String[] args)
{
  int[] arr={1,8,3,7,0,6,4,5};
  AD(arr);
  printA(arr);
  
}
public static void AD(int[] aq)
{
  for(int x=0;x<aq.length-1;x++)
  {
   for(int y=0;y<aq.length-x-1;y++)
   {
    if(aq[y]>aq[y+1])
    {
    int temp=aq[y];
    aq[y]=aq[y+1];
    aq[y+1]=temp;
    }
   }
  }
}
public static void printA(int[] qqq)
{
  System.out.print("[");
  for(int x=0;x<qqq.length;x++)
  {
   if(x<qqq.length-1)
   System.out.print(qqq[x]+",");
   else
   System.out.println(qqq[x]+"]");
  }
}

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报 1 0
算法没错,但是程序的如果模式是固定的,都是
public static void main(String[] args),你可以在main方法里调用排序的方法
回复 使用道具 举报
  1. class  Arr
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                  int[] arr = new int[]{12,34,7,24,23,60,67,32,57,4};

  6.                  selectArr(arr);
  7.         }


  8.                 //冒泡排序
  9.                         public static void selectArr(int[] arr)
  10.                         {
  11.                                 //用于记录排序的次数
  12.                                 int count = 0;

  13.                                 //排序数组
  14.                                 for (int i=0;i<arr.length-1;i++)
  15.                                 {

  16.                                         for (int j=0;j<arr.length-1-i;j++ )
  17.                                         {
  18.                                                 if (arr[j]>arr[j+1])
  19.                                                 {
  20.                                                         int temp = arr[j];
  21.                                                         arr[j] = arr[j+1];
  22.                                                         arr[j+1] = temp;
  23.                                                 }

  24.                                                        
  25.                                         }
  26.                                                                                 count++;

  27.                                                 System.out.println("第"+count+"次排序");

  28.                                                 //遍历每次排序后的数组,能让我们看清每次数组是怎么排序的
  29.                                                 for (int k=0;k<arr.length;k++)
  30.                                                 {
  31.                                                         System.out.print(arr[k]+" ");
  32.                                                 }
  33.                                                 //用于换行
  34.                                                 System.out.println();
  35.                                
  36.                                 }

  37.                         }
  38. }
复制代码

这个怎么样?你的好像没有输出

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
ithmC4 中级黑马 2014-4-16 21:34:17
8#
你冒泡算法的循环条件不地道,再加个输出方法就行了:
  1. public class MyMain {
  2.         public static void main(String[] args) {
  3.                 // TODO Auto-generated method stub
  4.                 int[] arr = {1,8,3,7,0,6,4,5};
  5.                 bubbleSort(arr);
  6.                 printArray(arr);
  7.         }
  8.        
  9.         public static void bubbleSort(int[] arr) {
  10.                
  11.                 for(int i=0, len=arr.length-1; i<len; i++) {
  12.                         //注意这第二层循环的循环条件
  13.                         for(int j=0; j<len-i; j++) {
  14.                                 if(arr[j]>arr[j+1]) {
  15.                                         int tmp = arr[j];
  16.                                         arr[j] = arr[j+1];
  17.                                         arr[j+1] = tmp;
  18.                                 }
  19.                         }
  20.                 }
  21.         }
  22.         //这是自己写的输出方法
  23.         public static void printArray(int[] arr) {
  24.                 System.out.print("{");
  25.                 for(int i=0, len=arr.length-1; i<len; i++) {
  26.                         System.out.print(arr[i] + ", ");                       
  27.                 }
  28.                 System.out.println(arr[arr.length-1] + "}");
  29.         }

  30. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
老师上课都讲的东西  还有视频里都有    对比下嘛  刚开始学就照着老师的写   
回复 使用道具 举报
首先根据你的错误提示:类 JDK5AhhotationTest.zsT 没有主方法。
你运行的是JDK5AhhotationTest.zsT 类。和你贴出来代码的出处是同一个源文件吗?
其次:你这个代码,没有显示输出语句。
回复 使用道具 举报
楼主好像还是对冒泡不够了解,它是通过两个for循环实现大数逐渐的下沉,外层for每比较一次,大数每下沉一次,所以内层没必要每次都全比较大小,写成for(int y = 0;y < arr.length-x-1;y++ )即可。。
再者,楼主没有实现数组输出语句,当然不会有数组输出,
下面是我对楼主代码的简单修改,
  1. public class Test {

  2.                 public static void sum(int arr[]){
  3.                   
  4.                   for(int x = 0;x < arr.length-1;x++){
  5.                   
  6.                    for(int y = 0;y < arr.length-x-1;y++ ){
  7.                     
  8.                     if(arr[y]>arr[y+1]){
  9.                      int temp = arr[y];
  10.                      
  11.                      arr[y] = arr[y+1];
  12.                      arr[y+1]=temp  ;}
  13.                     
  14.                    }
  15.                   }
  16.                   

  17.                 }
  18.                   public static void main(String[] args){
  19.                   int arr[] ={1,8,3,7,0,6,4,5};
  20.                   
  21.                   sum(arr);
  22.                   for (int i : arr) {
  23.                         System.out.print(i+"  ");
  24.                 }
  25.                 }
  26.                 }
复制代码
回复 使用道具 举报
我感觉你的排序算法好像有问题吧?这个是老师上课讲的。
for(int i=0;i<a.length-1;i++)   //总共比较a.length-1 趟;
{
   for(int j=0;j<a.length-i-1;j++) //第一趟比较四次,第二趟比较三次,第三趟比较两次,第四趟比较一次;
                                   //-i的意思是让每一次的比较次数减少,-1的意思是避免比到最后脚标越界。
      {
        if(a[j]>a[j+1])
         {
           int temp=a[j];
            a[j]=a[j+1];
            a[j+1]=temp;
          }
       }
}

回复 使用道具 举报 1 0
本帖最后由 彭飞 于 2014-4-20 15:21 编辑

我一眼看出来的错误是,第2个for循环里的条件表达式,应该是i<arr.length-1-i;

原理上面的童鞋说了,下面告诉你我的一个
冒泡排序法的一个小技巧:
记住圈外是长度-1,圈内是长度-1-i。
   ;i<arr.length-1;
          ;i:arr.length-1-i;

相信你不会再错了。
回复 使用道具 举报
好像没有错误吧,但是效率低一些,提供效率方法是:
for(int x = 0;x < arr.length-1;x++){
   
   for(int y = 0;y < arr.length-1-x;y++ ){  //在这加上  -x ,提供效率
   
    if(arr[y]>arr[y+1]){
     int temp = arr[y];
     
     arr[y] = arr[y+1];
     arr[y+1]=temp  ;}
   
   }
  }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马