2011-04-05 28 views
0

基本上比較輸入的字符串,並嘗試從數組中獲取該位置。比較字符串,其中一個來自輸入值以外的數組

如果我初始化位置爲0,則返回數組的位置爲零,如果我初始化爲1,那麼它給了我插槽1中的項目,所以它跳過比較語句。

我也嘗試過使用(custStatus == cardStatus[i])

public static int discount(string []cardStatus, int []pDiscount, string custStatus) 
{ 
    int position= 0; 
    int discount; 
    for(int i = 0; i < 2; i++) 
    { 
     if (string.Equals(custStatus, cardStatus[i])) 
      position = i; 
    } 
    discount = pDiscount[position]; 
    return discount; 
} 
+0

您是否嘗試過使用這種方法調試器?如果你在'int position = 0;'的頂部放置了一個斷點,那麼你可以確認'custStatus'按預期發生。然後繼續執行for語句,看看它在嘗試進行比較時會發生什麼。 – 2011-04-05 02:05:38

+0

你是否在修剪你的輸入?如果你的輸入包含換行符(或其他空格),即使它看起來像字符串匹配,你的字符串比較也會失敗。 – 2011-04-05 21:41:07

回答

0

這看起來不錯,儘管這是較爲簡單:

for(int i = 0; i < cardStatus.Length; i++) 
{ 
    if (custStatus == cardStatus[i]) 
    { 
     position = i; 
     break; 
    } 
} 

由於您的問題似乎是這樣,所有cardStatus[i]比賽custStatus - 你檢查了輸入嗎?

還給你的代碼如果沒有匹配會發生什麼?目前您將返回pDiscount[0] - 這看起來不正確。

0
public static int discount(string []cardStatus, int []pDiscount, string custStatus) 
{ 
    for(int i = 0; i < Math.Min(cardStatus.Length, pDiscount.Length); i++) 
    { 
     if (string.Equals(custStatus, cardStatus[i])) 
     { 
      return pDiscount[i]; 
     } 
    } 

    return -1; 
} 

不要害怕直接從FOR-loop返回,從方法講是隻有一個返回點的老派。您可以獲得儘可能多的回報,因爲它可以幫助您保持代碼清潔且易於閱讀。

而且,或許會更好地使用下列表達式中的for循環,因爲它會從陣列的可能的不同長度的保護你:

for (int i = 0; i < Math.Min(cardStatus.Length, pDiscount.Length; i++) 
+0

我不同意這句話:「您可以獲得儘可能多的回報,因爲它可以幫助您保持代碼清潔易讀。」如果方法或屬性簡短,那麼我認爲可以有多個返回語句。如果比這更辛苦,我會有一個返回值變量,並在最後返回。 – Fellmeister 2011-04-05 02:25:36

+0

嘗試了你們發佈的代碼,...並且他們都去了-1的返回,就像它沒有比較,很奇怪?我查了一下,看看custStatus是否是正確的輸入,並且不會以任何方式混亂,但是確定 – John 2011-04-05 02:31:38

+0

2John:我已經更新了答案,以確保掃描所有數組。也許你有不同的字符串,也許它們在某些情況下是不同的(大寫字母,e.t.c),嘗試在Equals中設置第三個參數給OrdinalIgnoreCase。 – 2011-04-05 04:02:08

0

與您的代碼,有沒有辦法判斷position = 0手段custStatus在您的cardStatus陣列中找到,或者根本沒有匹配,並且正在使用默認值。我建議使用布爾值matchFound變量或設置position = -1並在最後添加一個額外的if語句。或者:

boolean matchFound = false; 
... 
if(matchFound) 
{ 
    discount = pDiscount[position]; 
} 

否則

int position = -1; 
... 
if(position >= 0) 
{ 
    discount = pDiscount[position]; 
} 
0

試試這個:

public static int discount(string[] cardStatus, int[] pDiscount, string custStatus) { 
    var position = Array.IndexOf(cardStatus, custStatus); 
    return (position == -1) ? -1 : pDiscount[position]; 
} 
+0

如果custStatus不在cardStatus中,將會出現異常。 – 2011-04-05 02:12:20

+0

已更新,以避免引發任何異常。 – 2011-04-05 02:25:09

相關問題