我正在尝试创建一个可以为人们收据的程序。控制台将询问商品名称,价格和数量;之后,它应该打印出数组(希望格式化)。但是这里的问题是我一直坚持试图弄清楚如何自然地破坏数组。因为我应该在用户输入0时结束循环,但是我找不到将其放入布尔语句的方法。
我已经检查了Microsoft文档,但无法找到针对此特定问题的解决方案。我也在这里检查,但无济于事。
public class InitArray
{
// create and output rectangular and jagged arrays
public static void Main(string[] args)
{
string[,] items = new string[100, 4];
do
{
for (int row = 0; row < items.GetLength(0); row++)
{
// loop through columns of current row
double price = 0;
double subtotal = 0;
Console.WriteLine("Item Name(enter 0 to stop): ");
items[row, 0] = Convert.ToString(Console.ReadLine());
Console.WriteLine("Item Price(enter 0 to stop): ");
items[row, 1] = Convert.ToString(Console.ReadLine());
Console.WriteLine("Quantity(enter 0 to stop): ");
items[row, 2] = Convert.ToString(Console.ReadLine());
items[row, 3] = Convert.ToString(price + subtotal);
}
Console.WriteLine(); // start new line of output
}
while ();
} // end method OutputArray
} // end class InitArray
答案 0 :(得分:1)
您已经有了for语句的循环。您不需要额外的循环。当用户输入“ 0”时,使用break
打破循环。
public static void Main(string[] args)
{
string[,] items = new string[100, 4];
for (int row = 0; row < items.GetLength(0); row++)
{
// loop through columns of current row
string input;
Console.WriteLine("Item Name(enter 0 to stop): ");
input = Console.ReadLine();
if (input == "0") break;
items[row, 0] = input;
Console.WriteLine("Item Price(enter 0 to stop): ");
input = Console.ReadLine();
if (input == "0") break;
items[row, 1] = input;
Console.WriteLine("Quantity(enter 0 to stop): ");
input = Console.ReadLine();
if (input == "0") break;
items[row, 2] = input;
// ...
}
}
答案 1 :(得分:1)
您应该使用更方便的方式来存储您的信息。最好使用List<Product>
而不是二维数组。使用特定类的列表将使您不必担心数组的维数,但也将使您的所有数据都具有正确的数据类型而不是一堆字符串。
只要您的用户请求停止输入,就可以通过返回布尔值的泛型函数来解决您每次从用户那里获得“ 0”时就停止输入的问题。
因此,首先定义一个Product类
public class Product
{
public string Name {get;set;}
public int Quantity { get; set; }
public decimal Price { get; set; }
... other field if you need them...
}
现在编写一个布尔函数,该信号通知调用代码意图停止输入
public bool getInput(string message, out string result)
{
Console.WriteLine(message);
result = Console.ReadLine();
return (!result.Equals("0"))
}
在上面的函数中,我们在out变量中返回用户的输入,如果用户要求停止输入,则返回false。
现在将所有内容放在一起,我们就可以编写
List<Product> products = new List<Product>();
bool ok = true;
while(ok)
{
string input;
Product p = new Product();
ok = getInput("Item Name(enter 0 to stop): ", out input);
if (ok) p.Name = input;
if (ok) ok = getInput("Item Price(enter 0 to stop): ", out input);
if (ok) p.Price = Convert.ToDecimal(input);
if (ok) ok = getInput("Quantity(enter 0 to stop): ", out input);
if (ok) { p.Quantity = Convert.ToInt32(input); products.Add(p);}
}
decimal totalPrice = products.Sum(p => p.Price);
Console.WriteLine(totalPrice);
答案 2 :(得分:1)
根据@Steve的回答,您还可以使用逻辑AND。
List<Product> products = new List<Product>();
while (getInput("Item Name(enter 0 to stop): ", out var name)
&& getInput("Item Price(enter 0 to stop): ", out var price)
&& getInput("Quantity(enter 0 to stop): ", out var quantity))
{
products.Add(new Product
{
Name = name,
Price = Convert.ToDecimal(price),
Quantity = Convert.ToInt32(quantity)
});
}
decimal totalPrice = products.Sum(p => p.Price);
Console.WriteLine(totalPrice);