2016-04-23 27 views
0

なぜコンストラクタに言われたのですか?Time_Class_sub(int, int, int)は未定義です。 int 4,5,6は既に括弧内に記載されています。コンストラクタTime_Class_sub(int、int、int)は定義されていません

これは、メインクラスです:

public class Time_Class_main { 
    public static void main(String [] args){ 
     Time_Class_sub linktosub = new Time_Class_sub(4, 5, 6); 

     //linktosub.settime(3, 4, 65); 

     System.out.println(linktosub.tomilitary()); 
    } 
} 

これは、子会社のクラスです:

public class Time_Class_sub { 
    private int hour; 
    private int minute; 
    private int second; 

    public void Time_Class_sub(int h, int m, int s){ 
     //if the condition is met, assign hour = h. If not, h = 0 
     hour = ((h >= 0 && h < 24) ? h : 0); 
     minute = ((m >= 0 && m < 60) ? m : 0); 
     second = ((s >= 0 && s < 60) ? s : 0); 
    } 

    public String tomilitary() { 
     return String.format("%02d:%02d:%02d", hour, minute, second); 
    } 
} 
+0

本当に、 'Time_Class_sub(int h、int m、int s)'はクラスですか?私の機能にもっと似ています。クラスであるためには、 'Time_Class_sub'というクラスにし、' public Time_Class_sub(int h、int m、int s) '(voidなし)という関数を持たなければなりません。 – user3079834

答えて

0

はまた、あなたが

と呼ばれる機能を実装するために考えるかもしれません

public class Time_Class_sub 
{ 
    private int hour {get; set;} 
    private int minute {get; set;} 
    private int second {get; set;} 

    public Time_Class_sub(int h, int m, int s) 
    { 
    //if the condition is met, assign hour = h. If not, h = 0 
    hour = ((h >= 0 && h < 24) ? h : 0); 
    minute = ((m >= 0 && m < 60) ? m : 0); 
    second = ((s >= 0 && s < 60) ? s : 0); 
    } 

    public string tomilitary() { 
    return String.format("%02d:%02d:%02d", hour, minute, second); 
    } 
} 

をお試しくださいでも、ボイドない - クラスの

あなたがC#でプログラミングしている場合は(自分のプログラミング言語がタグとして追加してください)

+0

Javaタグが追加されました。あなたはあなたの解決策を説明するのに役立つでしょうか?ありがとう。 –

+0

私が書いたように、私の解決策はC#ですが、Javaでは同じでなければなりません。 Javaではオーバーライドも可能です。しかし、私はあなたの知識を知らないので、何が起こっているのか何がどのように起こるのかを多く知ることができます。たぶん自分自身で検索するのがベストでしょう。https://www.google.de/#q=java+override+tostring – user3079834

1

コンストラクタは戻り値の型を持っていません。あなたの事例では、事故によってクラスと同じ名前を持つ通常のインスタンスメソッドを指定しました(覚えておいて、フィールド、型名、メソッド名の3つの異なる名前空間が有効です)。

voidを削除すると設定されます。

また、Java naming conventionsに従ってください。クラス名はTimeClassSubである必要があります。

編集:これは単なる割り当てではなく、プロダクションコードであれば、聖なるものすべてのために、thisを読んでください。

+0

ありがとうございます。 [code] void [/ code]を削除した後に動作します –

+0

ありがとうございます。 [code] void [/ code]を削除した後に動作します。 しかし、戻り値を持たなければならないpublic Stringやpublic intのようなメソッドとは対照的に、voidを持つメソッドではコンストラクタを使用できないのはなぜですか? また、コンストラクタを動作させるために、クラスと同じメソッド名を指定する必要はありませんか? –

+0

ある意味のコンストラクタは、構築中のオブジェクトである 'this'という値をすでに持っています。他のものを返す意味はなく、戻り型を指定する意味はありません。すでに知っているからです。コンストラクタは、コード内で呼び出せるメソッドではありません。また、コンストラクタはクラスと同じ名前を持つ必要があります。 –

関連する問題