EasyCastleUNITY

2023/07/24 복습 본문

C#프로그래밍

2023/07/24 복습

EasyCastleT 2023. 7. 25. 00:14

복습을 하는 도중, 틀린 부분을 찾아서 고쳐봤다. 

//인벤토리 정렬 하는 부분
            //모든 요소들을 하나 앞으로 보낸다.
            //하나씩 넣었을 때만 기능
            for(int i=1; i < items.Length; i++)
            {
                items[i - 1] = items[i];
            }
            return searchItem;

마지막 연습에서 정렬을 하는 부분이다. 

 

이런식으로 코드가 되면 그냥 배열의 요소가 앞으로 하나씩 전진하는 결과가 있을 뿐이다. 

 

그래서 다른 방법을 찾았고, 강사님이 말해주신 방법인 다른 배열에 넣은 다음, 

다시 원래 배열에 넣는 방법을 생각해 보았다. 

 

public Item GetItemByName(string name)
        {
            int emptyNumber = 0;
            for (int i = 0; i < items.Length; i++)
            {
                if (items[i] != null)
                {
                    if (items[i].Name == name)
                    {
                        emptyNumber = i;
                        searchItem = items[i];
                        items[i].itemCount--;
                        if (this.items[i].itemCount == 0)
                        {
                            this.items[i] = null;
                        }
                    }
                }
            }
            //앞으로 정렬 
            Item[] newItems = new Item[this.capacity];
            int itemPointer = 0;
            for (int i = 0; i < this.items.Length; i++)
            {
                if (items[i] != null)
                {
                    newItems[itemPointer] = items[i];
                    itemPointer++;
                }
            }
            items = newItems;
            return searchItem;
        }

이런 식으로 Item에 대한 배열을 하나 만든다음 for문을 통해 

원래 items 배열에 접근하였습니다. 그 다음 if문을 통해 items의 배열 요소들 중 null이 아닐때만 

새로운 배열에 배열 요소를 저장하게 했다. 

 

이러한 방식을 통해 그냥 앞으로 보내는 방식에서, 중간이 비워도 

제대로 정렬이 되도록 하는 방식으로 다시 했다.  

 

그리고 메서드 override 와 overload에 대해서 다시 살펴보고 상속에 대해 다시 공부했다.