K-digital traning/C#프로그래밍

1차원 배열 인벤토리

내꺼블로그 2023. 7. 24. 16:53

(1) Item.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    internal class Item
    {
        public string ItemName { get; set; }
        public Item(string ItemName)
        {
            this.ItemName = ItemName;
        }
    }
}

 

 

(2) Inventory.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    
    internal class Inventory
    {
        int capacity;
        Item[] items;
        int index=-1;
        public Inventory(int capacity) 
        {
            this.capacity = capacity;
            items = new Item[this.capacity];
        }

        public void AddItem(Item item)
        {
            this.items[++index] = item;
        }

        public Item GetItemByName(string name) 
        {
            Item getItem = null;
            int getItemIndex = -1;
            for (int i=0; i <= index; i++)
            {
                if (name == items[i].ItemName) 
                {
                    getItem = this.items[i];
                    this.items[i] = null;
                    getItemIndex = i;
                    break;
                }   
            }

            //꺼낸 아이템이 존재할 경우 인벤토리 다시 정렬
            if(getItemIndex >= 0) 
            {
                for(int i = getItemIndex; i < this.index; i++)
                {
                    items[i] = items[i + 1];
                }
                items[index--] = null;
            }
            return getItem;
        }

        public void PrintAllItems()
        {
            for(int i=0;i< this.items.Length; i++)
            {
                if (items[i] != null)
                    Console.WriteLine(this.items[i].ItemName);
                else Console.WriteLine("[       ]");
            }
        }
    }
}

 

 

(3)App.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    internal class App
    {
        
        //생성자
        public App() 
        {
            Inventory inven = new Inventory(5);
            inven.AddItem(new Item("장검"));
            inven.AddItem(new Item("단검"));
            inven.AddItem(new Item("활"));
            inven.AddItem(new Item("도끼"));
            inven.AddItem(new Item("글러브"));

            inven.PrintAllItems();

            string searchName = "단검";
            Item item = inven.GetItemByName(searchName);
            if(item != null )
            {
                Console.WriteLine("{0}을 꺼냈습니다.", item.ItemName);
            }
            else
            {
                Console.WriteLine("{0}을 찾을수 없습니다.", searchName);
            }

            inven.PrintAllItems();
            
        }
    }
}

 

 

 

결과

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

-번외

(1) inventory.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    
    internal class Inventory
    {
        int capacity;
        Item[] items;
        int index=-1;
        public Inventory(int capacity) 
        {
            this.capacity = capacity;
            items = new Item[this.capacity];
        }

        public void AddItem(Item item)
        {
            if (this.index < capacity-1)
                this.items[++index] = item;
            else Console.WriteLine("인벤토리가 가득찼습니다. 더이상 {0}을 저장할 수 없습니다.", item.ItemName);
        }

        public Item GetItemByName(string name) 
        {
            Item getItem = null;
            int getItemIndex = -1;
            for (int i=0; i <= index; i++)
            {
                if (name == items[i].ItemName) 
                {
                    getItem = this.items[i];
                    this.items[i] = null;
                    getItemIndex = i;
                    break;
                }   
            }

            //꺼낸 아이템이 존재할 경우 인벤토리 다시 정렬
            if(getItemIndex >= 0) 
            {
                for(int i = getItemIndex; i < this.index; i++)
                {
                    items[i] = items[i + 1];
                }
                items[index--] = null;
            }
            return getItem;
        }

        public void PrintAllItems()
        {
            for(int i=0;i< this.items.Length; i++)
            {
                if (items[i] != null)
                    Console.WriteLine(this.items[i].ItemName);
                else Console.WriteLine("[       ]");
            }
        }
    }
}

 

(2) App.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    internal class App
    {
        
        //생성자
        public App() 
        {
            Inventory inven = new Inventory(5);
            inven.AddItem(new Item("장검"));
            inven.AddItem(new Item("단검"));
            inven.AddItem(new Item("활"));
            inven.AddItem(new Item("도끼"));
            inven.AddItem(new Item("글러브"));
            inven.AddItem(new Item("신발"));

            inven.PrintAllItems();

            string searchName = "단검";
            Item item = inven.GetItemByName(searchName);
            if(item != null )
            {
                Console.WriteLine("{0}을 꺼냈습니다.", item.ItemName);
            }
            else
            {
                Console.WriteLine("{0}을 찾을수 없습니다.", searchName);
            }

            inven.PrintAllItems();
            
        }
    }
}

 

결과

'K-digital traning > C#프로그래밍' 카테고리의 다른 글

배열 연습  (0) 2023.07.25
1차원 배열 인벤토리  (0) 2023.07.25
스타크래프트 - 마린, 저글링, 메딕  (0) 2023.07.24
반복문 for  (0) 2023.07.20
Input, enum 활용  (0) 2023.07.20