Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

テストの点数を出力<オブジェクト指向

class ExamScore{
    private int math;
    private int eng;
    private int prog;
    double hei;

    private ExamScore(){
        math = 0;
        eng = 0;
        prog = 0;
        hei = 0;
    
    }
    public ExamScore(int m, int e, int p){
        this();
        math = m;
        eng = e;
        prog = p;
        if(m<0 && e<0 && p<0){
            System.out.println("");
            System.out.println("WARNING! 点数が範囲外です.");
            System.out.println("");
        }
    }
    public void setMath(int m){
        this.math = m;
        System.out.println("数学の点数を設定します.");
    }
    public void setEng(int e){
        this.eng = e;
        System.out.println("英語の点数を設定します.");
    }
    public void setProg(int p){
        this.prog = p;
        System.out.println("プログラミングの点数を設定します.");
    }
    public int getMath(){
        System.out.println("数学の点数を調べます.");
        return this.math;
    }
    public int getEng(){
        System.out.println("英語の点数を調べます");
        return this.eng;
    }
    public int getProg(){
        System.out.println("プログラミングの点数を調べます.");
        return this.prog;
    }
    public double getAve(){
        System.out.println("平均点を調べます.");
        return this.hei;
    }
}

class ExA005{
    public static void main(String args[]){
        int m,e,p;
        double hei;

        ExamScore scor1;
        scor1 = new ExamScore(-50,80,90);
        
        hei = scor1.getAve();
        m = scor1.getMath();
        e = scor1.getEng();
        p = scor1.getProg();
        System.out.println("平均点は"+(m+e+p)/3+"点です.");

    }
}

これをコンパイルしても

平均点を調べます.
数学の点数を調べます.
英語の点数を調べます.
プログラミングの点数を調べます.
平均点は40点です.

となってしまいます


数学の点数を設定します.
WARNING! 点数が範囲外です.
英語の点数を設定します.
プログラミングの点数を設定します.
平均点を調べます.
数学の点数を調べます.
英語の点数を調べます.
プログラミングの点数を調べます.
平均点は56.7 点です.

という出力にするには、どうしたらいいのでしょう?

2

回答

88053

閲覧

2件の回答

評価

0

なんで別のスレッドを上げてるんだろう。

どうやら少し進んだようなんで。

論理式が理解できてないのかも知れないな。

評価

0

範囲外のチェックをするタイミング。いまのコードはコンストラクタで範囲外のチェックをしていますよね。コンストラクタがいつ呼ばれるのかを考えてみてください。

> 数学の点数を設定します.
> WARNING! 点数が範囲外です.
> 英語の点数を設定します.
> プログラミングの点数を設定します.

このような出力を実現するためには、数学の点数を設定した後に範囲のチェックをおこなう必要があります。

ちなみに数学の点数を設定するのは setMath(int m) のようですが、これはちゃんと呼び出されているでしょうか。確認してみてください。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。