比较字符串,一个来自输入值的其他数组

时间:2011-04-05 01:58:10

标签: c# string

基本上比较输入的字符串,并尝试从数组中获取该位置。

如果我将position初始化为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;
}

4 个答案:

答案 0 :(得分:0)

这看起来不错,即使这有点简单:

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

鉴于您的问题,似乎所有cardStatus[i]匹配custStatus - 您是否检查了输入?

还给出了代码,如果没有匹配会发生什么?目前您将返回pDiscount[0] - 这似乎不正确。

答案 1 :(得分: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循环返回,从教学方法只有一个返回点的老派。您可以获得尽可能多的退货,因为它可以帮助您保持代码清洁和易于阅读。

也许最好在for-loop中使用以下表达式,因为它可以保护你不受可能不同长度的数组的影响:

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

答案 2 :(得分: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];
}

答案 3 :(得分:0)

尝试一下:

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