Java 计算中值

Java 计算中值,java,Java,谁能给我提供一个解决方案,如何找到我在下面的程序中得到的最终集群成员的中位数 package javaapplication; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.Locale; import java.io.BufferedInputStream; // to read text file line by line public class micr

谁能给我提供一个解决方案,如何找到我在下面的程序中得到的最终集群成员的中位数

package javaapplication;

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;

import java.io.BufferedInputStream; // to read text file line by line

public class microclustering{
private static boolean contains(String target, String value)
{
   boolean result= true;
    for(int i=0; i<value.length();i++){
            if(target.indexOf(value.charAt(i))== -1)
    {
        result=false;
        return result;
    }
    }

  //  System.out.println(count+"intersection "+a+b);
    return result;
}

private static String[] arragedata(String [] data,int i, int j)
{
    int length=data.length;
  String newdata [] =  new String[length-1];
  if(i==j)
      return data;
  if(j<i)
  {
      int temp=j;
      j=i;
      i=temp;
  }
   int temp=0;
  for(int k=0;k<data.length;k++)
  {

      if(k!=i && k!=j)
      {

          newdata[temp]=data[k];
          temp++;
      }
      else
          if(k==i)
          {
              newdata[temp]=data[i]+","+data[j];
              temp++;
          }
  }
  return newdata;
}
private static int getIntersection(String a, String b, String []database)
{
   int count=0;
   boolean flag=true;
   String [] first = a.split(",");
   String [] second = b.split(",");
    for(int i=0; i<database.length;i++)
    {
        for(int j=0;j<first.length;j++)
            if (!contains(database[i],first[j]))
                flag=false;
        if(flag==true)
        for(int j=0;j<second.length;j++)
            if (!contains(database[i],second[j]))
                flag=false;

        if(flag==true)
            count++;
        else
            flag=true;

    }

    return count;
}
private static int getUnion(String a, String b, String []database)
{
   int count=0;
      boolean flag=false;
   String [] first = a.split(",");
   String [] second = b.split(",");

       for(int i=0; i<database.length;i++)
    {

           for(int j=0;j<first.length;j++)
            if (contains(database[i],first[j]))
                flag=true;

        if(flag==false)
        for(int j=0;j<second.length;j++)
            if (contains(database[i],second[j]))
                flag=true;

           if(flag==true)
        {
            count++;
            flag=false;
        }


    }

    return count;
}

    public static void main(String[] args) throws Exception{
        // TODO code application logic here
           String [] database = {"abcefo",  "acg",  "ei",  "acdeg",  "acegl",  "ej",  "abcefp",  "acd",  "acegm",  "acegn"};
           String [] data = {"ecabf", "cad", "cag", "ecag", "ca", "eca", "e"};
              String format1 = "###0.00" ;               

            DecimalFormat fm1 = new DecimalFormat( format1,new DecimalFormatSymbols(Locale.US));


           boolean flag=true;
  do{
           double threshold=0.5;      // set threshold = 0.5

           int min_i=-1,min_j=-1;
           float [][] output= new float[data.length][data.length];
           for(int i=0;i<data.length;i++){
               for(int j=0;j<data.length;j++)
               {
                   if(getUnion(data[i],data[j],database)!= 0){

                       int b=getIntersection(data[i],data[j],database);
                       int c=getUnion(data[i],data[j],database);
                    float a=((float)b)/((float)c);
                   output[i][j]=1-a;
                   if(i==j)
                       output[i][j]=0;

                   }



               }

           } System.out.print("  \t");
              for(int j=0;j<data.length;j++)
               {
                   System.out.print(data[j]+"\t");
               }
           System.out.print("\n");
           for(int i=0;i<data.length;i++)
           {
               System.out.print(data[i]+"\t");
               for(int j=0;j<data.length;j++)
               {

               System.out.print(fm1.format(output[i][j])+"\t");

              if(output[i][j]>0 && output[i][j]<=threshold)
               {
                   threshold=output[i][j];
                   min_i=i;
                   min_j=j;

               }  }
              System.out.print("\n");

              }

           if(min_i!=-1 && min_j!=-1)
           {
               System.out.println("minimum distance"+output[min_i][min_j]+"\t");
                        try{
             data=arragedata(data,min_i,min_j);

           }catch(Exception e){
               e.printStackTrace();
               flag=false;
           }
           }
           else
               flag=false;
                             System.out.print("\n\n\n");
    }while(flag==true);
       }

}

我需要ca、eca、e和ecag、cag的中位数…

大家都不清楚你的问题。如果要计算中值,请使用以下方法:-

  • 按升序排序数组
  • 如果数组长度为奇数,则中值为数组的中间值
  • 如果数组长度为偶数,则中位数是数组的中下位值和中上位值的平均值
如果这不是学校的家庭作业,那么你可以用它来减少代码的编写量。例如:-

DescriptiveStatistics ds = new DescriptiveStatistics();
ds.addValue(10);
ds.addValue(10);
ds.addValue(30);

// median is basically 50th percentile
System.out.println(ds.getPercentile(50)); // displays 10

要计算中位数,您可以使用一个代码片段,例如在问题答案中给出的代码片段。

Ok哇,试着问您的问题并删除细节。这本书读起来太多了。到底是什么问题?难道你不知道如何计算中位数吗?或者,就@Amir的观点来说,删除不相关的细节,只发布导致问题的部分。就目前而言,你不仅不清楚自己遇到了什么问题,而且还需要一段相当长的时间来审视整个事情,以确定从哪里开始。
DescriptiveStatistics ds = new DescriptiveStatistics();
ds.addValue(10);
ds.addValue(10);
ds.addValue(30);

// median is basically 50th percentile
System.out.println(ds.getPercentile(50)); // displays 10