c# 강의/과제

20200415 - 아이템 생성, 검색, 꺼내기, 출력 과제

쪼혀 2020. 4. 16. 01:11

 

> Item.cs

더보기
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20200414_array
{
    class Item
    {
        public string name;

        public Item(string name)
        {
            this.name = name;
            Console.WriteLine($"아이템 {this.name}이 생성되었습니다.");
        }
    }
}

 

> Inventory.cs

더보기
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20200414_array
{
    class Inventory
    {
        public Item[] items;
        int itemIndex = 0;

        public Inventory(int capacity)
        {
            items = new Item[capacity];
            Console.WriteLine("인벤토리가 생성되었습니다.");
        }

        public void AddItem(Item item)
        {
            if (this.itemIndex < this.items.Length)
            {
                this.items[this.itemIndex] = item;
                this.itemIndex++;
            }
        }

        public Item GetItem(String itemName)
        {
            Item item = null; // 꺼낸 아이템 저장
            Item[] tempArr = new Item[this.items.Length - 1];  // 꺼낸 아이템 정리용 임시 배열
            bool check = false;
            int delIndex = 0;

            for (int i = 0; i < this.items.Length; i++)
            {
                if (this.items[i] != null)
                {
                    // 검색대상 같은지 확인
                    if (itemName == this.items[i].name)
                    {
                        item = this.items[i];
                        delIndex = i;
                        check = true;
                    }
                    else
                    {
                        // 기존 배열에서 찾은 인덱스 확인하여 그 인덱스에, 다음 내용물 넣기
                        if (i > delIndex && check)
                        {
                            tempArr[i - 1] = this.items[i];
                        }
                        else
                        {
                            // 새로운 배열에 넣기
                            if (tempArr.Length > i)
                            {
                                tempArr[i] = this.items[i];
                            }
                        } //if end
                    } // else end
                } // if end
            } //for end

            // 내용물 찾아 꺼낸 경우 기존 배열 업데이트
            if (check)
            {
                this.items = tempArr;
                Console.WriteLine(item.name);
            }
            return item;
        }

        public Item FindItem(String itemName)
        {
            Item item = null;
            for (int i = 0; i < this.items.Length; i++)
            {
                if (this.items[i] != null)
                {
                    if (itemName == this.items[i].name)
                    {
                        Console.WriteLine(this.items[i].name);
                        item = this.items[i];
                        break;
                    }
                }
            }
            return item;
        }

        public int GetCount()
        {
            int itemCount = 0;
            foreach (Item item in this.items)
            {
                if (item != null)
                {
                    itemCount++;
                }
            }
            return itemCount;
        }

        public void PrintItemNames()
        {
            Console.WriteLine("> 전체 목록");

            /*  
             // forEach 순환문
             foreach (Item item in this.items)
              {
                  if (item == null)
                  {
                      Console.WriteLine("[  ]");
                  }
                  else
                  {
                      Console.WriteLine(item.name);
                  }
              }
             */


            for (int i = 0; i < this.items.Length; i++)
            {
                if (this.items[i] == null)
                {
                    Console.WriteLine("[  ]");
                }
                else
                {
                    Console.WriteLine($"({i}){this.items[i].name}");
                }
            }

        }
    }
}

 

> App.cs

더보기
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20200414_array
{
    class App
    {

        public App()
        {
            Inventory inventory = new Inventory(5);
            inventory.AddItem(new Item("장검"));
            inventory.AddItem(new Item("궁"));
            inventory.AddItem(new Item("투구"));
            inventory.AddItem(new Item("장화"));
            inventory.AddItem(new Item("벨트"));

            Console.WriteLine();

            // ㅡㅡㅡㅡㅡㅡ 가방내용 전체 출력 ㅡㅡㅡㅡㅡㅡ
            inventory.PrintItemNames();
            Console.WriteLine();

            // ㅡㅡㅡㅡㅡㅡ 특정 아이템 검색 ㅡㅡㅡㅡㅡㅡ
            Console.Write("> 검색: ");
            Item findedItem = inventory.FindItem("궁");
            if (findedItem == null) { 
                Console.WriteLine("찾는 아이템 없음");
            }
            else
            {
                Console.WriteLine($"[{findedItem.name}]을 찾았습니다.");
            }

            Console.WriteLine();

            //ㅡㅡㅡㅡㅡㅡ 찾아 꺼내기 ㅡㅡㅡㅡㅡㅡ
            Console.Write("> 꺼내기: ");
            Item getedItem = inventory.GetItem("장화");
            if (getedItem == null)
            {
                Console.WriteLine("> 꺼낼 아이템 없음");
            }
            else
            {
                Console.WriteLine($"[{getedItem.name}]을 꺼냈습니다.");
            }

            Console.WriteLine();
            inventory.PrintItemNames();
        }
    }
}