Java Kmeans从数据文件进行集群

Java Kmeans从数据文件进行集群,java,bufferedreader,k-means,parseint,Java,Bufferedreader,K Means,Parseint,好的,所以基本上我要做一个kmeans集群程序,其中数据文件是 另外,我很抱歉代码中有很多注释,我正计划在它运行后清理它 1 6.3 2.8 5.1 1.5 其中1是ID,然后是萼片长度、萼片宽度、踏板长度,然后是踏板宽度。我得到一个关于输入的错误,以及它如何被读入我的双链接列表。我使用前两个条目创建前两个集群,这就是为什么要分别创建前两个集群,其余的则读入它们最接近的集群。我很确定这个问题与我如何读取文件,然后将其转换为数值有关 任何帮助都将不胜感激 (我也知道应该是花瓣,我搞砸了) 公共无效

好的,所以基本上我要做一个kmeans集群程序,其中数据文件是

另外,我很抱歉代码中有很多注释,我正计划在它运行后清理它

1 6.3 2.8 5.1 1.5

其中1是ID,然后是萼片长度、萼片宽度、踏板长度,然后是踏板宽度。我得到一个关于输入的错误,以及它如何被读入我的双链接列表。我使用前两个条目创建前两个集群,这就是为什么要分别创建前两个集群,其余的则读入它们最接近的集群。我很确定这个问题与我如何读取文件,然后将其转换为数值有关

任何帮助都将不胜感激

(我也知道应该是花瓣,我搞砸了)

公共无效读取(字符串fname){
BufferedReader reader=null;
//listA=listA.linkedList();
//listB=listB.linkedList();
试一试{
FileReader fr=新的FileReader(fname);
读卡器=新的缓冲读卡器(fr);
Random rand=新的Random();
int i;
//listA.DoublyLinkedList();
//listB.DoublyLinkedList();

对于(i=0;iYou说“…我得到了一个与输入相关的错误…”这就像告诉你的医生你得到了一个症状。实际的错误是什么?线程“main”java.lang.NumberFormatException:for input string:”中的异常,然后进入到java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)您应该添加每个值的打印输出,以便可以看到导致异常的值。异常可能会告诉您,您试图解析为数字的内容不是数字。您提供的异常信息不够完整,无法知道代码中的哪一行发生了异常。嗯,该错误意味着您通过了将空字符串添加到
Integer.parseInt
Double.parseDouble
调用之一。这可能表示输入文件中有一行缺少某些字段,甚至可能是一个空行。
public void read(String fname){
BufferedReader reader=null;
//listA=listA.linkedList();
//listB=listB.linkedList();
try{
FileReader fr=new FileReader(fname);
reader= new BufferedReader(fr);
Random rand=new Random();

int i;
//listA.DoublyLinkedList();
//listB.DoublyLinkedList();
for (i=0; i<2; i++){

String line=reader.readLine();
String values[]= new String[5];
values=line.split(" ");
int id=Integer.parseInt(values[0]);
double sepall=Double.parseDouble(values[1]);
double sepalw=Double.parseDouble(values[2]);
double petall= Double.parseDouble(values[3]);
double petalw= Double.parseDouble(values[4]);
//int j=rand.nextInt(2)+1;
if(i==0){
listA.insertAtEnd(id, sepall, sepalw, petall, petalw);
id1=id;
sepall1=sepall;
sepalw1=sepalw;
petall1=petall;
petalw1=petalw;
petal1=petall1*petalw1;
sepal1=sepall1*sepalw1;
}else{
listB.insertAtEnd(id,sepall,sepalw,petall,petalw);
id2=id;
sepall2=sepall;
sepalw2=sepalw;
petall2=petall;
petalw2=petalw;
petal2=petall2*petalw2;
sepal2=sepall2*sepalw2;
}
}
}catch(FileNotFoundException fne){
System.out.print("File not Found");
}catch(IOException ex){
ex.printStackTrace();
}finally{
//if(reader.readLine()==null){
    try{
reader.close();
}catch(IOException ex){
ex.printStackTrace();
}
//}
}
for(int i=2;i<150; i++){
try{
//String fname=args[0];
//BufferedReader reader= new BufferedReader(new FileReader(fname));
//Random rand=new Random();
FileReader fr=new FileReader(fname);
reader= new BufferedReader(fr);
//DoublyLinkedList listA= new DoublyLinkedList();
//DoublyLinkedList listB= new DoublyLinkedList();
//int i;
//listA.linkedList();
//listB.linkedList();
for (i=0; i<2; i++){

String line=reader.readLine();
String values[]= new String[5];
values=line.split(" ");
id= Integer.valueOf(values[0]);
sepall= Double.parseDouble(values[1]);
sepalw= Double.parseDouble(values[2]);
petall= Double.parseDouble(values[3]);
petalw= Double.parseDouble(values[4]);
//int j=rand.nextInt(2)+1;
petal=petalw*petall;
sepal=sepalw*sepall;
double s1=sepal1-sepal;
double s2=sepal2-sepal;
double p1=petal1-petal;
double p2=petal2-petal;
s1=Math.abs(s1);
s2=Math.abs(s2);
p1=Math.abs(p1);
p2=Math.abs(p2);

if(s1<s2){  //if sepal is closer to 2
    if(p1<p2){
        listB.insertAtEnd(id,sepall,sepalw,petall,petalw);
    }else{
        double s=s2-s1;
        double p=p1-p2;
        if(s>p){
            listA.insertAtEnd(id,sepall,sepalw,petall,petalw);
        }else{
            listB.insertAtEnd(id,sepall,sepalw,petall,petalw);
        }
    }
}else{
    if(p2<p1){
        listA.insertAtEnd(id,sepall,sepalw,petall,petalw);
    }else{
        double s=s1-s2;
        double p=p2-p1;
        if(s>p){
            listB.insertAtEnd(id,sepall,sepalw,petall,petalw);
        }else{
            listA.insertAtEnd(id,sepall,sepalw,petall,petalw);
        }
    }
}
}
}catch(FileNotFoundException fne){
System.out.print("File not Found");
}catch(IOException ex){
ex.printStackTrace();
}finally{
//if(reader.readLine()!=null){
    try{
        reader.close();
    }catch(IOException ex){
        ex.printStackTrace();
}
}
//}
}
}

public void itteration(){
int size=listA.getSize();
petal1=listA.calculateMeanPetal();
petal2=listB.calculateMeanPetal();
sepal1=listA.calculateMeanSepal();
sepal2=listB.calculateMeanSepal();
Node node=listA.getEnd();
for(int i=size;i>0;i--){
    id=node.getid();
    sepall=node.getsepall();
    sepalw=node.getsepalw();
    petall=node.getpetall();
    petalw=node.getpetalw();
    petal=petalw*petall;
    sepal=sepalw*sepall;
    double s1=sepal1-sepal;
    double s2=sepal2-sepal;
    double p1=petal1-petal;
    double p2=petal2-petal;
    s1=Math.abs(s1);
    s2=Math.abs(s2);
    p1=Math.abs(p1);
    p2=Math.abs(p2);

    if(s1<s2){  //if sepal is closer to 2
        if(p1<p2){

        }else{
            double s=s2-s1;
            double p=p1-p2;
            if(s>p){

            }else{
                listA.deleteAtPos(i);
                listB.insertAtEnd(id,sepall,sepalw,petall,petalw);
            }
        }
    }else{
        if(p2<p1){
            listA.deleteAtPos(i);
            listB.insertAtEnd(id,sepall,sepalw,petall,petalw);
        }else{
            double s=s1-s2;
            double p=p2-p1;
            if(s>p){
                listA.deleteAtPos(i);
                listB.insertAtEnd(id,sepall,sepalw,petall,petalw);
            }else{

            }
        }

    }
node=node.getPrev();
}
size=listB.getSize();
node=listB.getEnd();
for(int i=size;i>0;i--){
    id=node.getid();
    sepall=node.getsepall();
    sepalw=node.getsepalw();
    petall=node.getpetall();
    petalw=node.getpetalw();
    petal=petalw*petall;
    sepal=sepalw*sepall;
    double s1=sepal1-sepal;
    double s2=sepal2-sepal;
    double p1=petal1-petal;
    double p2=petal2-petal;
    s1=Math.abs(s1);
    s2=Math.abs(s2);
    p1=Math.abs(p1);
    p2=Math.abs(p2);

    if(s2<s1){  //if sepal is closer to 2
        if(p2<p1){

        }else{
            double s=s2-s1;
            double p=p1-p2;
            if(s>p){

            }else{
                listB.deleteAtPos(i);
                listA.insertAtEnd(id,sepall,sepalw,petall,petalw);
            }
        }
    }else{
        if(p2<p1){
            listB.deleteAtPos(i);
            listA.insertAtEnd(id,sepall,sepalw,petall,petalw);
        }else{
            double s=s2-s1;
            double p=p1-p2;
            if(s>p){
                listB.deleteAtPos(i);
                listA.insertAtEnd(id,sepall,sepalw,petall,petalw);
            }else{

            }
        }

    }
node=node.getPrev();
}
}