3

配列内の高い数値と低い数値を見つけようとしていますが、コードが正しく機能しない理由がわかりません。それは私に0と56の出力を与えています。なぜそれが0を与えるのか理解していますが、56はどこから来たのですか?

package test;

public class Test {

    public static void main(String[] args) {
        int[] numbs = { '2', '4', '2', '8', '4', '2', '5'};

        int count = 0;
        int low = 0;
        int high = 0;

        while(count < numbs.length)
        {
             if(numbs[count]< low) {
                low = numbs[count];
            }

            if(numbs[count]> high) {
                high = numbs[count];
            }

            count++;   
        }

        System.out.println(low); 
        System.out.println(high);           

    }
}
4

5 に答える 5

7

lowあなたは十分に低いところから始める必要があります。現在、ゼロから開始します。配列の最下位の要素を「キャッチ」するには低すぎます。

これに対処するには2つの方法があります。

  • Integer.MAX_VALUEおよびを使用して、および、またはInteger.MIN_VALUEを開始しますhighlow
  • 配列の最初の要素を使用してとの両方を開始highlow、次に2番目の要素から配列を処理します。

int low = Integer.MAX_VALUE;
int high = Integer.MIN_VALUE;

PS整数の代わりに文字を使用したため、奇妙な数字が印刷されます。

int[] numbs = { 2, 4, 2, 8, 4, 2, 5};
于 2012-11-25T02:01:49.527 に答える
2

また..おそらくASCII表現を出力しています...実際の整数を使用してください(charsの使用が意図的であったかどうかはわかりません)。

于 2012-11-25T02:04:04.603 に答える
0

lowとの両方highを配列の最初の位置の値に設定する必要があります。

int low = numbs[0];
int high = numbs[0];

最初の位置が実際に最小値である場合、それは決して交換されません。そうでない場合、それはより低い数と交換され、同じことが最大数にも起こります。

次のように宣言する必要があるintの配列が必要です。

int[] numbs = {2, 4, 2, 8, 4, 2, 5};

56ASCIIテーブルによる文字「8」の10進表現はであるため、最高値として取得しています56

于 2012-11-25T02:04:24.330 に答える
0

char配列のinitブロックでsの代わりにsを使用するintと、これはすぐにintsに変換されて配列に収まりint[]ますが、実際の値ではなく、ユニコード値を使用します。ここで、2=52および8=56です。

于 2012-11-25T02:09:12.590 に答える
0

'8'charリテラルであり、ではありませんint。Java言語仕様では、次のように定義 charされています。

整数型は、byte、short、int、long [...]およびcharであり、その値はUTF-16コード単位を表す16ビットの符号なし整数です。

が期待されるchar場所でaを使用すると、は暗黙的にに変換されます。は数値型であるため、これはその数値、つまりUTF-16コードポイントを保持します。のutf-16コードポイントは56です。intcharintchar8

charを数値タイプとして扱うと便利です。たとえば、アルファベットのn番目の文字を次のように計算できます。

char nthLetter = (char) `A` + n;

または、数字の数値を次のように求めます

if ('0' <= digit && digit <= '9')
    return value = digit - '0';
else
    throw new IllegalArgumentException(digit);
于 2012-11-25T02:14:41.143 に答える