0

ループ内で配列 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 (egxnew A()、x は cluster_anlysis のインスタンス) の囲みインスタンスで割り当てを修飾する必要があります。

4

4 に答える 4

4

外部クラスのインスタンスを使用して、外部クラスの静的メソッドから内部クラスのインスタンスを作成します。

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

main メソッドの最初の行で cluster_anlysis インスタンスを既に作成しているためです。

cluster_anlysis obj = new Cluster_anlysis();

簡単にできます。

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

Javaの内部クラスについて読む

ただし、外部クラスの非静的メソッドから内部クラス インスタンスを作成する場合は、 Outer Class のインスタンスは必要ありません。

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

また、@ARS および @JB Nizet がソリューションに投稿したクラス名の規則に従います。

于 2012-11-04T13:16:33.783 に答える
2

あなたはJavaから始めているようです。現時点では、内部クラスをいじらないようにすることをお勧めします。各 Java クラスを独自のファイルで定義すると、すべてがより簡単になります。

Java の命名規則についても学びます。

  • クラスは大文字で始まり、CamelCased: ClusterAnalysis, IpData. アンダースコアを含めないでください。
  • 変数は小文字で始まり、camelCased:cです。アンダースコアを含めないでください。

基本に慣れたら、 Java チュートリアルで内部クラスと静的内部クラスについて学習してください。しかし、内部クラスは悪用されるべきではありません。基本的なルールは、ファイルごとに 1 つのクラスを持つことです。

于 2012-11-04T13:20:31.113 に答える
0

外部クラス Instance を使用して内部クラス コンストラクターを呼び出す

お気に入り

c[i]=new cluster_analysis().new ipdata();
于 2012-11-04T13:25:27.557 に答える
0

ipdataとして宣言するのが最善だと思いますstatic。それはエラーを排除します。この場合、インスタンス化cluster_analysisするためにインスタンス化する必要はありません。ipdataipdatastatic


ああ、慣例により、代わりに名前を使用することを検討することをお勧めしますIpData-ClusterAnalysisクラス名は通常大文字で始まり、別の回答も指摘したように「キャメルケース」です。

于 2012-11-04T13:20:10.303 に答える