сравнение строк, одна из массива, другая из введенного значения - PullRequest
0 голосов
/ 05 апреля 2011

В основном сравниваем введенную строку и пытаемся получить эту позицию из массива.

Если я инициализирую позицию в 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 голосов
/ 05 апреля 2011

Попробуйте:

public static int discount(string[] cardStatus, int[] pDiscount, string custStatus) {
  var position = Array.IndexOf(cardStatus, custStatus);
  return (position == -1) ? -1 : pDiscount[position];
}
0 голосов
/ 05 апреля 2011
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++)
0 голосов
/ 05 апреля 2011

С вашим кодом невозможно определить, если 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 голосов
/ 05 апреля 2011

Это выглядит нормально, хотя это несколько проще:

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

Учитывая ваш вопрос, похоже, что все cardStatus[i] соответствуют custStatus - вы проверяли ввод?

Также с учетом вашего кода, что произойдет, если нет совпадения?В настоящее время вы бы вернули pDiscount[0] - это не правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...