質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • Java

    14060questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Eclipse

    1703questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

javaでセッター・ゲッター・カプセル化について

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,297

khr0404

score 35

前提・実現したいこと

こんにちは。
今年度から社会人となりプログラミングを勉強しているのですが表題のセッター・ゲッター・カプセル化がうまくいきません。

使っているのはeclipseで言語はjavaです。

現在のソースで消費税率と商品価格をセッターで設定し消費税率、商品価格、税込みの価格、を出力したいです。

よろしくお願いします。

発生している問題・エラーメッセージ

消費税率と商品価格をカプセル化してセッターで値を出力する書き方がわかりません。

該当のソースコード

public class Price {


    private int price;

    private double tax;



    public void setTax( double tax1 ) {

        this.tax = tax1;
        tax1 = 0.08;

    }


    public void setPrice( int price1 ) {

        this.price = price1;
        price1 = 100;
    }


    public double getTax() {

        return this.tax;
    }



    public int getPrice() {

        return this.price;
    }


    public int getPriceIncludingTax() {

        return (int) ( this.price * ( 1.0 + tax ) );


    }


}
public class PriceExamMain extends Price {


    public static void main( String[] args ) {

        System.out.println( "価格を" + price + "に設定" );
        System.out.println( "税率を" + tax + "に設定" );


    }
}

発生している問題・エラーメッセージ

この状態で実行したところこのようなエラーがでました。

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    フィールド Price.price は不可視です
    フィールド Price.tax は不可視です

ソースコードを編集しました

もう一度やり直してみました

public class Price {


    private static int price;

    private static double tax;


    public void setTax( double tax1 ) {

        this.tax = tax1;
        tax1 = 0.08;
        System.out.println( "税率を" + tax + "に設定" );

    }


    public void setPrice( int price1 ) {

        this.price = price1;
        price1 = 100;
    }


    public double getTax() {

        return this.tax;
    }


    public int getPrice() {

        return this.price;
    }


    public int getPriceIncludingTax() {

        return (int) ( this.price * ( 1.0 + tax ) );


    }


    public static void main( String[] args ) {

        System.out.println( "価格を" + price + "に設定" );
        System.out.println( "税率を" + tax + "に設定" );


    }
}

発生している問題・エラーメッセージ

上のソースだとこのような回答になりました。

価格を0に設定
税率を0.0に設定

試したこと

private修飾子なので違うクラスからアクセスできないのはわかるのですがそのような場合にどこにメインクラスを置けばよいのでしょうか?

補足情報(言語/FW/ツール等のバージョンなど)

より詳細な情報

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kaputaros

    2016/04/13 15:08 編集

    > coco_vauerさん this.は自分のクラスということを明示的にしているので、親クラスやローカル変数に同じものがない場合、省略しても問題ありませんよ?

    キャンセル

  • khr0404

    2016/04/13 15:16

    >kaputarosさん アドバイスありがとうございます。初めての質問だったので戸惑いましたが無事解決しそうです。

    キャンセル

  • khr0404

    2016/04/13 15:18

    >coco_bauerさん 回答ありがとうございます。taxの部分訂正し税込み価格の計算式も直したら上手くいきそうです。ありがとうございました。

    キャンセル

回答 3

checkベストアンサー

+3

問題にとりかかる前に、下記のように記述を統一したいですね。
シンプルな問題が複雑に見えます。

public class Price {

    private int price;

    private double tax;

    public void setTax( double tax1 ) {

//        tax = tax1;
        this.tax = tax1;

    }

    public void setPrice( int price1 ) {

        this.price = price1;

    }

// setなのに引数がないですし、getしています。また、同様の処理が既にあります。
//    public int setPriceIncludingTax() {
//
//        return (int) ( this.price * tax );
//
//    }

    public double getTax() {

        return this.tax; 
    }

    public int getPrice() {

        return this.price; 
    }

    public int getPriceIncludingTax() {

//      return (int) ( this.price * tax );
        return (int) ( price * tax );
    }
}

このクラスを使うときは以下のように使うでしょう。

Price price = new Price();
price.setPrice(1000); // 価格は1000円
price.setTax(1.08); // 税率は8%
System.out.println("税込み価格は、" + price.getPriceIncludingTax() + "円です。");

とりあえず、これで動くと思います。

ただ、そもそも
price.setTax(1.08);
の部分に違和感を感じたり、引数ありのコンストラクタがあった方が良いのではないかなど、
違和感が多々出てくると思いますが、勉強しながら、拡張or修正されていったらいいと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/13 15:36

    回答ありがとうございます。

    わかりやすい説明で無事動きました。
    税率の部分とコンストラクタはもう一度勉強しなおします。

    ありがとうございました。

    キャンセル

+2

taxに何か値をセットしましたか?していない場合は0になると思います。

ソースコードの一部分だけではわからないのでPriceをインスタンス化しているクラスのコードも追記してください。
また、ソースコードは専用の記述方法があるので質問を修正してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/13 14:49

    謎の理不尽なマイナス評価を0に戻しましたw

    キャンセル

  • 2016/04/13 15:03

    GJ(笑)

    キャンセル

  • 2016/04/13 15:34

    回答ありがとうございます。
    アドバイスありがとうございます。
    これからも質問する際には気をつけていきたいと思います。

    キャンセル

  • 2016/04/13 15:38

    カプセル化について下記を参考にして、理解し直したほうがいいと思いますよ。
    https://teratail.com/questions/31760

    キャンセル

+2

public int setPriceIncludingTax() 

そもそもテーマが「セッター・ゲッター・カプセル化」なのに、この部分の記述が気持ち悪いです。
setしてるのに、intが返ってくるの???
「getPriceIncludingTax()」だけで十分では?

あと、「PriceIncludingTax」なのに、なんで税引価格と税率をかけてるの?

追記:

フィールド Price.price は不可視です

Priceクラスの中で「private int price」と定義してますね。
これでは定義したクラスからしかアクセスできません。
サブクラスからはsetPrice(), getPrice()を介してではないとpriceにはアクセスできません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/13 15:29

    回答ありがとうございます。
    考えてみたらおかしかったです。
    追記分がわかりやすい説明ありがとうございました。

    キャンセル

関連した質問

  • 受付中

    明解Java入門編演習9−3

    この演習はDayクラスを使わずに行う演習なのでしょうか? Dayクラスを使うのなら、銀行口座クラスにtoStringメソッドを作る理由が分かりません。 また、もしDayクラスを

  • 解決済

    [java]送料を算出するプログラムを作成

    こんにちは。 独学でjavaを勉強しております。 今、表題の問題を解いているのですが、 壁にぶつかってしまいました。 下記のソースのpriceがreturnできず、

  • 解決済

    会員情報システム(Java)での作り方

    javaで会員情報システムのようなものを作りたいです。 下記の実行結果(コマンドプロンプトで実行)になるような、登録プログラムを作成したいのですが、作成方法が分かりませんので、教

  • 解決済

    初期化メソッドのスマートな書き方

    現在,プログラム内に次のような,int型配列とdouble型配列の全ての要素に0を入れる(初期化する)というメソッドを書いています. 見てわかる通り,非常に冗長な書き方です.簡潔

  • 解決済

    javaの配列に文字を格納して処理する方法

     疑問、質問 javaについての質問です。 キーボードから文字を一字ずつ入力し配列に格納する。 その後配列に格納されていた文字によってそれぞれ順番に処理していくというプログラ

  • 解決済

    double型の範囲について

    前提・実現したいこと 毎度お世話になっております。グラフで曲線を描きたいと思っております。 結果を格納する変数にdouble型を用いているのですが、途中から値がおかしくなります

  • 解決済

    java キーボード入力を用いた計算プログラム

    概要 キーボードから入力したテストの結果から、合計・平均・順位(バブルソート)分散・標準偏差を導出するプログラムを作っています。 具体的には 生徒数を入力 ↓ 生徒数の応じた点数を

  • 受付中

    他メソッドにwhile文のbreakやcontinueを渡す方法

    先日の質問ではここでお世話になりました。 銀行の簡単なプログラムを作っています。 入金、出金、振込と選択肢を与えて、各処理を終わったら利用確認メソッドが呼び出されはい、なら最初から

同じタグがついた質問を見る

  • Java

    14060questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Eclipse

    1703questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。