int  [] num = new int[5]{1,3,5,7,9};
上面是一个数组,这时我要向数组里面的第三个位置插入元素2,现在的办法是,把第三个位置到最后一个位置的元素都向后移动,以便空出第三个位置,然后插入元素2,因为移动要从最后一个位置开始,依次向后挪动,即 int【5】=int【4】。,这时便会编译报错,索引超出范围,请问该如何解决这个问题呢?
   还有   这个数组换成是arraylist也是一样的,因为最后一个元素的值要赋给后面的一个,但是后面的一个是不存在的,这就产生一个矛盾了,但是不这样又怎么能实现数组元素的向后移动呢?

解决方案 »

  1.   


        public partial class Form1 : Form
        {        //声明ArrayList  arr
            private System.Collections.ArrayList arr = new ArrayList();
            public Form1()
            {
                InitializeComponent();            //窗体初始化时,初始化 arr,赋值为1,2,3,4,5,
                for (int i = 0; i <= 4; i++)
                {
                    arr.Add(i);
                }
            }
            //显示ArrayList中的所有元素
            private void button2_Click(object sender, EventArgs e)
            {            string temp = "";
                for (int i = 0; i <= arr.Count - 1; i++)
                {
                    temp = temp + Convert.ToString(arr[i]) + ",";
                }            label1.Text = temp;
            }     
            //插入元素。ArrayList.Insert(Index,Value).在第三个位置,插入10
            private void button1_Click(object sender, EventArgs e)
            {
                arr.Insert(2, 10);
            
            }         
      

  2.   


        public partial class Form1 : Form
        {        //声明ArrayList  arr
            private System.Collections.ArrayList arr = new ArrayList();
            public Form1()
            {
                InitializeComponent();            //窗体初始化时,初始化 arr,赋值为1,2,3,4,5,
                for (int i = 0; i <= 4; i++)
                {
                    arr.Add(i);
                }
            }
            //显示ArrayList中的所有元素
            private void button2_Click(object sender, EventArgs e)
            {            string temp = "";
                for (int i = 0; i <= arr.Count - 1; i++)
                {
                    temp = temp + Convert.ToString(arr[i]) + ",";
                }            label1.Text = temp;
            }     
            //插入元素。ArrayList.Insert(Index,Value).在第三个位置,插入10
            private void button1_Click(object sender, EventArgs e)
            {
                arr.Insert(2, 10);
            
            }         
      

  3.   

         我想要的是用线性表插入的方法实现哦,不用内置的方法。
    各位帮我看一下下面的insert方法的问题,data[j+1] = data[j];这行代码总是会报索引出错,因为data[j+1]这个位置是不存在的。
    再次万分感谢!using System;
           /// <summary>
           /// 定义顺序线性表类实现相关的功能
           /// </summary>
          class SequenceList
          {
                 int maxsize;  //线性表的容量
                 object[] data; //用于存储顺序表的元素
                 int last; //指示线性表中的最后一个元素
     
                 //索引器,用于读取或设置线性表的值
                public object this[int index]
               {
                         get
                         {
                               return data[index];
                          } 
                          set
                          {
                               data[index]=value;
                           }
                 }
                //用于获取最后位置的属性
                public int Last
               {
                          get
                          {
                                return last;
                          }
                 }
                  //用于获取线性表容量的属性
                  public int Maxsize
                  {
                        get
                        {
                               return this.maxsize;
                        }
                       set
                        {
                                this.maxsize = value;
                         }
                  }
                 //构造方法,初始化线性表
                  public SequenceList(int size)
                  {
                           this.maxsize = size;
                           data = new object[size];
                           last = data.length -1;
                   }
                  //求线性表长度
                   public int GetLength()
                    {
                              return last+1;
                     }
                   //清空线性表
                  public void Clear()
                  {
                             last = -1;
                  }
                 //判断线性表是否满了
                   public bool IsFull()
                   {
                         if(last == maxsize - 1 )
                                 return true;
                        else
                                 return false;
                   }
                  //判断线性表是否为空
                 public bool IsEmpty()
                 {
                            if(last == -1)
                                  return true;
                            else
                                   return false;
                   } 
                  //向线性表末尾追加元素
                    public void Append(object e)
                   {
                           if(IsFull())
                           {
                                 Console.WriteLine("线性表已满!");
                                 return;
                            }
                           data[++last] = e;
                     }
                   //在顺序表第i个位置插入元素
                    public void Insert(object e,int i)
                   {
                        if(IsFull())
                        {
                                 Console.WriteLine("线性表已满,无法插入!");
                                 return;
                         }
                         if(i<1||i>last+2)
                         {
                               Console.WriteLine("插入位置错误!");
                                return;
                          }
                         if(i == last + 2)
                         {
                               data[last+1] = e;
                          }
                         else
                         {
                                 for(int j = last;j>=i-1;j--)
                                 {
                                       data[j+1] = data[j];
                                  }
                                 data[i - 1] = e;
                          }
                         ++last;
                    }
                                                  } 
    class Test
            {
                        static void Main()
                         {
                               SequenceList list = new SequenceList(5);
                               for(int i=1;i<=5;i++)
                                 {
                                     data[i]=i;
                                 }
                               list.Insert(5,2);
                               
                         }
            }