首页 新闻 会员 周边 捐助

请大神帮我看看这个代码哪错了,能够编译,但是运行的时候出错了

0
[已解决问题] 解决于 2017-12-08 12:17
package java1;
import java.util.Scanner;
public class Java1 {
    //定义一个全局变量sum存储重数
    static int sum=0;
    //定义全局变量zhongshu储存众数
    static String zhongshu="";
   
   
    //count统计中间数出现的次数
     public static int count(String a[],int p,int q){
         //中间数
         String n=a[(p+q)/2];
         //初始化中间数次数
         int counts=0;
         //从第一个索引到最后一个索引统计的中间数出现次数
         for(int i=p;i<q;i++){
             if(a[i]==n){
                 counts++;
             }
         }
         return counts;
     }
     
     //定义一个方法,用于返回当前数组的中间数第一次出现位置的索引,
 //参数p为当前数组第一个数的位置索引,q为最后一个索引
     public static int start(String a[],int p,int q){
         int x=0;
         for(int i=p;i<p;i++){
             //找到第一个与中间数相同的数就停下,并返回
             if(a[i]==a[(p+q)/2]){
                 x=i;
                 break;
             }
         }
         return x;
     }
    public static void mode(String a[],int p,int q){
     
    //当前数组中间数索引
    int tnum=(p+q)/2;
    //统计中间数的重数
    int tsum=count(a,p,q);
    int left=start(a,p,q);
    if(tsum>sum){
        sum=tsum;
        zhongshu=a[tnum];        
    }
    //从右边开始找  left+tsum-q
    if(q-(left+tsum)>sum){
        mode(a,left+tsum,q);
    }
    //从左边开始找  0-left
    if(left>sum){
        mode(a,0,left);
    }
    
    } 
     public static void main(String[] args) {
        /*
        给定含有N个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数,
    多重集合S中重数最大的元素称为多重集合S的众数,众数的重数称为多重集合S的重数,
    试求一个给定多重结合的重数和众数;
例如:S={a,b,b,b,f,f,4,5}的重数是3,众数是b 
        */
        //定义测试数据组数n,多重集S中元素的个数为m
        //int n,m;
        //声明存储数据的数组
        String a[];        
        //为数组中每个元素开辟空间
        a=new String[]{"e","1","e","f","e","4","f"};
           
        mode(a,0,7);
         System.out.println("众数为:"+zhongshu+"  "+"重数为:"+sum);
        }
    }
问题补充:

 

代码错误提示

 

 

昨天我没描述详细,这个代码是用分治法求众数,代码的思路是:

(1)快速排序

(2)求中位数

(3)计算出中位数的最左端和最右端的位置,然后分割成2段数组 

(4)中位数个数与左端个数比较,中<左  即最大众数可能存在左端,将左端再进行2段分割(递归)直到 中 >  左为止

         右端同理。。。

 

野心家的主页 野心家 | 初学一级 | 园豆:188
提问于:2017-12-06 21:37
< >
分享
最佳答案
0

你得告诉我们运行时出了什么样的错啊

奖励园豆:5
西漠以西 | 小虾三级 |园豆:1675 | 2017-12-07 10:28

补充了问题了,麻烦再帮我看看

野心家 | 园豆:188 (初学一级) | 2017-12-07 13:16

@野心家: 

递归搞成了死循环,检查 mode内部 调用自身的两个条件

西漠以西 | 园豆:1675 (小虾三级) | 2017-12-07 14:38

@西漠以西: 恩恩,谢谢啦,我检查一遍

野心家 | 园豆:188 (初学一级) | 2017-12-07 22:20

@西漠以西: 死循环问题解决了,谢谢啦问题

野心家 | 园豆:188 (初学一级) | 2017-12-08 12:16
其他回答(1)
0

把错误代码贴上来

大宇007 | 园豆:331 (菜鸟二级) | 2017-12-07 10:32

补充了问题了,麻烦了

支持(0) 反对(0) 野心家 | 园豆:188 (初学一级) | 2017-12-07 13:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册