C# 为什么这个代码不打印任何东西?
我正在尝试创建一个工作程序,您必须输入城镇、产品和数量,并输出总价 例如,Town1>Milk>2应该导致C# 为什么这个代码不打印任何东西?,c#,debugging,C#,Debugging,我正在尝试创建一个工作程序,您必须输入城镇、产品和数量,并输出总价 例如,Town1>Milk>2应该导致2。但由于某种原因,没有产出。有人能帮我看看错误吗 代码如下: Console.Write("Enter product: "); var product = Console.ReadLine().ToLower(); Console.Write("Enter town: "); var town = Console.ReadLine().ToLower(); Console.Write("
2
。但由于某种原因,没有产出。有人能帮我看看错误吗
代码如下:
Console.Write("Enter product: ");
var product = Console.ReadLine().ToLower();
Console.Write("Enter town: ");
var town = Console.ReadLine().ToLower();
Console.Write("Enter quantity: ");
var quantity = double.Parse(Console.ReadLine());
if (town == "Town1")
{
if (product == "Milk")
Console.WriteLine(1.50 * quantity);
if (product == "Water")
Console.WriteLine(0.80 * quantity);
if (product == "Whiskey")
Console.WriteLine(4.20 * quantity);
if (product == "Peanuts")
Console.WriteLine(0.90 * quantity);
if (product == "Chocolate")
Console.WriteLine(2.60 * quantity);
}
if (town == "Town2")
{
if (product == "Milk")
Console.WriteLine(1.40 * quantity);
if (product == "Water")
Console.WriteLine(0.70 * quantity);
if (product == "Whiskey")
Console.WriteLine(3.90 * quantity);
if (product == "Peanuts")
Console.WriteLine(0.70 * quantity);
if (product == "Chocolate")
Console.WriteLine(1.50 * quantity);
}
if (town == "Town3")
{
if (product == "Milk")
Console.WriteLine(1.90 * quantity);
if (product == "Water")
Console.WriteLine(1.50 * quantity);
if (product == "Whiskey")
Console.WriteLine(5.10 * quantity);
if (product == "Peanuts")
Console.WriteLine(1.35 * quantity);
if (product == "Chocolate")
Console.WriteLine(3.10 * quantity);
}
}}}
您正在设置
town=value.ToLower()
和product=value.ToLower()
,这会使所有字符都小写,请更改以下行:
var town = Console.ReadLine().ToLower();
var product = Console.ReadLine().ToLower();
为此:
var town = Console.ReadLine();
var product = Console.ReadLine();
或者更改if语句条件以使用小写值作为比较
if (town == "town1")
{
对于加分,考虑使用<代码>字典< /> >,这也允许您指定不区分大小写的比较。
var townProductPrices = new Dictionary<string, Dictionary<string, double>>(StringComparer.CurrentCultureIgnoreCase) {
["Town1"] = new Dictionary<string, double>(StringComparer.CurrentCultureIgnoreCase) {
["Milk"] = 1.50d,
["Water"] = 0.80d,
["Whiskey"] = 4.20d,
["Peanuts"] = 0.90d,
["Chocolate"] = 2.60d,
},
["Town2"] = new Dictionary<string, double>(StringComparer.CurrentCultureIgnoreCase) {
["Milk"] = 1.40d,
["Water"] = 0.70d,
["Whiskey"] = 3.90d,
["Peanuts"] = 0.70d,
["Chocolate"] = 1.50d,
},
//...
};
Console.Write("Enter product: ");
var product = Console.ReadLine().Trim();
Console.Write("Enter town: ");
var town = Console.ReadLine().Trim();
Console.Write("Enter quantity: ");
var quantity = double.Parse(Console.ReadLine().Trim());
var productPrices = townProductPrices[town];
var price = productPrices[product];
var total = price * quantity;
Console.WriteLine(total.ToString("c"));
var townProductPrices=新字典(StringComparer.CurrentCultureInoRecase){
[“Town1”]=新字典(StringComparer.CurrentCultureInogoreCase){
[“牛奶”]=1.50d,
[“水”]=0.80d,
[“威士忌”]=4.20d,
[“花生”]=0.90d,
[“巧克力”]=2.60d,
},
[“Town2”]=新字典(StringComparer.CurrentCultureInoRecase){
[“牛奶”]=1.40d,
[“水”]=0.70d,
[“威士忌”]=3.90d,
[“花生”]=0.70d,
[“巧克力”]=1.50d,
},
//...
};
控制台。写入(“输入产品:”;
var product=Console.ReadLine().Trim();
控制台。写入(“进入城镇:”;
var town=Console.ReadLine().Trim();
控制台。写入(“输入数量:”;
var quantity=double.Parse(Console.ReadLine().Trim());
var productPrices=城镇产品价格[城镇];
var价格=产品价格[产品];
var总额=价格*数量;
控制台写入线(ToString(“c”));
您不需要这么多匹配项。如果有任何问题,请尝试以下方法:
public class Program
{
private static void Main(string[] args)
{
Console.Write("Enter product: ");
var product = Console.ReadLine().ToLower();
Console.Write("Enter town: ");
var town = Console.ReadLine().ToLower();
Console.Write("Enter quantity: ");
var quantity = double.Parse(Console.ReadLine());
var mapperData = new List<Mapper>()
{
new Mapper { TownName = "Town1", ProductInfo = "Milk", Quantity = 1.50 },
new Mapper { TownName = "Town1", ProductInfo = "Water", Quantity = 0.80 },
new Mapper { TownName = "Town1", ProductInfo = "Whiskey", Quantity = 4.20 },
new Mapper { TownName = "Town1", ProductInfo = "Peanuts", Quantity = 0.90 },
new Mapper { TownName = "Town1", ProductInfo = "Chocolate", Quantity = 2.60 },
new Mapper { TownName = "Town2", ProductInfo = "Milk", Quantity = 1.40 },
new Mapper { TownName = "Town2", ProductInfo = "Water", Quantity = 0.70 },
new Mapper { TownName = "Town2", ProductInfo = "Whiskey", Quantity = 3.90 },
new Mapper { TownName = "Town2", ProductInfo = "Peanuts", Quantity = 0.70 },
new Mapper { TownName = "Town2", ProductInfo = "Chocolate", Quantity = 1.50 },
new Mapper { TownName = "Town3", ProductInfo = "Milk", Quantity = 1.90 },
new Mapper { TownName = "Town3", ProductInfo = "Water", Quantity = 1.50 },
new Mapper { TownName = "Town3", ProductInfo = "Whiskey", Quantity = 5.10 },
new Mapper { TownName = "Town3", ProductInfo = "Peanuts", Quantity = 1.35 },
new Mapper { TownName = "Town3", ProductInfo = "Chocolate", Quantity = 3.10 },
};
var matchingQuantity = mapperData.FirstOrDefault(i => i.TownName.ToString().ToLower() == town.ToLower().Trim()
&& i.ProductInfo.ToString().ToLower() == product.ToLower().Trim()).Quantity;
Console.WriteLine(matchingQuantity * quantity);
}
}
public class Mapper
{
public string TownName { get; set; }
public string ProductInfo { get; set; }
public double Quantity { get; set; }
}
公共类程序
{
私有静态void Main(字符串[]args)
{
控制台。写入(“输入产品:”;
var product=Console.ReadLine().ToLower();
控制台。写入(“进入城镇:”;
var town=Console.ReadLine().ToLower();
控制台。写入(“输入数量:”;
var quantity=double.Parse(Console.ReadLine());
var mapperData=新列表()
{
新映射器{TownName=“Town1”,ProductInfo=“Milk”,数量=1.50},
新地图绘制者{TownName=“Town1”,ProductInfo=“Water”,数量=0.80},
新地图绘制者{TownName=“Town1”,ProductInfo=“威士忌”,数量=4.20},
新映射程序{TownName=“Town1”,ProductInfo=“Peanuts”,数量=0.90},
新映射程序{TownName=“Town1”,ProductInfo=“Chocolate”,数量=2.60},
新映射器{TownName=“Town2”,ProductInfo=“Milk”,数量=1.40},
新地图绘制者{TownName=“Town2”,ProductInfo=“Water”,数量=0.70},
新地图绘制者{TownName=“Town2”,ProductInfo=“威士忌”,数量=3.90},
新映射程序{TownName=“Town2”,ProductInfo=“Peanuts”,数量=0.70},
新映射器{TownName=“Town2”,ProductInfo=“Chocolate”,数量=1.50},
新映射程序{TownName=“Town3”,ProductInfo=“Milk”,数量=1.90},
新地图绘制者{TownName=“Town3”,ProductInfo=“Water”,数量=1.50},
新地图绘制者{TownName=“Town3”,ProductInfo=“威士忌”,数量=5.10},
新映射程序{TownName=“Town3”,ProductInfo=“Peanuts”,数量=1.35},
新映射程序{TownName=“Town3”,ProductInfo=“Chocolate”,数量=3.10},
};
var matchingQuantity=mapperData.FirstOrDefault(i=>i.TownName.ToString().ToLower()==town.ToLower().Trim())
&&i.ProductInfo.ToString().ToLower()==产品.ToLower().Trim()).数量;
控制台写入线(匹配数量*数量);
}
}
公共类映射器
{
公共字符串名称{get;set;}
公共字符串ProductInfo{get;set;}
公共双数量{get;set;}
}
此外,您甚至可以为town和product创建枚举并使用它们。感谢您的回复,但不幸的是,它仍然不起作用:(这是因为您的其他值被设置为较低()同样,您正在尝试将其与大写字符的值进行比较。对product和town执行相同的操作。谢谢!它工作正常!但是映射器,{get;set;}是什么呢Trim是什么意思?Mapper是一个有三个值的类。对于getter和setter,请在线阅读如何在c#中使用它们。Trim用于c#中的字符串以删除空空格。这并不能回答OPs问题,也不是建议它们的最佳实现感谢您的帮助!Dictionary、ToString和StringComparer是什么?CurrentCultureIgnoreCase mean?
字典
是一个使用泛型类型的字典
类。请参阅。ToString(“c”)
使用货币格式将双精度/十进制值转换为字符串。请参阅。StringComparer.CurrentCultureIgnoreCase
指定字典在检索值时应使用当前用户/系统区域性并忽略大小写。对于新程序员来说,泛型类型可能有点高级,但此解决方案很好。I我不知道字典过载,谢谢!哦,你可能可以删除用户输入上的tolowers,并选择用trims替换它们?