신입 개발자 공부 과정

1월3일 인벤3 본문

C#/수업 내용

1월3일 인벤3

Lewisjkim 2022. 1. 3. 20:22

Q1

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

namespace Inventory3
{
    class Program
    {
        static void Main(string[] args)
        {

            Inventory inventory = new Inventory();
            //Item item0 = new Item("장검");
            //Item item1 = new Item("단검");
            //Item item1 = new Item("단검");
            //Item item1 = new Item("단검");
            //Item item1 = new Item("단검");
            //Item item1 = new Item("단검");

            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.AddItem(new Item("창"));
            int count = inventory.GetItemCount();
            Console.WriteLine(count); //2
            inventory.PrintItems();

            //단검
            //등등
            Console.WriteLine();
            Item foundItem = inventory.GetItemByName("장검");
            Console.WriteLine(foundItem.name);//장검
            count = inventory.GetItemCount();
            Console.WriteLine(count); //1
            Console.WriteLine();
            foundItem = inventory.GetItemByName("활");
            if (foundItem != null)
            {
                Console.WriteLine(foundItem.name);
            }
            else
            {
                Console.WriteLine("활을 찾지 못했습니다.");
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Inventory3
{
    class Inventory
    {
        List<Item> items;
        //생성자 생성
        public Inventory()
        {
            this.items = new List<Item>();
        }
        public void AddItem(Item item)
        {
            this.items.Add(item);
        }
        public int GetItemCount()
        {
            return this.items.Count;
        }
        public void PrintItems() //리스트에 있는 아이템들을 하나하나씩 이름을 출력한다
        {
            foreach (var item in this.items)
            {
                Console.WriteLine(item.name);//왜 name이 접근이 안되지? = private이였다
            }
        }
        public Item GetItemByName(string searchName)//아이템 타입의 '이름으로 아이템찾기' 메서드를 생성
        {
            Item findItem = null;
            foreach(var item in this.items)//아이템 리스트에 있는 아이템들을 각각
            {
                if(item.name == searchName)//검색한 이름이 리스트에있을때
                {
                    findItem = item;//그 리스트에 있는 아이템을 findItem이라 하고
                    this.items.Remove(findItem);//findItem을 지운다
                    break;
                }
            }
            return findItem;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Inventory3
{
    class Item
    {
        public string name;//맴버변수 string 생성

        //생성자 생성
        public Item(string name)
        {
            this.name = name;
        }
        
    }
}

Q2.

아이템 중복되면 x? 으로 표시되는 부분을 표시를 하지 못하고있다. 

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

namespace Inventory3
{
    class Program
    {
        static void Main(string[] args)
        {

            Inventory inventory = new Inventory();
            //Item item0 = new Item("장검");
            //Item item1 = new Item("단검");
            //Item item1 = new Item("단검");
            //Item item1 = new Item("단검");
            //Item item1 = new Item("단검");
            //Item item1 = new Item("단검");

            inventory.AddItem(new Item("장검"));
            inventory.AddItem(new Item("장검"));
            inventory.AddItem(new Item("장검"));
            
            int count = inventory.GetItemCount();
            Console.WriteLine(count); //3
            
            inventory.PrintItems();//장검x3
            Console.WriteLine();

            var item = inventory.GetItemByName("장검");//장검 검색
            if(item != null)//아이템 값이 비어있지 않다면
            {
                Console.WriteLine("{0}x{1}", item.name, item.count); //장검x1
            }

            count = inventory.GetItemCount();
            Console.WriteLine(count);   //2
            Console.WriteLine();

            inventory.PrintItems(); //장검 x2

            inventory.GetItemByName("장검");
            inventory.GetItemByName("장검");

            count = inventory.GetItemCount();
            Console.WriteLine(count);   //0

            inventory.PrintItems(); //인벤토리가 비어 있습니다 
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Inventory3
{
    class Inventory
    {
        List<Item> items;
        //생성자 생성
        public Inventory()
        {
            this.items = new List<Item>();
        }

        //아이템 추가
        public void AddItem(Item item)
        {
            var foundItem = this.SearchItem(item.name);//추가한 아이템이 아이템리스트에 있다면 foundItem 변수에 추가
            this.items.Add(item);//아이템 리스트에 추가
        }

        //아이템 찾기
        private Item SearchItem(string name)
        {
            Item foundItem = null;
            foreach (var item in this.items)
            {
                if(item.name == name)
                {
                    foundItem = item;
                    break;
                }
            }
            return foundItem;
        }

        //아이템 카운트
        public int GetItemCount()
        {
            int total = 0;//변수를 초기화하고
            foreach(var item in this.items)//각 아이템을 보면서
            {
                total += item.count;//수를 하나하나 카운트한다
            }
            return total;//총 합을 출력
        }
        public void PrintItems() //리스트에 있는 중복된 아이템을 x? 형식으로 나타나게한다
        {
            if(this.items.Count<=0)
            {
                Console.WriteLine("인벤토리가 비어 있습니다.");
            }
            else
            {
                foreach (var item in items)
                {
                    //같은 아이템이 있다면 아이템을 x? 형식으로 나타나게한다
                    Console.WriteLine("{0}x{1}", item.name, item.count);
                }
            } 
        }

        //아이템 이름으로 검색
        public Item GetItemByName(string searchName)//아이템 타입의 '이름으로 아이템찾기' 메서드를 생성
        {
            var item = this.SearchItem(searchName);
            Item rtnItem = null;
            if(item != null)//검색한 아이템이 값이 있다면
            {
                rtnItem = new Item(item.name);//rtnItem에 아이템 객체로 만들어서 적용한다
                item.count -= 1; //아이템 카운트에 1을 뺴고
                if(item.count<=0)//아이템 카운트가 0보다 작거나 같으면
                {
                    this.items.Remove(item);//아이템배열에서 해당 아이템을 제거한다
                }
            }
            return rtnItem;//출력
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Inventory3
{
    class Item
    {
        public string name;//맴버변수 string 생성
        public int count;

        //생성자 생성
        public Item(string name, int count=1)
        {
            this.name = name;
            this.count = count;
        }
        
    }
}

 

Q3.