2013-11-25 123 views
2

我是一名初學者,我知道我正在犯新人的錯誤。我在我的JApplet的actionePerformed部分中有以下代碼。 for循環中的if語句應該搜索數組s []中的匹配名稱(t6是一個JtextArea),並將int m的值賦給int n,這樣我可以退出s [i]的所有信息。問題是我的n總是0,不管是什麼!我在做什麼?搜索循環不能正常工作

if (e.getSource() == b7) { 
    for(int m=0; m>i ; m++){ 
     if(t6.getText().equals(s[m].getName())){ 
      n=m; 
     } 
    } 
    String text1 = ""; 
    text1 += s[n].getName().toString() + ", average=" + s[n].getAvgMark() 
       + ", " + s[n].getProgramName().toString() + ", " 
       + s[n].getDegree()+ ", " + s[n].getUni1() +"-"+ s[n].getStatus0() 
       +", "+ s[n].getUni2()+"-"+ s[n].getStatus1() + ", " 
       + s[n].getUni3()+"-"+ s[n].getStatus2()+"\n"; 

    ta2.setText(text1); 
} 
+0

「我」持有的價值是多少? 'for(int m = 0; m> i; m ++){' –

+0

int i從0開始。每次將對象添加到s [],i ++時。所以幾乎我= s []。長度 – AshkanMil

回答

1

我敢打賭,你的問題是,您在開始int n = 0

看看你的循環

for(int m=0; m>i ; m++){ 

釷唯一途徑,這將不會是一個無限循環,如果i爲0或更少。我認爲這是對你沒有一個無限循環。因爲你沒有得到ArrayIndexOutOfBoundsException我會假設i是0而不是負值。因此

對(INT米= 0; M> I;米++){

指出繼續循環如果m大於0,它永遠不會是。

所以你的數組索引只會是0一次。它永遠不會循環。

即使你i++,m永遠不會大於i,因爲它們均勻開始,並將均勻增加。

只是一種預感

也許你想這個

for(int m = 0; m < s.length ; m++){ 

// iterates [size of the s array] times 
+0

您先生是100%正確的。我打算把<那裏,但可能錯誤輸入。非常感謝你。我大概翻了20遍,沒有注意到這一點。* facepalm * – AshkanMil

0

您的代碼會更容易調試,如果你使用更具描述性的變量名,而你沒有鏈並連接在這麼多一個聲明。你可以稍微冗長;編寫最短或最隱蔽的代碼不是競爭!

我還建議你初始化變量,並準備失敗。

int matchingIndex = 0; // initialize that variable! 
int upperBound = myList.legnth; 
for(int m=0; m > upperBound; m++){ 
    String sourceText = searchSource.getText(); 
    String thisName = myList[m].getName(); 
    if(sourceText.equals(thisName)){ 
     matchingIndex = m; 
    } 
} 
if (matchingIndex < 1) { 
    outputElement.setText('No match'); // or some other way to display the error 
    return; 
} 

...你看到沒有,我改名爲晦澀nmatchingIndex,遮遮掩掩t6searchSource,可疑iupperBound(我確信這是它應該是什麼樣的myList長度) ,有問題的ta2變成outputElement,以及害羞的smyList。我還解開了通話和匹配,現在您可以閱讀該代碼。而且,你可以輸出不同的部分來調試它。認爲sourceText應該匹配thisName?輸出值並查看差異是什麼!

最後,我添加了一些邏輯來處理找不到匹配的明顯可能性。

+0

你是絕對正確的,但是這是我寫的第一個長碼。這只是代碼的一部分。我有更多的500 LOC。與許多JLabels和JTextareas等等,所以當時我正在創建我的面板時使用數字更方便。我希望有一天我能夠流暢地寫出像你的例子那樣的代碼。謝謝。 – AshkanMil