2012-11-04 70 views
0

我想初始化循環中的數組C,但它給出了錯誤:
C是類ipdata的數組,我已經聲明它並嘗試在循環內初始化它。爲什麼這個java初始化給出錯誤?

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的實例)。

回答

4

您使用的外類實例您的外部類的靜態方法創建內部類實例。

c[i]= new cluster_anlysis().new ipdata(); 

因爲您已經讀取了在main方法的第一行創建了cluster_anlysis實例。

cluster_anlysis obj = new Cluster_anlysis(); 

你可以簡單的做。

c[i]= obj.new ipdata(); 

瞭解Inner classes in java

,但如果你想從外部類的非靜態方法創建一個內部類實例你不需要你的外部類的實例。

public class OuterClass { 
     public void method(){ 
      InnerClass inner = new InnerClass(); 
     } 
     class InnerClass{ 
     } 
    } 

並且還遵循@ A.R.S和@JB Nizet在其解決方案中發佈的類名稱約定。

0

我認爲最好的辦法是宣佈ipdatastatic;這將消除錯誤。在這種情況下,應該不需要實例化cluster_analysis以實例化ipdata,並且有意義的是ipdata事實上應該是static


哦,按照慣例,你可能要考慮使用的名稱IpDataClusterAnalysis代替 - 類名稱通常開始以大寫字母屬於「駝峯」,作爲另一個問題的答案也指出。

2

看來你是從Java開始的。我建議暫時避免與內部課程混淆。在自己的文件中定義每個Java類,一切都會更簡單。

還可以瞭解Java的命名約定:

  • 類有大寫字母開頭,並駝峯格式:ClusterAnalysisIpData。它們不應該包含下劃線。
  • 變量以小寫字母開頭,並以駱駝爲基礎:c。它們不應該包含下劃線。

一旦您更熟悉基礎知識,請在the Java tutorial中瞭解內部類和靜態內部類。但內部階層不應該被濫用。基本規則是每個文件都有一個類。

+0

+1 - 該任擇議定書需要得到壓痕和嵌入式空格右了。 –

0

使用外部類的實例調用內部類的構造函數

c[i]=new cluster_analysis().new ipdata(); 
相關問題