在不同的方法中使用数组

时间:2016-05-24 02:59:06

标签: c# function methods

我正在用C#编写代码, 此代码允许您将代码,价格,单位等项目添加到数组中,菜单将显示聚合项目。 我有一个问题,因为我这样做,显然我的代码不起作用,有人可以帮助我吗? 国王问候。 我是最新的。

LIMIT $page;

6 个答案:

答案 0 :(得分:3)

代码几乎没有问题。

  1. 您为产品,代码等创建的数组的大小为,默认情况下为item值。将任何值插入0大小的数组会引发异常。
  2. 此外,您应该谨慎访问非静态上下文中的静态字段。
  3. 我建议使用这些属性定义一个类,并使用List来保存集合。

    public class Product
    {
        public string Name {get;set;}
        public string Code {get;set;}
        public double Price {get;set;}
        public int Unit {get;set;}  
    }
    

    现在修改您的additem以创建产品。

        public static void addItem()
        {
            Console.WriteLine("\nAmount of items to add");
            item = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Insert the items.");
            for (int i = 0; i < item; i++)
            {
                var product = new Product();
                Console.WriteLine("\nItem[" + i + "]: ");
                Console.Write("Product[" + i + "]: ");
                product.Name = Console.ReadLine();
    
                Console.Write("Code[" + i + "]: ");
                product.Code = Console.ReadLine();
    
                Console.Write("Price[" + i + "]: ");
                product.Price = double.Parse(Console.ReadLine());  //read as double value.
    
                Console.Write("Unit[" + i + "]: ");
                product.Unit = int.Parse(Console.ReadLine()); // Read as int value
    
                products.Add(product); // products is global/class variable.
            }
        }
    

    选中此Demo,它可让您继续操作。

答案 1 :(得分:0)

您正在初始化长度为零的数组。数组和项属性是静态的,在应用程序启动时初始化。因此,当您更改项目字段时,您的数组已使用默认值int初始化,即零。您应该在设置item属性后初始化数组。即使在此之后,您也无法向阵列添加项目。尝试使用List&lt;&gt;代替。

答案 2 :(得分:0)

问题是当加载类时,静态变量item被初始化为0。一旦通过读入用户输入的值来更改它,就不会为静态变量分配正确大小的数组。您可以在读取值后执行此操作来解决此问题:

public static void addItem()
{
    Console.WriteLine("\nAmount of items to add");
    item = Convert.ToInt32(Console.ReadLine());

    // initialize static vars to correct size, now that we have #items
    product = new string[item];
    code = new string[item];
    price = new string[item];
    unit = new string[item];

    Console.WriteLine("Insert the items.");
    for (int i = 0; i < item; i++)
    {
        Console.WriteLine("\nItem[" + i + "]: ");
        Console.Write("Product[" + i + "]: ");
        product[i] = Console.ReadLine();

        Console.Write("Code[" + i + "]: ");
        code[i] = Console.ReadLine();

        Console.Write("Price[" + i + "]: ");
        price[i] = Console.ReadLine();

        Console.Write("Unit[" + i + "]: ");
        unit[i] = Console.ReadLine();
    }

}

您可以在https://dotnetfiddle.net/n5lWTQ看到固定代码!

答案 3 :(得分:0)

为了让您入门...您在字段声明中实例化了arrays,其大小为item

    public static int item { get; set; }
    public static string[] product = new string[item];
    public static string[] code = new string[item];
    public static string[] price = new string[item];
    public static string[] unit = new string[item];

问题在于,当您访问Menu类时,会立即执行这些代码行。由于default的{​​{1}}值为int,因此您的数组大小为0.尝试将断点应用到这些行中并且您将看到。

现在,您可以在设置0的值后实例化它们。所以你的代码就是这样......

item

答案 4 :(得分:0)

您可以尝试使用包含项目所需字段的对象列表。通用列表允许您动态地将项添加到列表中,而无需在初始化期间设置大小。这意味着您可以根据需要添加项目(使用选项1),而无需更改数组。

除了在初始化类时将数组设置为零(正如其他答案所示),每次要添加新项时,看起来好像是在重新使用int item属性你的清单。这意味着变量正在发生变化,因此您的ShowItems()方法无法正常运行。

这是一个有效的例子:

using System;
using System.Collections.Generic;

namespace Market
{
    public class Menu
    {
        public struct Item
        {
            public string product;
            public string code;
            public string price;
            public string unit;
        }
        public static List<Item> items = new List<Item>();

        public static void showMenu()
        {
            //Menu 
            while (true)
            {
                Console.WriteLine("\n1.- Add new item");
                Console.WriteLine("2.- Show items");
                Console.WriteLine("3.- Exit");

                string option = Console.ReadLine();

                switch (option)
                {
                    case "1":
                        addItem();
                        break;
                    case "2":
                        showItems();
                        break;
                    case "3":
                        System.Environment.Exit(-1);
                        Console.ReadKey();
                        break;
                    default:
                        Console.WriteLine("Select one valid option..");
                        break;
                }
            }

        }

        public static void addItem()
        {
            Console.WriteLine("\nAmount of items to add");
            int numbItemsToAdd = Convert.ToInt32(Console.ReadLine());  // needs validation
            Console.WriteLine("Insert the items.");
            for (int i = 0; i < numbItemsToAdd; i++)
            {
                Item item = new Item();
                Console.WriteLine("\nItem[" + (i + 1) +"]: ");
                Console.Write("Product[" + (i + 1) +"]: ");
                item.product = Console.ReadLine();

                Console.Write("Code[" + (i + 1) + "]: ");
                item.code = Console.ReadLine();

                Console.Write("Price[" + (i + 1) + "]: ");
                item.price = Console.ReadLine();

                Console.Write("Unit[" + (i + 1) + "]: ");
                item.unit = Console.ReadLine();

                items.Add(item);
            }

        }

        public static void showItems()
        {
            Console.WriteLine("******* SHOW ITEMS *******");
            Console.WriteLine("Product ------------- Code ------------- Price ------------- Unit");

            foreach(Item i in items)
            {
                Console.WriteLine(i.product + "                " + i.code + "                   " + i.price + "                    " + i.unit);
            }
        }



        public static void Main()
        {
            showMenu();
        }
    }


}

答案 5 :(得分:0)

  public class Menu
  {
    public static int item { get; set; }
    public static List<string> product = new List<string>();
    public static List<string> code = new List<string>();
    public static List<string> price = new List<string>();
    public static List<string> unit = new List<string>();

    public void showMenu()
    {
        //Menu 
        while (true)
        {
            Console.WriteLine("\n1.- Add new item");
            Console.WriteLine("2.- Show items");
            Console.WriteLine("3.- Exit \n");

            string option = Console.ReadLine();

            switch (option)
            {
                case "1":
                    addItem();
                    break;
                case "2":
                    showItems();
                    break;
                case "3":
                    System.Environment.Exit(-1);
                    Console.ReadKey();
                    break;
                default:
                    Console.WriteLine("Select one valid option..");
                    break;
            }
        }

    }

    public static void addItem()
    {
        Console.WriteLine("\nAmount of items to add");
        item = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Insert the items.");
        for (int i = 1; i <= item; i++)
        {
            Console.WriteLine("\nItem[" + i + "]: ");
            Console.Write("Product[" + i + "]: ");
            product.Add(Console.ReadLine());

            Console.Write("Code[" + i + "]: ");
            code.Add(Console.ReadLine());

            Console.Write("Price[" + i + "]: ");
            price.Add(Console.ReadLine());

            Console.Write("Unit[" + i + "]: ");
            unit.Add(Console.ReadLine());
        }

    }

    public static void showItems()
    {
        Console.WriteLine("******* SHOW ITEMS *******");
        Console.WriteLine("Product ------------- Code ------------- Price ------------- Unit");
        for (int i = 0; i < item; i++)
        {
            Console.WriteLine(product[i] + "                 " + code[i] + "                    " + price[i] + "                     " + unit[i]);
        }
    }
}