30/09/2018, 17:06

xuất hiện ngoại lệ trong c#

em code sự kiện click , để sắp xếp mảng tăng dần nhưng tới đoạn so sánh thì xuất hiện ngoại lệ exeption , mong a e chỉ giúp

public void btThucHien_Click(object sender, EventArgs e)
        {
            if(rbtTang.Checked == true)
            {
              
                for ( i = 0; i < n-1; i++)
                    for (int j = i + 1; i < n; j++)
                    {
                        if (array[i] > array[j]) // xuất hiện ngoại lệ
                        {
                             temp = array[i];
                            array[i] = array[j];
                            array[j] = temp;
                        }
                    }
                mang = "";
                for (int i = 0; i <= n; i++)
                    mang = mang + " " + array[i].ToString();
                tbKetQua.Text = mang.Trim();
            }
        }
Phạm Hoàng Tuấn viết 19:14 ngày 30/09/2018

E nên dùng try ... catch() để handler ngoại lệ, xem nó bị lỗi gì,
Ngoài ra, biến n của e là gì? a ngĩ là số lượng phần tử mảng, và biến i nữa…không thấy khai báo
E kiểm tra xem i,j có vượt quá số lượng phần tử mảng hay k, mảng array đã được khởi tạo giá trị chưa?

Chỗ đáng ngi nhất for (int i = 0; i <= n; i++) có lẽ for (int i = 0; i <n; i++) mới đúng

Lê Huy viết 19:20 ngày 30/09/2018

biến n em khai báo ở trên rồi a . đây là đoạn code của em . e dg code 2 sự kiện nhập mảng và thực hiện sắp xếp . mong a chỉ giúp .đây là code form , xử lí 2 sự kiện

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//thao tac vs mang 1 chieu
namespace Bai6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int[] a = new int[100];
        int n=0,temp,i;
        string s,s1;
        private string StandardString(string strInput)
        {
            strInput = strInput.Trim().ToLower();
            while (strInput.Contains("  "))
                strInput = strInput.Replace("  ", " ");
            string strResult = "";
            string[] arrResult = strInput.Split(' ');
            foreach (string item in arrResult)
                strResult += item.Substring(0, 1).ToUpper() + item.Substring(1) + " ";
            return strResult.TrimEnd();
        }
       
        private void rbtTang_CheckedChanged(object sender, EventArgs e)
        {

        }

        public void btThucHien_Click(object sender, EventArgs e)
        {
           
            
            if(rbtTang.Checked == true)
            {
              
                for ( i = 0; i < n-1; i=i+2)
                    for (int j = i + 2; i < n; j++)
                    {
                        if (a[i] > a[j])
                        {
                             temp = a[i];
                            a[i] = a[j];
                            a[j] = temp;
                        }
                    }
                s = "";
                for ( i = 0; i <= n; i++)
                    s = s + " " + s[i].ToString();
                tbKetQua.Text = s.Trim();
            }
        }

        public void btNhapMang_Click(object sender, EventArgs e)
        {
            s = tbNhapMang.Text;
           
             i = s.LastIndexOf(" ");
            while (i != -1)
            {
                s1 = s.Substring(i);
                s = s.Substring(0, i);
                a[n] = Convert.ToInt32(s1);
                n++;
                i = s.LastIndexOf(" ");
            }
           a[n] = Convert.ToInt32(s);
            s= " ";
            for ( i = n; i >= 0 ; i-- )
            {
                s = s + " " + a[i].ToString();

            }
            tbKetQua.Text = s.Trim();
            
            
        }

        private void btReset_Click(object sender, EventArgs e)
        {
            n = 0;
            s = "   ";
            tbNhapMang.ResetText();
            tbKetQua.ResetText();
        }

        private void btThoat_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}
Phạm Hoàng Tuấn viết 19:18 ngày 30/09/2018

for (int j = i + 2; i < n; j++)

Sao lại là i<n mà không fai là j<n, biến j cứ tăng hoài nên vượt quá số lượng phần tử của mảng thôi e!

Thuật toán của e cũng không đúng nữa, a sửa lại chạy có vẻ ổn khi sắp tăng, e làm tương tự cho trường hợp sắp xếp giảm

 public Form1()
        {
            InitializeComponent();
        }

        int[] a = new int[100];
        int n = 0, temp, i;
        string s, s1;
        private string StandardString(string strInput)
        {
            strInput = strInput.Trim().ToLower();
            while (strInput.Contains("  "))
                strInput = strInput.Replace("  ", " ");
            string strResult = "";
            string[] arrResult = strInput.Split(' ');
            foreach (string item in arrResult)
                strResult += item.Substring(0, 1).ToUpper() + item.Substring(1) + " ";
            return strResult.TrimEnd();
        }

        private void btThucHien_Click(object sender, EventArgs e)
        {
            for (i = 0; i < n ; i++)
            {
                for (int j = i + 1; j <= n; j++)
                {
                    if (a[i] > a[j])
                    {
                        temp = a[i];
                        a[i] = a[j];
                        a[j] = temp;
                    }
                }
            }
            s = "";
            for (i = 0; i <= n; i++)
                s = s + " " + a[i].ToString();
            tbKetQua.Text = s.Trim();
        }

        private void btNhapMang_Click(object sender, EventArgs e)
        {
            s = tbNhapMang.Text;
            i = s.LastIndexOf(" ");
            while (i != -1)
            {
                s1 = s.Substring(i);
                s = s.Substring(0, i);
                a[n] = Convert.ToInt32(s1);
                n++;
                i = s.LastIndexOf(" ");
            }
            a[n] = Convert.ToInt32(s);
            s = " ";
            for (i = n; i >= 0; i--)
            {
                s = s + " " + a[i].ToString();

            }
            tbKetQua.Text = s.Trim();
        }

Bài liên quan
0