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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Q&A

2回答

6363閲覧

不適合な型: 精度が失われる可能性があるdoubleからintへの変換のエラーについて

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

0グッド

0クリップ

投稿2018/11/26 03:22

編集2018/11/27 02:53

ポイントカードのポイント計算システムで、下記の2つのクラスを持つプログラムをつくろうとしているんですが、以下のエラーが発生してしまい、どのように対処してよいか分かりません、、、

あと、プログラムとしても、このコードで正しいのかどうかもまだ実行できていないのでわからず不安です。。
どなたか教えていただけませんでしょうか。
1つ目のクラス
フィールド: 現在のポイント数
メソッド: 購入する商品の金額を引数として、購入後のポイントを計算するメソッド(ポイント付与率は2%)
2つ目のクラス
1つ目のクラスのフィールドに、現在のポイント数を設定
標準入力から、購入する商品の金額を入力
1つ目のクラスのメソッドを使って商品購入後のポイント数を計算し、結果を標準出力で出力
以下のエラーメッセージが発生しました。

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

H:\>javac PointsManage.java Pointcard.java PointsManage.java:28: エラー: 不適合な型: 精度が失われる可能性があるdoubleからin tへの変換 finalPoint = (pt.nowPoint + pt.buyPoint) *0.02; ^ エラー1個 H:\>

該当のソースコード

Java

1「2つ目のクラス」になります 2// ポイントカードの情報を処理するクラス 3import java.io.*; 4import java.lang.*; 5public class PointsManage { 6 public static void main(String[] args) { 7 String str; 8 int finalPoint,nowPoint,buyPoint; 9 try { 10 // 現在のポイント数を設定 11 PointCard pt = new PointCard(); 12 pt.nowPoint = 1000; 13 pt.buyPoint=0; 14 //標準入力の準備 15 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 16 System.out.println("今回の購入金額を入力してください。"); 17 str = reader.readLine(); 18 buyPoint = Integer.parseInt(str); 19 pt.buyPoint = buyPoint; //標準入力されたポイントをポイントカードクラスのオブジェクトの「buyPoint」フィールドに代入 20 // ポイントカードクラスに定義されている、商品購入後のポイント数を計算するメソッドを呼び出し 21 finalPoint = (pt.nowPoint + pt.buyPoint) *0.02; 22 23 // 計算結果を出力 24 System.out.println("付与されたポイントは" + finalPoint + "ポイントです。"); 25 } 26 catch(IOException e) { 27 System.out.println("標準入力でエラーが発生しました。"); 28 } 29 } 30}

以下は「1つ目のクラス」に値するコードです
// ポイントカードの情報を管理するクラス
import java.io.;
import java.lang.
;
public class PointCard {
// str: 標準入力したもの
String str;
// studentNumber: 生徒の出席番号
int nowPoint,buyPoint;//nowPoint:現在のポイント数,buyPoint:購入金額,
int finalPoint;//finalPoint:商品購入後のポイント数を計算するメソッド
}

試したこと

double型でfinalPoint,nowPoint,buyPointを定義し、strをdouble型で読み込んでも、
上のソースコードのようにint型で定義しても上のエラーメッセージがどうしても出てしまいます・・
小数点を含む計算の場合、int型ではダメだということでしょうか・・??

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

ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

double型でfinalPoint,nowPoint,buyPointを定義し、strをdouble型で読み込んでも、

上のソースコードのようにint型で定義しても上のエラーメッセージがどうしても出てしまいます・・

finalPointをdouble型にすれば通りませんか?

小数点を含む計算の場合、int型ではダメだということでしょうか・・??

明示的にintにキャストしてやる必要があります。


mainメソッドとPointクラスの両方にfinalPointがあるのは混乱の元です。
おそらく前者は消去した方が良いでしょう。

また、コンストラクタやメソッドを上手く利用するようにしましょう。

投稿2018/11/26 03:24

編集2018/11/26 03:54
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/11/26 04:03

回答ありがとうございます!!! PointsManage.javeのStringとint型のfinalPoint,nowPoint,buyPoint定義を削除すると、「シンボルがありません」というエラーが出てきてしまいます。。。 また、finalPoint,nowPoint,buyPointをすべてdouble型で定義しても、不適合な型のエラーがでてきてしまいました。。。
LouiS0616

2018/11/26 04:06

finalPoint = ... ⇒ pt.finalPoint = ...
LouiS0616

2018/11/26 04:07 編集

根本的には、クラスのフィールドを外部から好きにいじれる設計の方が問題ですが。
退会済みユーザー

退会済みユーザー

2018/11/26 04:28

ご返信ありがとうございます、もう一度やってみます。
guest

0

キャストしてあげる必要がありますね。

現在のコード

finalPoint = (pt.nowPoint + pt.buyPoint) *0.02;

doubleをintにキャストしたコード

finalPoint = (int)((pt.nowPoint + pt.buyPoint) * 0.02);

これでコンパイルは通ると思いますが。

小数点の箇所は切上げ、切り捨て、四捨五入など仕様を考える必要はありそうですね。

PointCardクラスのプロパティが外部から操作されてしまうことを考慮して、
次のように変更することもありかと。

public class PointCard { private int nowPoint; private int buyPoint; public PointCard(int nowPoint, int buyPoint) { this.nowPoint = nowPoint; this.buyPoint = buyPoint; } public int charge(int point) { buyPoint += point; return (int)((nowPoint + buyPoint) * 0.02); } }

投稿2018/11/26 03:56

編集2018/11/26 04:25
MAKOTO_MOBY

総合スコア193

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/11/26 04:29

ご回答ありがとうございます!!!その箇所でint型にキャストしなければいけなかったのですね。変更点まで書いていただき、ありがとうございます!
LouiS0616

2018/11/26 04:33

chargeメソッドの実装が不自然です。 好き放題にチャージできるポイントカードなど存在するのでしょうか。 たぶん0.02ってのはポイント還元率だと思うんですよね。 そうなると (int)((nowPoint + buyPoint) * 0.02) の値は完全に無意味です。
MAKOTO_MOBY

2018/11/26 04:39

おっしゃるとおりだと思います。
退会済みユーザー

退会済みユーザー

2018/11/26 05:08

finalPoint = (int)(pt.nowPoint + (pt.buyPoint* 0.02)); が正しい式でした・・・ご指摘ありがとうございます!
LouiS0616

2018/11/26 05:10

そうなると、buyPointは『購入額』であって『ポイント』では無いですね。 名前を変えた方が良いかと。
退会済みユーザー

退会済みユーザー

2018/11/26 05:41

確かにそうですね、Priceにしました!ありがとうございます・・!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問