2017-07-08 129 views
0

我試圖通過我的數組來查找最大值並打印值。但是,沒有任何內容正在打印到控制檯。你可以看看我的代碼,看看我做錯了什麼。查找數組的最大值

for (c = 0; c < n; c++) //loops through array until each index has had a value input by the user 
    array[c] = in.nextInt(); 

maxInt = array[0]; 
minInt = array[0]; 

for (c = 0; c < n; c++) { 
    if (array[c] > maxInt) { 
     maxInt = array[c]; 
    } 
    else { 
     break; 
    } 
} 
System.out.println("Max int is: " + maxInt); 
} 

編輯:

滿級:

import java.util.Scanner; 

public class MaxMinOfArray { 
public static void main(String[] args) { 
int c, n, search, array[]; 
int maxInt, minInt; 

Scanner in = new Scanner(System.in); 
System.out.println("Enter number of elements"); 
n = in.nextInt(); //asks user to specify array size 
array = new int[n]; //creates array of specified array size 

System.out.println("Enter " + n + " integers"); 

for (c = 0; c < n; c++) //loops through array until each index has had a value input by the user 
array[c] = in.nextInt(); 

maxInt = array[0]; 
minInt = array[0]; 

for (c = 1; c < n; c++) { 
if (array[c] > maxInt) { 
    maxInt = array[c]; 
} 
} 
System.out.println("Max int is: " + maxInt); 
} 
} 
+0

它爲我工作。你如何運行它 - 通過IDE,Linux外殼,Windows命令提示符,? – ajb

回答

3

刪除:

else { 
     break; 
    } 

而且從開始c=1

+0

我已經這樣做了,但仍然沒有打印。 – Spartan123

+0

您的掃描儀是否正確定義? –

+0

@ Spartan123這很奇怪,因爲它的工作原理檢查此:https://ideone.com/PqF8vW ... –

1

正如其他人所指出的,你不想做

else { 
    break; 
} 

這意味着,爲它找到一個數字,是不是比目前的最高大,它會立即停止循環。既然你從列表中的第一個項目開始,這個細節並不比它本身大,你立即就可以break

即使您將其更改爲從c = 1開始,此代碼可能以書面方式工作的唯一情況是,如果用戶按升序輸入數字。 (在這種情況下,像這樣進行線性搜索將毫無意義,因爲您可以從字面上找到數組中的最後一項,並知道它將是最大的項目)。

此外,您應該檢查array[c]是否小於for循環中的當前最小值;根本沒有理由在一個單獨的循環中做到這一點。

請記住,如果您要對未排序數組的最大值進行線性搜索,則必須通過總是遍歷整個數組以確保不會錯過更大的值。例如,如果你只搜索數組的一半,你怎麼知道你沒有搜索到的一半不包含最大值?

+0

嗨,它仍然沒有打印到課堂上,我編輯了OP來添加完整的課程代碼。請看一下。 – Spartan123

1

刪除你的這一部分代碼。

else { 
    break; 
} 

因爲當c==0在這段時間array[c] == maxInt。所以它轉到其他部分並打破您的for循環。

+0

嗨,它仍然沒有打印到課程中,我編輯了OP來添加完整的課程代碼。請看一下。 – Spartan123

0

你的第二個環比較爲array每個元素,如果它比maxInt更大,但maxInt剛剛被設置爲array的第一要素。這會在循環的第一次迭代中失敗,在else塊中執行break,結束循環。

取出else塊修復了這個:

for (c = 0; c < n; ++c) 
{ 
    if (array[c] > maxInt) 
     maxInt = array[c]; 
} 

或者:

for (c = 0; c < n; ++c) 
    maxInt = Math.max(maxInt, array[c]); 

至於沒有出現在控制檯消息,確保代碼已正確設置斷點和步進執行通過代碼(取決於你使用的IDE)。