簡體   English   中英

Java - 在數組中查找高低數

[英]Java - Find High and Low Number in an Array

我試圖在數組中找到高低數,但我不確定為什么我的代碼不能正常工作。 它給了我 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);           

    }
}

你需要從足夠low開始; 目前,您從零開始 - 太低而無法“捕獲”數組的最低元素。

有兩種方法可以解決這個問題:

  • 使用Integer.MAX_VALUEInteger.MIN_VALUE啟動highlow ,或
  • 使用數組的初始元素開始highlow ,然后從第二個元素開始處理數組。

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

PS 你會發現打印出奇怪的數字,因為你使用了字符而不是整數:

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

另外..它可能正在打印ASCII表示...使用實際整數(我不確定您是否有意使用字符)。

您應該將lowhigh都設置為數組第一個位置的值。

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

如果第一個位置確實是最低值,它將永遠不會被交換,否則它將與較低的數字交換,最高數字也會發生同樣的情況。

你需要一個整數數組,你應該像這樣聲明:

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

您得到56作為最高值,因為根據 ASCII 表,字符 '8' 的十進制表示是56

您在數組 init 塊中使用char s 而不是int s,這會立即轉換為int s 以適應int[]數組,但不要使用其實際值,而是使用unicode值,其中: 2 = 52 和8 = 56。

'8'char文字,而不是int Java 語言規范定義char如下:

整數類型是 byte、short、int 和 long [...] 和 char,它們的值是表示 UTF-16 代碼單元的 16 位無符號整數。

如果在需要int地方使用char ,則該char將隱式轉換為int 由於char是數字類型,這將保留其數值,即其 UTF-16代碼點 的UTF-16代碼點8是56。

將 char 視為數字類型可能很有用。 例如,我們可以通過以下方式計算字母表的第 n 個字母

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

或通過查找數字的數值

if ('0' <= digit && digit <= '9')
    return value = digit - '0';
else
    throw new IllegalArgumentException(digit);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM