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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Q&A

解決済

2回答

2093閲覧

配列、最大値、最小値

退会済みユーザー

退会済みユーザー

総合スコア0

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

0グッド

0クリップ

投稿2017/11/02 06:00

実数型の配列が与えられてメソッドfindRangeを作成し、全ての要素の値に対して以下の計算を行い,それらの値の最大値と最小値を求め表示しなさい。
要素の値をxとするとき,|x|3-|x|+3
とゆうものでプログラムを作ったのですが、
absを使わないとすればどーしたらいいですか?
min.maxの初期値は0でいいのか?
適切な変数名はなにか?
教えて欲しいです。よろしくお願いします!
public static void findRange(double[] array) {

double min = 0; double max = 0; for (int i = 0; i < array.length; i++) { double a = Math.abs(array[i]); double b = a * a * a - a + 3; if (i == 0) { max = b; min = b; } if (max < b) { max = b; } else if (min > b) { min = b; } } System.out.print("最大値:" + max + "最小値:" + min);

}

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

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

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

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

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

kei344

2017/11/02 07:13

質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。また、質問タグに「JAVA」など言語名を指定してください。
guest

回答2

0

少し難しいかも知れませんが、LouiS0616さんが言及されてない点だけコメントします。

min,maxの初期値

初期値がなんでもよいのはLouiS0616さんのコメント通りですが、初期化は必須です。

java

1int min; 2for (int i = 0; i < array.length; i++) { 3 ... 4} 5System.out.println(..., min);

このようなコードを書くとJavaコンパイラーは、

for文の中身が一度も実行されないことが有り得る
=>minに何も設定されないケースが有り得る
=>にもかかわらずprintlnメソッドの引数で参照している
=>それはプログラムの誤り

と見做しコンパイルエラーとなります。

それはさておき、使わないのに無意味な値を初期化するのは面白くないと考える人もいます。そこで、「forループの内部で最初の要素だったらmin,maxを初期化する」のだから「最初から先頭要素で初期化すればいいではないか」という考えも出てきます。そうすると、ループは配列の2番目から始めればよいことになりますね。

java

1int min = array[0]; 2int max = array[0]; 3for (int i = 1; i < array.length; i++) { 4 if (array[i] < min) 5 min = array[i]; 6 else if (array[i] > max) 7 max = array[i]; 8} 9System.out.println(..., min, max);

しかし、配列の要素数が0の場合min, maxの初期化を無条件に行うと存在しない配列要素をアクセスしようとしているという意味でArrayIndexOutOfBoundsExceptionが起こってしまいます(要するに実行時エラー)。それだと困る!という場合は、メソッドの先頭で「要素数が0なら何もせずに処理を終了する」といった配慮をします。

こうした細々とした点を考えるのは最初は混乱するかも知れません。分かりにくいと感じたら無理するよりは自分にとって分かり易いと感じる実装をしておくのもよい考えだと思います。

投稿2017/11/02 06:49

編集2017/11/02 07:01
KSwordOfHaste

総合スコア18394

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

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

LouiS0616

2017/11/02 07:01

コンパイルエラーになりえる点は見逃していました。ありがとうございます。
KSwordOfHaste

2017/11/02 07:01

自分もよくやるのです・・・
guest

0

ベストアンサー

absを使わないとすればどーしたらいいですか?

なぜ使ってはいけないのかわかりませんが。
要素が負の数であったら-1をかけるようにすればよいです。

min.maxの初期値は0でいいのか?

どうせ配列の最初の要素を直後に代入するので、初期値はなんでもいいです。
プログラム冒頭で初期化する必要もないです。
追記: 上記一文はちょっと不正確な記述です。KSwordOfHasteさんの回答をご覧ください。

適切な変数名はなにか?

aとかbとかの命名が微妙ですよね。
ご提示の計算を行う静的メソッドを定義すれば、これらを隠蔽できます。


質問をする際は、言語を明確にし、適切なタグをつけてください。
この回答はJavaを前提に書いていますが、あっているのでしょうか。

また、teratailにはコードを見やすく表示する機能があります。
編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
そうすると、次のように見やすく表示されます。

Java

1class Main { 2 public static void main(String[] args) { 3 System.out.println("Hello world!"); 4 } 5}

投稿2017/11/02 06:09

編集2017/11/02 07:02
LouiS0616

総合スコア35660

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

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

退会済みユーザー

退会済みユーザー

2017/11/08 08:46

ありがとうございます。 これから気をつけます。 あともう一つ質問なんですが静的メソッドとはなんですか? 教えてください。 何度も質問すみません。
LouiS0616

2017/11/08 08:57

インスタンスの状態に依存しないメソッドのことです。 例えばjava.lang.Math#powなどのように、処理に必要な演算が引数だけで完結し、同じ引数に対して同じ戻り値を返せばいいようなメソッドは静的に出来ます。 Javaでは、staticキーワードをメソッドに与えることによって実現できます。 (一番よく見る静的メソッドは間違いなくmainです。それを真似すればよいです。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問