到ArrayList中我有以下类:加入我自己的数据类型在Java中
class Data {
double x,y,disc,asoc;
public Data(double a,double b){
x = a;
y = b;
}
}
在另一类我:
public class Kmeans {
public Kmeans(int v1,int v2){
k = v1;
samples = v2;
read();
centro();
}
Data c_data = new Data(0,0);
List<Data> data_v = new ArrayList<>();
List<Data> centroids = new ArrayList<>();
void read(){
//Reading elements from file, adding them to data_v.x and data_v.y
}
void centro(){
Random rand = new Random();
for(int i=0;i<k;i++){
int r = rand.nextInt(ilosc);
c_data.x = data_v.get(r).x;
c_data.y = data_v.get(r).y;
centroids.add(c_data);
}
for(int j=0;j<centroids.size();j++) //print centroids.x and centroids.y
}
我的主:
public static void main(String[] args) {
new Kmeans(10,10000);
}
我有一个centro函数的问题,当我试图将随机数据从data_v.x和data_v.y添加到ArrayList质心时,它会导致以cen troids。 例如:
第一次迭代:c_data.x = -1.4067 c_data.y = 0.3626添加后:0 指数:centroids.x = -1.4067 centroids.y = 0.3626
第二次迭代:C_DATA .X = 0.1319 c_data.y = 0.7321添加后:0 指数centroids.x = 0.1319 centroids.y = 0.7321 1索引centroids.x = 0.1319 centroids.y = 0.7321
第三次迭代:c_data.x = 1.4271 c_data.y = -0.2076增加后:0 指标质心x = 1.4271 centroids.y = -0.2076 1 inde X centroids.x = 1.4271 centroids.y = -0.2076 2指数centroids.x = 1.4271 centroids.y = -0.2076
输出:从去年十种迭代相同的元素..
有人可以告诉我我做错了什么?上面的数据来自调试器,所以问题在于centroids.add(c_data)。随机化很好,从文件中获取元素。
感谢
噢,谢谢你的工作,但现在c_data在centro隐藏c_data在kmeans类中声明。如果我将在kmeans类的其他函数上使用c_data,该怎么办?它仍然可用?或者,也许我应该删除数据c_data = new Data(0,0);在kmean班? – soncrash
取决于你首先声明它的原因。如果仅在此方法中使用它,则将其删除。如果要更全局地使用它,请在centro方法内重命名局部变量 –