Софтуерно Инженерство
Loading...
+ Нов въпрос
SharWinchester avatar SharWinchester 4 Точки

04.Orders от Речници

Здравейте! Написах кода и всичко ми изглежда добре на пръв поглед, но ми дава Index out of range на 20ти ред, а не разбирам защо. Може би е нещо очевидно, което аз не виждам. https://pastebin.com/PFgvLDbq

Тагове:
0
Fundamentals Module
TeodorStefanovPld avatar TeodorStefanovPld 1225 Точки

дай и условието на задачата, така като го гледам кода да ти изгърми Price или quantity нещо при подаването не четеш както трябва, Но без условието повече не мога да кажа трудно.

0
e.manolov avatar e.manolov 78 Точки

Звучи ми като да стартираш друг проект :)

0
KeepCoding avatar KeepCoding 411 Точки

Постъпково дебъгване ще разясни нещата. Index out of range ми звучи като че ли се опитваш да достъпиш индекс от масив, който не съществува. Като дебъгваш виж дали стойностите в "string[] tokens" са тези, които очакваш.

0
SharWinchester avatar SharWinchester 4 Точки

При дебъгване стойностите в string[] tokens са правилни. Дори променливата price има правилната стойност, но въпреки това излиза out of range. Което за мен няма логика, никога не ми се е случвало такова нещо. Иначе стартирам правилния проект и ето ви условието на задачата: 

Write a program, which keeps information about products and their prices. Each product has a name, a price and its quantity. If the product doesn’t exist yet, add it with its starting quantity.

If you receive a product, which already exists increase its quantity by the input quantity and if its price is different, replace the price as well.

You will receive products’ names, prices and quantities on new lines. Until you receive the command "buy", keep adding items. When you do receive the command "buy", print the items with their names and total price of all the products with that name.

Input

  • Until you receive "buy", the products come in the format: "{name} {price} {quantity}".
  • The product data is always delimited by a single space.

Output

  • Print information about each product, following the format:
    "{productName} -> {totalPrice}"
  • Format the average grade to the 2nd decimal place.

 

0
emo.999 avatar emo.999 398 Точки

Здравей,

Парсваш преди да провериш дали инпута е buy и когато ти се подаде buy нямаш tokens[1] затова получаваш IndexOutOfRange.

Накрая беше заменил тирето във стрелката със знак =.

Ето решението ти оправено : https://pastebin.com/Tbk9uk2d

Гледах да го променям минимално, иначе може и да се оптимизира малко повече.

Надявам се да съм бил полезен. laugh

0
14/11/2018 09:23:13
SharWinchester avatar SharWinchester 4 Точки

Благодаря ти много, не се бях досетил! :)

1
Cecotm777 avatar Cecotm777 1 Точки

https://pastebin.com/3g7q3Qjq

0
DHvarchilkova avatar DHvarchilkova 1 Точки

Ето и още едно решение, но с класове

using System;
using System.Collections.Generic;
using System.Linq;

namespace Orders
{
    class Item
    {
        public double price;
        public double quantity;

        public Item(double p, double q)
        {
            price = p;
            quantity = q;
        }

        public double GetTotalPrice()
        {
            return price * quantity;
        }
        public void UpdateQuantityAndPrice(double price, double newQuantity)
        {
            quantity +=newQuantity;
            this.price = price;

        }


    }

    class Program
    {
        static void Main(string[] args)
        {
            var dict = new Dictionary<String, Item>();
            string input = string.Empty;
            
            while ((input = Console.ReadLine()) != "buy")
            {
                
                string[] inputStrings = input.Split(" ");

                if (!dict.ContainsKey(inputStrings[0]))
                {
                    Item item = new Item(double.Parse(inputStrings[1]), double.Parse(inputStrings[2]));
                    dict.Add(inputStrings[0], item);
                }
                else
                {
                    Item curItem = dict[inputStrings[0]];
                    curItem.UpdateQuantityAndPrice(double.Parse(inputStrings[1]), double.Parse(inputStrings[2]));
                }

            }

            foreach (var kvp in dict)
            {
                Console.WriteLine($"{kvp.Key} -> {kvp.Value.GetTotalPrice():F2}");
            }
            {

            }
        }
    }
}
 

0
yordan_dimitrov avatar yordan_dimitrov 1 Точки

здравей, малко преработен код 100/100

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

public class Program

{

    public static void Main()

    {

        var priceAndProduct = new Dictionary<string, double>();
        var countAndProduct = new Dictionary<string, int>();
        string input ;
        while ((input = Console.ReadLine()) != "buy")
        {
            string[] tokens = input.Split(' ').ToArray();
            string product = tokens[0];
            double price = double.Parse(tokens[1]);
            int quantity = int.Parse(tokens[2]);

            
            if (!countAndProduct.ContainsKey(product))
            {
                countAndProduct[product] = 0;
            }
            countAndProduct[product] += quantity;
            if (!priceAndProduct.ContainsKey(product))
            {
                priceAndProduct[product] = 0;
            }
            priceAndProduct[product] = price;
        }

        foreach (var kvp in countAndProduct)
        {
            string product = kvp.Key;
            int quantity = kvp.Value;
            double price = priceAndProduct[product];

            double result = quantity * price;
            Console.WriteLine($"{product} -> {result:f2}");
        }
    }
}

 

 

 

0