0

以下のプログラムがわかりません。コードで発生した 2 つのエラーについて言及しました。でも理由が理解できない

import java.io.*;
class sdata
{
    float per;
    int m,tm=0,i,n;

    sdata(int n)throws Exception
    {
       DataInputStream dis2=new DataInputStream(System.in);
       for(i=1;i<=n;i++)
       {
        System.out.print("enter marks of subject"+i);
        int m=Integer.parseInt(dis2.readLine());
        tm=tm+m;
       }
       per=tm/n;
    }
}

class disdata extends sdata
{
    //below line gives an error "constructor sdata in class xyz.sdata cannot be applied to given types required:int found:no arguments"

    disdata() throws Exception{             
      System.out.println("TOTAL MARKS OF SUBJECTS:"+tm);
      System.out.println("PERCENTAGE OF STUDENT:"+per);
    }

}
class sresult
{
    public static void main(String args[])throws  Exception
    {
       DataInputStream dis=new DataInputStream(System.in);
       int n=Integer.parseInt(dis.readLine());

       disdata objj=new disdata();
       //the below line creates an error saying "cannot find symbol" 
       objj.sdata(n);
    }
}
4

4 に答える 4

2

あなたsuper classが持っている場合、overloaded argument constructorあなたのサブクラスは電話をかけなければなりませんexplicitly

disdata() throws Exception{             
     super(some int vale youwanna pass);
            System.out.println("TOTAL MARKS OF SUBJECTS:"+tm);
        System.out.println("PERCENTAGE OF STUDENT:"+per);
    }

にある必要があることを忘れないでsuper()ください。first linedisdata() constructor

disdata objj=new disdata();
    //the below line creates an error saying "cannot find symbol" 
        objj.sdata(n);

constructorメソッドではありません。間違ったobjjを使用してコンストラクタsdata(n)を呼び出そうとしています。new演算子を使用して呼び出します。お気に入り:

disdata objj=new disdata(n);
于 2012-11-02T10:08:40.790 に答える
1

Java は、コンストラクターの適切な連鎖を強制します。コンストラクターの本体の最初のステートメントは、this(...)(同じクラスの別のコンストラクターへの呼び出し) またはsuper(...)(スーパークラス コンストラクターへの呼び出し) のいずれかである必要があり、明示的な呼び出しを含めない場合、Java は暗黙的な呼び出しを挿入しますsuper()残りのコンストラクタ本体の前。引数のないコンストラクターがないため、sdataこれはコンパイルに失敗します。

どちらかにする必要があります

  1. sdataorに引数なしのコンストラクターを追加する
  2. 既存の単一引数のスーパークラス コンストラクターを呼び出すにはsuper(0)、コンストラクターの最初に呼び出しを配置し​​ます。disdata
于 2012-11-02T10:17:37.507 に答える
0

で実行しようとする通常のメソッドとしてコンストラクターを呼び出すことはできませんobjj.sdata(n);。コンストラクターはメソッドではありません。

于 2012-11-02T10:10:32.793 に答える
0

sdataのスーパークラスでdisdataあり、引数なしで disdata のオブジェクトを作成し、disdataコンストラクターで int コンストラクターを呼び出さなかった場合、デフォルトでは使用できない引数コンストラクターsdataを見つけようとしないため、エラーが発生します。sdata

sdataコンストラクターから int コンストラクターを呼び出すdisdataか、引数なしのコンストラクターをsdata.

class sdata {
    float per;
    int m, tm = 0, i, n;
    sdata(int n) throws Exception {...}
    //No argument constructor
    sdata(){}
}
于 2012-11-02T10:12:37.613 に答える