[解決済み] 配列の最小値と最大値を求める Integer.MAX_VALUE と Integer.MIN_VALUE について説明します。
質問
を理解していないようです。
Integer.MAX_VALUE
と
Integer.MIN_VALUE
は、配列の最小値と最大値を求めるのに役立ちます。
最小値と最大値を求めるときのこの方法(以下の疑似コード)の動作は理解できました。
max = A[0], min = A[0]
for each i in A
if A[i] > max then max = A[i]
if A[i] < min then min = A[i]
しかし、このメソッドに関しては、目的がよくわからないのですが
Integer.MAX_VALUE
と
Integer.MIN_VALUE
:
import java.util.Scanner;
class MyClass {
public static void main(String[] args) {
int[] numbers; // declaring the data type of numbers
numbers = new int[3]; //assigning the number of values numbers will contain
int smallest = Integer.MAX_VALUE, largest = Integer.MIN_VALUE;
Scanner input = new Scanner(System.in);
System.out.println("Please enter 3 numbers");
for(int counter = 0; counter<numbers.length;counter++) {
numbers[counter] = input.nextInt();
}
for(int i = 0; i<numbers.length; i++) {
if(numbers[i]<smallest)
smallest = numbers[i];
else if(numbers[i]>largest)
largest = numbers[i];
}
System.out.println("Largest is "+largest);
System.out.println("Smallest is "+smallest);
}
}
- System.out.println(Integer.MAX_VALUE) は 2147483647 を出力します。
- System.out.println(Integer.MIN_VALUE) で -2147483648 になります。
では、Integer.MIN_VALUE と Integer.MIN_VALUE は比較の中でどのような役割を果たすのでしょうか?
どのように解決するのか?
<ブロッククオートが、この方法に関しては、Integer.MAX_VALUEとInteger.MIN_VALUEの目的がよくわかりません。
で始めることで
smallest
に設定します。
Integer.MAX_VALUE
と
largest
に設定します。
Integer.MIN_VALUE
という特殊なケースについて、後で心配する必要はありません。
smallest
と
largest
はまだ値を持っていません。もし私が目を通しているデータに
10
を最初の値として使用する場合
numbers[i]<smallest
は真になります(なぜなら
10
は
<
Integer.MAX_VALUE
を更新します)。
smallest
になります。
10
. 同様に
numbers[i]>largest
は、次のようになります。
true
なぜなら
10
は
>
Integer.MIN_VALUE
を更新し
largest
. といった具合に。
もちろん、これを行う際には、対象となるデータに少なくとも1つの値があることを確認する必要があります。そうでないと、apocryphalな数字が
smallest
と
largest
.
備考 The point Onome Sotu がコメントで述べています。
...配列の最初の項目が他の項目より大きい場合、else-if 文のため、最大の項目は常に Integer.MIN_VALUE になります。
その通りです。この問題を示すより簡単な例です( ライブコピー ):
public class Example
{
public static void main(String[] args) throws Exception {
int[] values = {5, 1, 2};
int smallest = Integer.MAX_VALUE;
int largest = Integer.MIN_VALUE;
for (int value : values) {
if (value < smallest) {
smallest = value;
} else if (value > largest) {
largest = value;
}
}
System.out.println(smallest + ", " + largest); // 1, 2 -- WRONG
}
}
修正するには、どちらか。
-
を使用しないでください。
else
または -
で開始します。
smallest
とlargest
を最初の要素と等しくし、残りの要素をループさせます。else if
.
その2つ目の例です( ライブコピー ):
public class Example
{
public static void main(String[] args) throws Exception {
int[] values = {5, 1, 2};
int smallest = values[0];
int largest = values[0];
for (int n = 1; n < values.length; ++n) {
int value = values[n];
if (value < smallest) {
smallest = value;
} else if (value > largest) {
largest = value;
}
}
System.out.println(smallest + ", " + largest); // 1, 5
}
}
関連
-
[解決済み] 未処理の例外タイプIOException」が表示されるのですが?
-
[解決済み] java.lang.ClassCastException: java.lang.Long を java.lang.Integer にキャストできない(java 1.6
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] 配列を値でコピーする
-
[解決済み] JavaScriptのオブジェクトの配列からidでオブジェクトを検索する
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] 多次元配列の値によるソート方法
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JVMフラグCMSClassUnloadingEnabledは、実際に何をするのですか?
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] Application startメソッドで例外が発生する。JavaFx 11
-
[解決済み] java.util.concurrent.ExecutionException 例外をどのように処理しますか?
-
[解決済み] javacが「using unchecked or unsafe operations」という警告を出す原因は何ですか?
-
[解決済み] Androidのコールバックとは何ですか?重複
-
[解決済み] 要素 'beans' の宣言が見つかりません。
-
[解決済み] javax.mail.MessagingException: SMTPホストに接続できませんでしたか?
-
[解決済み] java.util.MissingFormatArgumentException: 形式指定子 '%s' がありません。
-
[解決済み] Apache Camelのログに簡単なテキストを記録する