2010-05-22 57 views
2

我是一名新手計算機科學高中學生,我有一小段代碼的麻煩。基本上,我的代碼應該在整數數組中執行基本的CLI搜索。然而,會發生什麼似乎是一個無限循環(BlueJ,我使用的編譯器卡住了,我必須重置機器)。我已經設置了斷點,但我仍然不太明白這個問題......(我甚至不瞭解它告訴我的大部分內容)非常簡單的數字搜索代碼給我無限循環

這裏是違規代碼(假設「ArrayUtil」有效,因爲它):

import java.util.Scanner; 
public class intSearch 
{ 
    public static void main(String[] args) 
    { 
     search(); 
    } 

    public static void search() 
    { 
     int[] randomArray = ArrayUtil.randomIntArray(20, 100); 
     Scanner searchInput = new Scanner(System.in); 
     int searchInt = searchInput.nextInt(); 
     if (findNumber(randomArray, searchInt) == -1) 
     { 
      System.out.println("Error"); 
     }else System.out.println("Searched Number: " + findNumber(randomArray, searchInt)); 
    } 

    private static int findNumber(int[] searchedArray, int searchTerm) 
    { 
     for (int i = 0; searchedArray[i] == searchTerm && i < searchedArray.length; i++) 
     { 
      return i; 
     } 
     return -1; 
    } 
} 

這一直在竊聽我一段時間了...請幫助我確定問題!

+1

你是指searchArray [i]!= searchTerm而不是searArray [i] == searchTerm?我認爲這樣,findNumber並不真正推進。 – abenthy 2010-05-22 13:23:33

回答

1

我不知道什麼是類ArrayUtil(我不能導入使用我的Netbeans)。當我嘗試用行int [] randomArray = {1,2,3,5,7,10,1,5}更改該行時;它完美的作品。

而你應該改變循環條件。我不會告訴你爲什麼,但試試我的陣列,你會很快看到bug。看到它後,你可以修復它:)

+0

我曾嘗試過這樣一個正常的陣列(我甚至試過你的情況以防萬一),因爲我確實懷疑ArrayUtil有錯。但是,同樣的問題。開始認爲我的BlueJ有點搞砸了...... – Joshua 2010-05-24 00:04:50

+0

好的,在這種情況下,用netbeans http://netbeans.org/嘗試。有時,blueJ有問題,它從來沒有用於商業項目 – vodkhang 2010-05-24 00:06:48

+0

好吧,會嘗試不同的編譯器。感謝您的建議,對我來說看起來很奇怪,因爲我的代碼看起來非常好(除了現在用if語句修復的循環)。 – Joshua 2010-05-24 00:10:56

3

我不知道無限循環,但下面的代碼不會按照您的意圖工作。該i++永遠無法達到如此i將始終具有值爲0

for (int i = 0; searchedArray[i] == searchTerm && i < searchedArray.length; i++) 
{ 
    return i; 
} 
return -1; 

你大概的意思是這樣的:

for (int i = 0; i < searchedArray.length; i++) 
{ 
    if (searchedArray[i] == searchTerm) 
    { 
     return i; 
    } 
} 
return -1; 
+0

我的風格試圖向學生展示bug,然後讓他們嘗試弄清楚並自行修復而不是修復它們。無論如何,這取決於你:) – vodkhang 2010-05-22 13:31:43

+0

是的,你怎麼回答這個問題,他有一個風格的事情在這裏繼續!只是在開玩笑@vodkhang,我很欣賞你的風格。 – RandyMorris 2010-05-22 13:56:05

+0

對公然無視風格的+1。 = p – 2010-05-22 18:39:00

0

這裏有4個基本問題。
1.在i < searchedArray.length之前加上searchedArray[i] == searchTerm可能會導致超出範圍的異常。您必須始終防止這種類型的代碼。
2.您的意圖似乎與您的代碼相反。您的方法名稱意味着找到一個搜索詞。但是,您的代碼意味着您要繼續循環掃描,直到找不到搜索字詞,儘管您的循環也不會這樣做。把「(; this;){that}」想成「當這樣做的時候」。
3.在「搜索」開始處放置一個斷點。然後,使用一個小數組,逐行執行代碼,然後觀察變量。他們不撒謊。他們會告訴你到底發生了什麼事。
4.請使用標準的IDE和編譯器,例如Eclipse和Sun的JDK 6或7.帶JDK 7的Eclipse是一種嚴肅的組合,不會像上面描述的那樣出現奇怪的「無限循環」。