Giúp xem code bị lỗi gì

em có lập trình bài chuyển đổi cơ số nó không hiển thị lỗi nhưng chạy tới đoạn pop() thì nó lại exit ạ.

using System;
using System.Collections.Generic;
using System.Text;
namespace chuyendoicoso
{
    class TStack
    {
        Object[] stack;
        Int32 i;
        Int32 j;

        public TStack(int n)
        {
            stack = new Object[n];
            i = 0;
            j = n;
        }

        public void Push(object item)
        {
            if (!isStackFull())
            {
                stack[i++] = item;
            }
            else
                Console.WriteLine("Stack is Full");
        }

        public bool isStackFull()
        {
            if (i == j)
                return true;
            else
                return false;
        }

        public object Pop()
        {
            if (stack.Length != 0)
                return stack[i--];
            return -1;
        }

        public object TopElement()
        {
            if (stack.Length != 0)
                return stack[i - 1];
            return 0;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "Chuyen doi he co so";
            Console.Clear();
            Console.Write("Nhap so: ");
            var n = int.Parse(Console.ReadLine());
            int k = n, dem=0;
            while(k!=0)
            {
                k = k / 10;
                dem++;
            }
            Console.Write("Nhap he co so can chuyen: ");
            var b = int.Parse(Console.ReadLine());
            var bin = Convert(n, b, dem);
            Console.WriteLine($"{n} (he co so 10) => {bin} (he co so {b})");
            Console.ReadKey();
        }


        static string Convert(int so, int coso, int dodai)
        {
            TStack a = new TStack(dodai+1);
            do
            {
                var d = so % coso;
                if (d >= 10 && d <= 15 && coso == 16)
                {
                    var hex = string.Empty; // chuoi hex trong
                    switch (d)
                    {
                        case 10: hex = "A"; break;
                        case 11: hex = "B"; break;
                        case 12: hex = "C"; break;
                        case 13: hex = "D"; break;
                        case 14: hex = "E"; break;
                        case 15: hex = "F"; break;
                    }
                    a.Push(hex);
                    dodai++;
                }
                else
                {
                    a.Push(d.ToString());
                    dodai++;
                }
                so /= coso;
            } while (so != 0);
            var sb = new StringBuilder();
            while (dodai > 0)
            {
                sb.Append(a.Pop());
                dodai--;
            }
            return sb.ToString();
        }
    }
}

Cậu nên tập dùng debugger @Kyuusa_Kayato ạ @@
Tớ nghĩ cậu chỉ cần tốn khoảng vài chục phút để học cách debug với Visual studio, sau đó mất tầm 5 phút để tìm ra vấn đề, khi mà debugger đưa cho cậu giá trị từng dòng một rồi @@

1 Like

dodai, ở đây bạn cố định số lượng phần tử của TStack?
Bạn có chắc khi chuyển đổi thì số lượng chữ số luôn nhỏ hơn dodai bạn cho không?
Ví dụ đơn giản là 2000000000 cơ số 10 (dài 10) sang cơ số 2 là 1110111001101011001010000000000 (dài 31).
Độ dài thay đổi lớn lắm đó bạn.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?