![](/img/trans.png)
[英]Will Java notice when a loop won't change anything, or should I use break statement?
[英]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.