04.Orders от Речници
Здравейте! Написах кода и всичко ми изглежда добре на пръв поглед, но ми дава Index out of range на 20ти ред, а не разбирам защо. Може би е нещо очевидно, което аз не виждам. https://pastebin.com/PFgvLDbq
Здравейте! Написах кода и всичко ми изглежда добре на пръв поглед, но ми дава Index out of range на 20ти ред, а не разбирам защо. Може би е нещо очевидно, което аз не виждам. https://pastebin.com/PFgvLDbq
дай и условието на задачата, така като го гледам кода да ти изгърми Price или quantity нещо при подаването не четеш както трябва, Но без условието повече не мога да кажа трудно.
Звучи ми като да стартираш друг проект :)
Постъпково дебъгване ще разясни нещата. Index out of range ми звучи като че ли се опитваш да достъпиш индекс от масив, който не съществува. Като дебъгваш виж дали стойностите в "string[] tokens" са тези, които очакваш.
При дебъгване стойностите в string[] tokens са правилни. Дори променливата price има правилната стойност, но въпреки това излиза out of range. Което за мен няма логика, никога не ми се е случвало такова нещо. Иначе стартирам правилния проект и ето ви условието на задачата:
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
Output
Здравей,
Парсваш преди да провериш дали инпута е buy и когато ти се подаде buy нямаш tokens[1] затова получаваш IndexOutOfRange.
Накрая беше заменил тирето във стрелката със знак =.
Ето решението ти оправено : https://pastebin.com/Tbk9uk2d
Гледах да го променям минимално, иначе може и да се оптимизира малко повече.
Надявам се да съм бил полезен.
Благодаря ти много, не се бях досетил! :)
https://pastebin.com/3g7q3Qjq
Ето и още едно решение, но с класове
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}");
}
{
}
}
}
}
здравей, малко преработен код 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}");
}
}
}