Индекс не работает с параллельными массивами

Основная проблема, с которой я столкнулся, заключается в том, что переменная массива, которую я передаю в общедоступный метод в качестве параметра из другого класса, не распознает расположение индекса.

PricingApp.cs

class PricingApp
{
    static void Main(string[] args)
    {
        // Calls the Display title method
        DisplayTitle();
        // declared the following variables
        string productId;
        int unitQuantity;
        double unitPrice;
        double extendedPrice;
        string loopControl;

        // set loop control equal to "Y"
        loopControl = "Y";

        //Begining of while loop
        while (Convert.ToBoolean(loopControl = "Y"))
        {
            Console.Write("\n\t\tPlease enter the product ID <case sensitive>: ");
            productId = Console.ReadLine();

            Pricing product1 = new Pricing();
            product1.FindPrice(productId[i]);

        }
    }    

    static void DisplayTitle()
    {
        Console.WriteLine("\t\tProject 3 - Pricing Application - Jake Stuck");
        Console.WriteLine("\n\t\t____________________________________________________________");
    }

ниже приведен код для второго пользовательского класса Pricing.cs.

class Pricing
{
    // method for find price
    public static double FindPrice(string id)
    {
        double[] productPrice = { 179.99, 121.99, 46.99, 235.99, 18.99 };
        string[] productID = { "AX3", "SD2", "SD3", "FG5", "PY3" };

        // declared variable for unitPrice
        double unitPrice = -1;

        // Start of for loop
        for (int i = 0; i < productID.Length; i++)
        {
            // if product id matches id
            if (productID[i] == id)
            {
                // sets unit price and product price equal to eachother
                unitPrice = productPrice[i];
            }
        }
        // Return the unit price
        return unitPrice;
    }
}

Вам нужно научиться отлаживать свой код. Глубоко подумайте, что, по вашему мнению, делает productId[i] и что содержит productId, когда вы вызываете product1.FindPrice(productId[i]);.

Camilo Terevinto 21.04.2018 04:01

Попробуйте Pricing.FindPrice(productId). Поскольку это статический метод, вам не нужен экземпляр. Кроме того, я предполагаю, что вы должны передать productId, а не один символ, как productId[i].

CodingYoshi 21.04.2018 04:12

вау, спасибо, что сработало. Я смотрел на это около двух с половиной часов, спасибо !!

user9677230 21.04.2018 04:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
59
1

Ответы 1

Вы не определяете i в Main(), поэтому product1.FindPrice(productId[i]); не будет компилироваться. Но вы бы определили, что он не будет компилироваться, поскольку оператор [] в строке возвращает символ типа char по соответствующему индексу, например. "Hello"[1] оценивается как 'e'. И нет метода FindPrice() с единственным аргументом char. Итак, удалите [i].

Вы также можете захотеть выйти из цикла в FindPrice() после того, как совпадение будет найдено, если вы не ожидаете, что продукты будут содержать дубликаты, и по какой-то причине хотите получить последнее совпадение.

И два массива productPrice и productID тоже не такие уж и хорошие. Невозможно утверждать, что они всегда имеют одинаковую длину или соответствующие значения имеют один и тот же индекс. Но вы полагаетесь на это в своем цикле. Лучше использовать один массив типа, который может содержать оба значения для идентификатора и цены в некоторых свойствах. Вы можете определить свои собственные или, по крайней мере, использовать некоторые предопределенные, такие как Tuple<double, string>, для специальных разовых вещей.

Другие вопросы по теме