簡體   English   中英

如果我不使用 break 語句,為什么這個簡單的函數不會輸出任何東西?

[英]Why won`t this simple function output anything if I don`t use a break statement?

這里的功能是,用於查找數組中的最大數。如果我在 while 之后不放一個 break 語句,它就不會打印出任何東西。 我需要有人向我解釋這段代碼是如何工作的。 我當時在想的是,

1-我們進入第一個循環,然后進入第二個循環.. 2-我們在 while 循環中比較了第一個和第二個元素。 3-如果條件為真,int最大設置為大值.. 4-然后我們再次回到外部for循環。

這不是真的嗎? 在while語句發出一次之后,我們不是要回到外部for循環嗎? 如果我不放一個break,while條件為真,程序就不會退出循環,是這樣嗎?

我正在通過調用此函數並傳入一個整數數組來測試 main 中的代碼。 我之前忘了提這個。 對不起 。

謝謝你 。

public int returnMax(int[] nums) {
    int largest = 0;
    for (int i = 0; i < nums.length; i++) {
        for (int j = 1; j < nums.length; j++) {
            while (nums[j] > nums[i]) {
                largest = nums[j];
                break;
                
            }

        }
    }
    return largest;

}

如果nums[j]大於nums[i]它進入你的 while 循環。 在您的 while 循環中,您永遠不會更改除largest的任何變量。 除返回值外,從不使用最大。 這會導致無限循環,因為您的 while 表達式的下一次迭代仍然相同。

程序不能離開 while 語句,因為條件永遠不會改變並且始終為真(一旦為真)。 您應該將while替換為if

if (nums[j] > nums[i]) {
    largest = nums[j];
    System.out.println(largest);
}

您還評論了System.out.println(largest); ,所以它永遠不會被調用

當您的代碼第一次進入 while 循環時,j = 1 和 i = 0,這意味着 j 大於 i。 這些數字在這個循環內不會改變。 因此,循環永遠不會結束,代碼也不會繼續。

這個簡單的操作不需要 3 個循環。 試試下面的。

public static int returnMax(int[] nums) {
        int largest = nums[0];
        for (int i = 1; i < nums.length; i++) {
            if (largest < nums[i]) {
                largest = nums[i];
            }
        }
        return largest;
    }

親切的問候

暫無
暫無

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

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