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

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

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

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

インターフェース

インターフェイスという用語はハードウェア・ソフトウェアの両方に使うことができます。 一般的に、インターフェイスは内部処理の詳細を見せないように設定されます。オブジェクト指向プログラミングにおいて、インターフェイスはabstractクラスとして定義されます。

Q&A

解決済

2回答

1229閲覧

関数型インターフェースと計算処理

icecleam

総合スコア46

Java

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

インターフェース

インターフェイスという用語はハードウェア・ソフトウェアの両方に使うことができます。 一般的に、インターフェイスは内部処理の詳細を見せないように設定されます。オブジェクト指向プログラミングにおいて、インターフェイスはabstractクラスとして定義されます。

0グッド

0クリップ

投稿2020/07/19 15:21

編集2020/07/20 14:09

下記の問題の解答と簡単な解説をお願いします。
一応、途中まで作成した2つソースも載せておきますので(参考になるのかは分かりませんが。。。)、お手数ですがご回答頂けると幸いです。
関数型インターフェースを利用した計算の方法、[StandardWeight。java]内での処理方法などご教授ください。
すみませんが、よろしくお願いします。

【問題文】
身長から標準体重を求める関数「stdWeight」を関数型インターフェースを使って定義してください。ただし身長はcm単位のint値、体重はkg単位のdouble値で表すとします。標準体重は以下の式でBMIが22となるときの値とします。

体重 = 22 * (身長 × 身長) (体重:kg、身長m)

この関数を使ってコマンドラインから身長をcm単位で入力すると、標準体重を kg 単位で出力するメインプログラムを作ってください。

[StandardWeight。java]
public class StandardWeight {
public static void main(String[] args) {
double weight = 0;

System.out.println(); }

}

[FunctionalInterface。java]
public interface FunctionalInterface {
public abstract void doSomething(String text);
}

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

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

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

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

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

guest

回答2

0

質問文見る分には標準の関数型インタフェースを使ってはいけないようには読めないので、
標準で用意されている関数型インタフェースにintを受け取ってdoubleを返す、
IntToDoubleFunctionというインタフェースがあるのでそちらを利用してもいいのでは。

java

1public static void main(String[] args) { 2 IntToDoubleFunction stdWeight = height -> { 3 double height_meter = (double)height / 100; 4 return (height_meter * height_meter) * 22; 5 }; 6 7 System.out.println(stdWeight.applyAsDouble(170)); 8}

投稿2020/07/20 01:09

yureighost

総合スコア2183

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

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

0

ベストアンサー

関数型インタフェースについて、目を通してみてください。

例では、Stringの引数を受け取ってコンソール出力しています。

java

1public interface FunctionalInterface { 2 public abstract void doSomething(String text); 3} 4 5FunctionalInterface func = text -> System.out.println(text); 6func.doSomething("do something"); 7// do something

今回の場合も同様に、こんな感じになろうかと思います。
あとはBMIの計算すればいいかと。

java

1CalcStandardWeight weight = height -> { 2 return height + 1; // なんやかやの計算 3}; 4 5System.out.println(weight.stdWeight(10)); // 11が表示

投稿2020/07/19 16:26

momon-ga

総合スコア4820

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

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

icecleam

2020/07/20 14:39

ご回答いただきありがとうございます。 大変無知な質問で申し訳ないのですが、 上記の内容をうまく実装できませんでした。。 [FunctionalInterface.java] [StandardWeight。java] に分けてソースをいただくことは可能でしょうか。 お手数をおかけしますが、ご回答頂けると幸いです。 よろしくおねがいします。
momon-ga

2020/07/21 03:30 編集

なぜか回答後のほうが質問のソースが退化してますが・・・ FanctionalInterfaceは、すでに出来ています。 Standardeightは以下の2行で、"do something"が表示されます。 FunctionalInterface func = text -> System.out.println(text); func.doSomething("do something"); 特に、こだわりなければ、yureighostさんの実装を書けばいいんじゃないかと思います。
icecleam

2020/07/23 04:58

ご回答ありがとうございます [FanctionalInterface]はそのままで [StandardWeight。java] に下記の記載をしてコンパイルしたのですが、以下のエラーが出てしまいます・・・ 1時間くらい悩んだのですが、解決できないので何度も申し訳ありませんが、知恵をお貸しください・・・ [エラー内容] StandardWeight.java:4: エラー: 不適合な型: Stringをdoubleに変換できません: double height_meter = (double)height / 100; ^ StandardWeight.java:5: エラー: 不適合な型: ラムダ式の戻り型が不正です return (height_meter * height_meter) * 22; [StandardWeight。java] public class StandardWeight { public static void main(String[] args) { FunctionalInterface stdWeight = height -> { double height_meter = (double)height / 100; return (height_meter * height_meter) * 22; }; } }
momon-ga

2020/07/23 06:59 編集

ソースが劣化した部分が、まんま対応できていないです。 今の状態 > public abstract void doSomething(String text) 編集前の定義 > public double stdWeight(int height) 関数の引数をStringでなくintに戻してください。 戻り値をvoidからdoubleに直してください。
momon-ga

2020/07/23 07:18

ちなみに、元の関数インターフェースを変更したくないのであれば、 FunctionalInterface stdWeight = height -> { double height_meter = Double.parseDouble(height) / 100; System.out.println( (height_meter * height_meter) * 22); }; とすると、参考例にあった、doSomethingのような挙動(Stringを受け付けて画面表示)となります。
icecleam

2020/07/23 07:20

ありがとうございます! 先ほどのエラーは消えました! すみません、最後の質問なのですが ・コマンドラインから身長をcm単位で入力すると、標準体重を kg 単位で出力する の部分を実装したいのですが、以下のソースで実行(身長160cmの場合)すると以下のように表示されてしまいます。 どのように修正すれば身長160cmの時の標準体重を表示することができるでしょうか・・・ 何度もお手数をおかけしますが、お付き合いいただけると幸いです・・ [実行時の結果] uchitokacbookea:PG学習 XXXX$ java StandardWeight 160 StandardWeight$$Lambda$1/88579647@1c2c22f3 [StandardWeight。java] public class StandardWeight { public static void main(String[] args) { FunctionalInterface stdWeight = height -> { double height_meter = (double)height / 100; return (height_meter * height_meter) * 22; }; System.out.println(stdWeight); } }
momon-ga

2020/07/23 07:33 編集

stdWeight 自身は、FunctionalInterfaceであって、数値でも文字でもないからです。 使い方はすでに回答しているのですが・・・ > func.doSomething("do something"); つまり、 > System.out.println(stdWeight); を System.out.println(stdWeight.doSomething(160)); のようにすると、メソッドの計算結果を表示します。 気づいているか、わかりませんが・・・ > CalcStandardWeight weight = height -> { > return height + 1; // なんやかやの計算 > }; > > System.out.println(weight.stdWeight(10)); // 11が表示 と、答えており、計算式と入力の受付以外は、最初から回答しています。 CalcStandardWeightをそのまま使ってくれれば、なんやかの計算式を現状に修正するだけで良かった。 わざわざ関数定義を修正して使いにくくしたことを”退化した”とコメントしました。
icecleam

2020/07/23 07:41

なるほどです。。。 すみません、余計なお手数をおかけしたみたいですね。。 おかげさまで、無事に解決することができました。 長い時間お付き合いいただき、ありがとうございました!
momon-ga

2020/07/23 07:48 編集

おつかれさまでした。 最後にどうでもいい話 関数の変数名をheightToにすると heightTo.stdWeight(170) という風に、身長を標準体重に変換するんだろうなぁと直感的になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問