比较字符串,一个来自数组,另一个来自输入值

本文关键字:数组 输入 另一个 字符串 比较 一个 | 更新日期: 2023-09-27 17:49:01

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

如果我将位置初始化为0,那么它将返回数组的位置0,如果我将其初始化为1,那么它会给我插槽1中的项,因此它将跳过compare语句。

我还尝试过使用(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;
}

比较字符串,一个来自数组,另一个来自输入值

使用您的代码,无法判断position = 0是否意味着在cardStatus数组中找到了custStatus,或者是否根本没有匹配,并且正在使用默认值。我建议使用布尔matchFound变量,或者设置position = -1并在末尾添加一个额外的if语句。任一:

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

或者

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

尝试一下:

public static int discount(string[] cardStatus, int[] pDiscount, string custStatus) {
  var position = Array.IndexOf(cardStatus, custStatus);
  return (position == -1) ? -1 : pDiscount[position];
}
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循环中使用以下表达式会更好,因为它可以保护您免受可能不同长度的数组的影响:

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

这看起来不错,尽管这更简单:

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

考虑到您的问题,似乎所有cardStatus[i]都与custStatus匹配——您检查了输入吗?

另外,给定您的代码,如果没有匹配,会发生什么?目前您会返回pDiscount[0]——这似乎不正确。