簡體   English   中英

如何獲得數組中最大的數?

[英]How to get the largest number in an array?

我試圖在 10 個數字的數組中找到最大的數字。 這是我的代碼:

public static void getNumber() {
        int NumbersArray[] = new int[11];
        int num1;
        int num2;
        int largestNumber = 0;
        Scanner scanner = new Scanner(System.in);
        for(int i=1; i<11; i++){
            System.out.println("Enter number " + i );
            int no1 = scanner.nextInt();
            NumbersArray[i] = no1;

        }
        scanner.close();

        for(int i=1; i<11; i++)
        {       
            System.out.println(NumbersArray[i]);
            num1 = NumbersArray[i];
            for(int j=10; j>0; j--)
            {
                num2 = NumbersArray[j];
                if(num1>num2){
                    largestNumber = num1;
                }
            }
        }
        System.out.println("the largest number is " + largestNumber);
    }

我在這里找到了一個真正簡單的解決方案。

但我發布這個的原因是為了找出我犯了什么錯誤。 第一部分從用戶那里得到 10 個數字,第二部分是我找到最大數字的代碼。

根據 Pshemo 的建議,在用戶輸入時記錄最大的 int。 這將您的方法的大小減少了一半,並使其更簡單和更具可讀性。

使用基於 0 的索引進行編程。 所以使用int NumbersArray[] = new int[10]而不是int NumbersArray[] = new int[11] 當您聲明數組的大小時,只需輸入所需的大小,您就不必擔心 0 索引或任何事情。 對於您的 for 循環,從int i=0並在i<10結束。

public static void getNumber(){
    int NumbersArray[] = new int[10];
    int largestNumber = 0;
    Scanner scanner = new Scanner(System.in);
    for(int i=0; i<10; i++){
        System.out.println("Enter number " + i );
        int no1 = scanner.nextInt();
        NumbersArray[i] = no1;
        if(no1 > largestNumber)
            largestNumber = no1;

    }
    scanner.close();
    System.out.println("The largest number is: " + largestNumber);
}

問題是您要遍歷列表兩次(以嵌套方式)。 假設您有以下數字: [5, 7, 3, 4] 當您第一次通過內部循環時,您最終將數字與 5 進行比較。只有 7 更大,因此largestNumber將被設置為 7。然后您將再次進行,這次與 7 進行比較。沒有什么大於7,所以它會被單獨留下。 接下來,您將與 3 進行比較。最后一次比較是 3 與 4,由於 4 較大,因此您最終將largestNumber設置為 4,這是不正確的。

這些線路:

 for(int i=1; i<11; i++)
    {       
        System.out.println(NumbersArray[i]);
        num1 = NumbersArray[i];
        for(int j=10; j>0; j--)
        {
            num2 = NumbersArray[j];
            if(num1>num2){
                largestNumber = num1;
            }
        }
    }

不要在數組中搜索最大的數字,而只是在NumbersArray搜索任何大於當前元素的值。 因此largestNumber不是陣列中的數量最多,但在過去數NumbersArray比的最后一個元素較大NumbersArray ,除非的最后一個元素NumbersArray是最大的元件,在這種情況下, largestNumber將在最后一個值NumbersArray

一個可行的解決方案是:

int max = Integer.MIN_VALUE;
for(int i : NumbersArray)
    if(max < i)
        max = i;

盡管最有效的解決方案是在讀取輸入時直接跟蹤當前最大的輸入。

請記住,java-arrays 是基於 0 的 這意味着第一個元素位於NumbersArray[0] ,而不是NumbersArray[1] ,就像在您的代碼中一樣。

據我所知,您可以使用 Java Math max() 方法來獲得最大數。 即: dataType max(int number1, int number2), Math.max(number1, number2) 獲取數字 1 和 2 之間的最大值。

暫無
暫無

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

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