比较字符串,一个来自数组,另一个来自输入值
本文关键字:数组 输入 另一个 字符串 比较 一个 | 更新日期: 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]
——这似乎不正确。