我试图在循环中初始化数组C,但它给出了错误:
C是类ipdata的数组,我已声明它并尝试在循环内初始化它。
import java.io.*;
import java.util.*;
public class cluster_anlysis {
class ipdata{
float a,b;
int cluster;
ipdata()
{
a=0;
}
}
public float modc(float a){
if(a<0.0)
a=-a;
return a;
}
public static void main(String[] args) {
cluster_anlysis obj=new cluster_anlysis();
ipdata C[] = new ipdata[50];
float mean1,mean2,mean3;
int i,j,n1=0,n2=0,n3=0,flag=0;
float ina=0.0f;
float inb=0.0f;
//BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Scanner scan =new Scanner(System.in);
System.out.println("pls enter no of data: ");
Integer no = scan.nextInt();
System.out.println("\nnow enter the x and y values");
for(i=0;i<no;i++)
{
ina=scan.nextFloat();
inb=scan.nextFloat();
System.out.println(ina);
C[i]= new ipdata(); // this line is giving error
C[i].a=ina;
C[i].b=inb;
C[i].cluster=0;
}
}
}
可能是什么问题? 它说 : 不能访问类型为cluster_anlysis的封闭实例。必须使用cluster_anlysis类型的封闭实例限定分配(例如x.new A(),其中x是cluster_anlysis的实例)。
答案 0 :(得分:4)
使用外部类实例从外部类的静态方法创建内部类的实例。
c[i]= new cluster_anlysis().new ipdata();
因为您已经在第一行main方法中创建了cluster_anlysis实例。
cluster_anlysis obj = new Cluster_anlysis();
你可以这么简单。
c[i]= obj.new ipdata();
但是如果你想从你外层的非静态方法创建一个内部类实例,你就不需要你的外类的实例了。
public class OuterClass {
public void method(){
InnerClass inner = new InnerClass();
}
class InnerClass{
}
}
并遵循@ A.R.S和@JB Nizet在其解决方案中发布的类名约定。
答案 1 :(得分:2)
看来你是从Java开始的。我建议暂时避免搞乱内部课程。在每个Java类中定义自己的文件,一切都会更简单。
还要了解Java命名约定:
ClusterAnalysis
,IpData
。它们不应包含下划线。c
。它们不应包含下划线。一旦您对基础知识更加熟悉,请在the Java tutorial中了解内部类和静态内部类。但内心阶级不应该被滥用。基本规则是每个文件有一个类。
答案 2 :(得分:0)
我认为最好的做法是将ipdata
声明为 static
;这将消除错误。在这种情况下,为了实例化cluster_analysis
,不需要实例化ipdata
,ipdata
实际上应该static
是有道理的。
哦,按照惯例,您可能需要考虑使用名称IpData
和ClusterAnalysis
- 类名通常以大写字母开头并且是“CamelCased”,另一个答案也指出
答案 3 :(得分:0)
使用外部类Instance调用内部类构造函数
喜欢
c[i]=new cluster_analysis().new ipdata();