💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ حمیدرضا جلیلی
خطای منطقی برنامه
جامعه ASP.NET ایجاد شده در ۱۷ دی ۱۴۰۱
 if (++count > size)
        throw new Exception("queue is full")
      queue[tail++] = input;
      if (tail == size)
        tail = 0;

سلام این قسمت از برنامه یه خطای منطقی از دید من دارد لطفا راهنمایی بفرمایید:

وقتی که به انتهای صف برسیم if tail == size برای اینکه عملیات دوبار ه از سر صف انجام شود tail را صفر میکند و چون tail صفر شده منطق این است دوباره بتوان از سر صف نوشت و اصلا دلیل صفر شدن ان هم همین است در ادامه دوباره به ایتدای شرط if بر میگردد ولی اینجا خطای ی پر شدن صف را میدهد و برنامه متوقف میشود و عمل بازنویسی صورت نمیگیرد حالا به نظر من یا نباید خطا را میدادیم و یا نباید tail را صفر میکردیم و یا اگر خطا دادیم باید طوری مدیریت میکردیم که برنامه متوقف نشود و دوباره از ابتدای صف قابلیت باز نویسی صورت بگیرد.همین اقدام برای متد بعد هم صورت میگیرد.

علت اینکه tail رو صفر میکنیم، اینه که اگه از سر صف چیزی خارج شده بود بتونیم جاش بنویسیم. یعنی بازنویسی فقط زمانی مقدوره که چیزی dequeue شده باشه. در صورتی که dequeue نکرده باشیم و چیزی از سر صف خارج نشده باشه بازنویسی صورت نمیگیره و خطا میگیریم. نیازی به هندل شدن این exception نیست چون معمولا از ساختار داده‌ها در سطوح بالاتر استفاده میشه و وظیفه ی متدی که از این ساختار داده استفاده میکنه هندل کردن این exception هست. مثل آرایه نگاهش کنید که اگر از اندیسی بزرگتر از سایز آرایه استفاده کنیم بهمون Exception میده.

محمدرضا میرزایی ۱۷ دی ۱۴۰۱، ۰۷:۱۰

ممنون از توضیحاتتون

حمیدرضا جلیلی ۱۷ دی ۱۴۰۱، ۱۱:۱۷

فقط یه ایرادای پیش میآید که برنامه با پیغام پر شدن صف خطا میدهد و دیگه اجازه خالی شدن رو نمیدهد یعنی برنامه متوقف میشود و دیگه متد Dequeue اجرا نمیشه که بتونه دوباره بازنویسی انجام بده

حمیدرضا جلیلی ۱۷ دی ۱۴۰۱، ۱۱:۳۱

استاد نظری ندارید؟

حمیدرضا جلیلی ۱۳ بهمن ۱۴۰۱، ۰۷:۰۴