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

1차원 배열 인벤토리 복습 (+ 인벤토리 용량확장

내꺼블로그 2023. 7. 25. 11:17

1. Items.cs

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

namespace LearnDotnet
{
    internal class Item
    {
    	//멤버변수
        string itemName;
        
        //생성자
        public Item(string itemName)
        {
            this.itemName = itemName;
        }
		
        //아이템 이름 반환 메서드
        public string GetItemName()
        {
            return this.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
    {
    	//멤버변수
        Item[] items;
        int capacity;
        int itemIndex;
		
        //생성자(매개변수를 통해 용량 설정)
        public Inventory(int capacity)
        {
            this.capacity = capacity;
            items= new Item[this.capacity];
        }

		
        //아이템 추가 메서드
        public void AddItem(Item item)
        {
        	//인벤토리의 용량이 가득 찼을 경우 용량 확장
            if (this.itemIndex == this.capacity)
            {
                IncreaseCapacity();
            }
            items[itemIndex++] = item;
        }

		
        //아이템 이름으로 아이템을 꺼내는 메서드
        public Item GetItemName(string name)
        {
            Item tempItem = null;
            int getIndex = -1;
            for(int i=0;i<itemIndex; i++)
            {
                if (items[i].GetItemName() == name)
                {
                    tempItem = items[i];
                    items[i] = null;
                    getIndex = i;
                    break;
                }
            }
            if (getIndex != -1)
            {
                ArraySort(getIndex);
            }
            return tempItem;
        }

		//아이템 출력 메서드
        public void PrintProperties()
        {
            for(int i=0;i<items.Length; i++)
            {
                Console.Write("{0}. ", i);
                if (items[i] != null) { Console.WriteLine(items[i].GetItemName()); }
                else Console.WriteLine("[     ]");
            }
        }

		
        //아이템 재배열 메서드(아이템을 꺼냈을 때 사용, 내부적으로 돌아가므로 public X)
        void ArraySort(int index)
        {
            for (int i = index; i < items.Length - 1; i++)
                items[i] = items[i + 1];
            this.itemIndex--;
            items[this.itemIndex] = null;
        }
        
        //인벤토리 용량 확장 메서드(용량이 찼을 때 사용, 내부적으로 돌아가므로 public X)
        void IncreaseCapacity()
        {
            Item[] temp = new Item[this.capacity + 1];
            for (int i = 0; i < this.capacity; i++)
                temp[i] = items[i];
            items = temp;
            temp = null;
            this.capacity++;
        }
    }
}

 

 

 

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 inventory = new Inventory(5);
            
            //아이템 추가
            inventory.AddItem(new Item("장검"));
            inventory.AddItem(new Item("단검"));
            inventory.AddItem(new Item("활"));

			//아이템 출력
            inventory.PrintProperties();


			//아이템을 찾고 꺼내기
            string getItemName = "장검";
            Item getItem=inventory.GetItemName(getItemName);
            if (getItem == null)
            {
                Console.WriteLine("아이템({0})이 존재하지 않습니다.", getItemName);
            }
            else
            {
                Console.WriteLine("아이템({0})을 꺼냈습니다.", getItem.GetItemName());
            }

            inventory.PrintProperties();

            inventory.AddItem(new Item("장검"));
            inventory.AddItem(new Item("단검"));
            inventory.AddItem(new Item("활"));
            inventory.AddItem(new Item("장검"));
            inventory.AddItem(new Item("단검"));
            inventory.AddItem(new Item("활"));

            inventory.PrintProperties();

            string getItemName1 = "검";
            Item getItem1 = inventory.GetItemName(getItemName1);
            if (getItem1 == null)
            {
                Console.WriteLine("아이템({0})이 존재하지 않습니다.", getItemName1);
            }
            else
            {
                Console.WriteLine("아이템({0})을 꺼냈습니다.", getItem1.GetItemName());
            }

            inventory.PrintProperties();
        }
    }
}

 

 

결과

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

가짜 인벤토리 만들기  (0) 2023.07.26
2차원 배열 연습  (0) 2023.07.25
배열 연습  (0) 2023.07.25
1차원 배열 인벤토리  (0) 2023.07.25
1차원 배열 인벤토리  (0) 2023.07.24