当前位置: 代码迷 >> Eclipse >> java程序没报错,运作没结果,求大神
  详细解决方案

java程序没报错,运作没结果,求大神

热度:20   发布时间:2016-04-23 00:25:24.0
java程序没报错,运行没结果,求大神
一个K均值的程序,一共有三个类,求大神帮助,运行没报错,但是没有输出
package org.algorithm;
import java.util.ArrayList;
import java.util.Random;
public class Kmeans {
private int NumOfCluster;//多少簇
//private int NumOfData;//数据个数
private ArrayList<Point> Data;//存放数据
private ArrayList<Point> Center;//存放簇中心
private ArrayList<ArrayList<Point>> Cluster;//存放簇
private Random random;
private ArrayList<Point> Save;
//private ArrayList<Float> jc;

public Kmeans(int k)
{
if(k<=0)
{
k=1;
}
this.NumOfCluster=k;
Data=new ArrayList<Point>();
Center=new ArrayList<Point>();
Cluster = new ArrayList<ArrayList<Point>>();
Save=new ArrayList<Point>();
random=new Random();


}

public void SetData(ArrayList<Point> DataSet)
{
Data=DataSet;
}

private void GetRandom()
{
int[][] randoms = new int[NumOfCluster][2];
Point temp=new Point(0,0);
boolean flag;
for(int i=0;i<NumOfCluster;i++)
{
flag=true;
while(flag)
{
flag=false;
for(int j=0;j<2;j++)
{
randoms[i][j]=random.nextInt(1000);
}
temp.setX(randoms[i][0]);
temp.setY(randoms[i][1]);
if(i>0)
{
for(int k=0;k<i;k++)
{
if((temp.getX()==Center.get(k).getX())&&(temp.getY()==Center.get(k).getY()))
{
flag=true;
break;
}
}
}
}
Center.add(temp);
}
}

private void Init()
{
GetRandom();
for(int i=0;i<NumOfCluster;i++)
{
Cluster.add(new ArrayList<Point>());
}
}

private void SetCenter()
{
if(Center==null)
{
GetRandom();
}
else
{
double X=0,Y=0;
int n=0;
for(int i=0;i<NumOfCluster;i++)
{
n=Cluster.get(i).size();
Point newCenter=new Point(0,0);
if(n!=0)
{
for(int j=0;j<n;j++)
{
X+=Cluster.get(i).get(j).getX();
Y+=Cluster.get(i).get(j).getY();
}
newCenter.setX(X/n);
newCenter.setY(Y/n);
Center.set(i, newCenter);
}
}
}
}

private double Distance(Point p,Point c)
{
double distance;
double x,y,z;
x=p.getX()-c.getX();
y=p.getY()-c.getY();
z=x*x+y*y;
distance=(float) Math.sqrt(z);
return distance;
}

private int Min(double[] distance)
{
double minD=distance[0];
int Min=0;
for(int i=1;i<NumOfCluster;i++)
{
if(distance[i]<minD)
{
minD=distance[i];
Min=i;
}
}
return Min;
}

private void SetCluster()
{
double[] distance;
distance=new double[NumOfCluster];
for(int i=0;i<Data.size();i++)
{
for(int j=0;j<NumOfCluster;j++)
{
distance[j]=Distance(Data.get(i),Center.get(j));
}
Cluster.get(Min(distance)).add(Data.get(i));
}
}

public ArrayList<ArrayList<Point>> getCluster()
{
return Cluster;
}
private void Change()
{
for(int i=0;i<NumOfCluster;i++)
{
Save.add(Center.get(i));
}
}

public void execute()
{
Init();
while(true)
{
Change();
SetCenter();
SetCluster();
if(Save==Center)
break;
}
}
}
---------------------------------------------------------------------------------------------------------------
package org.algorithm;


public class Point {
private double x;
private double y;
public Point()
{}
public Point(double x, double y)
{
this.x = x;
this.y = y;
}
public double getX() 
{
return x;
}
public void setX(double x) 
{
this.x = x;
}
public double getY() 
{
return y;
}
public void setY(double y) 
{
this.y = y;
}

}
-----------------------------------------------------------------------------------------------------------------
package org.test;


//import org.algorithm.test;
import java.util.ArrayList;
import org.algorithm.Kmeans;
import org.algorithm.Point;
public class test {
public static void main(String[] args)
{
//初始化一个Kmean对象,将k置为10
Kmeans k=new Kmeans(3);
ArrayList<Point> dataSet=new ArrayList<Point>();
Point p0=new Point(1,2);
Point p1=new Point(3,3);
Point p2=new Point(3,4);
Point p3=new Point(5,6);
Point p4=new Point(8,9);
Point p5=new Point(4,5);
Point p6=new Point(6,4);
Point p7=new Point(3,9);
Point p8=new Point(5,9);
Point p9=new Point(4,1);
dataSet.add(p0);
dataSet.add(p1);
dataSet.add(p2);
dataSet.add(p3);
dataSet.add(p4);
dataSet.add(p5);
dataSet.add(p6);
dataSet.add(p7);
dataSet.add(p8);
dataSet.add(p9);
  相关解决方案