基本上比较输入的字符串,并尝试从数组中获取该位置。
如果我将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;
}
答案 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];
}