Java在固定长度的数组里加入一个数

比如定义了一个数组a[9],输入了9个数进去,把它们排序了,现在又想添加一个数进去,但是报错,说溢出,如何解决?... 比如定义了一个数组a[9],输入了9个数进去,把它们排序了,现在又想添加一个数进去,但是报错,说溢出,如何解决? 展开
 我来答
风恋枫123
2016-11-16 · 超过16用户采纳过TA的回答
知道答主
回答量:29
采纳率:0%
帮助的人:22万
展开全部
题目:给定一个有序的数组{13, 15, 19, 28, 33, 45, 78, 106},如果往该数组中存储一个元素,并保证这个数组还是有序的,那么这个元素的存储的角标如何获取?并打印出插入后的数组
packagecom.ljy.interviewQuestion;
/**
 * 题目:给定一个有序的数组{13, 15, 19, 28, 33, 45, 78, 106},
 * 如果往该数组中存储一个元素50,并保证这个数组还是有序的,
 * 那么这个元素的存储的角标如何获取?
 * 思路:利用二分查找法,将最后返回min值即可。
 * 步骤: 1)定义arr,key来存储题目中的值,定义max,min和mid来分别记录二分区间
 *       2)使用while循环结构来控制,循环条件为 min <= max,否则返回min
 * @author liaojianya
 * 2016-11-16
 */
 
publicclass InsertOrderedArr
{
    publicstaticvoid main(String[] args)
    {
        int[] arr = newint[] {13, 15, 19, 28, 33, 45, 78, 106};
        int key = 50;
        int index = getInsertIndex(arr, key);
        System.out.println(key + "应该插入到数组的位置下标为: " + index);
        
        int[] arr1 = newint[arr.length + 1];
        insertArr(arr, arr1, key, index);
        printArr(arr1);
    }
    //打印数组
    privatestaticvoid printArr(int[] arr1)
    {
        System.out.print("插入元素后的数组为: [");
        for(int i = 0; i < arr1.length; i++)
        {
            if(i != arr1.length - 1)
            {
                System.out.print(arr1[i] + ", ");
            }
            else
            {
                System.out.println(arr1[i] + "]");
            }
        }
    }
    
    publicstaticint getInsertIndex(int[] arr, int key)
    {
        int min = 0;
        int max = arr.length - 1;
        while(min <= max)
        {
            //右移折半
            int mid = (min + max) >> 1;
            //如果key值比中间值大,则所要插入位置在数组的右半边
            if(key > arr[mid])
            {
                min = mid + 1;
            }
            //如果key值比中间值小,则所要插入位置在数组的左半边
            elseif(key < arr[mid])
            {
                max = mid - 1; 
            }
            //key值和中间值一样大,则直接返回index = mid
            else
            {
                return mid;
            }
        }
        //如果下标min > max,则返回min位置即为所要插入的位置
        return min;
    }
    /*
     * 步骤:
     * 循环遍历arr,如果i < index,则arr1[i] = arr[i];
     *                如果i == index,则arr1[i] = key;
     *                否则,arr1[i] = arr[i-1];
     * 
     */
    publicstaticvoid insertArr(int[] arr, int[] arr1, int key, int index)
    {
 
        for(int i = 0; i < arr1.length; i++)
        {
            if (i < index)
            {
                arr1[i] = arr[i];
            }
            elseif(i == index)
            {
                arr1[i] = key;
            }
            else
            {
                arr1[i] = arr[i-1];
            }
        }
    }
}
程序输出:

用不定长的数组直接初始化那些数组元素,上面我举例说明了一下,希望能够帮到楼主~望采纳~~~

百度网友b888ced
2016-11-16 · TA获得超过203个赞
知道小有建树答主
回答量:376
采纳率:50%
帮助的人:71万
展开全部
先把数组长度读取出来,然后在增加一个,然后就可以把数增加进去了。
追问
可不可以把代码写个例子出来,麻烦你了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
k2101170
推荐于2017-12-16 · TA获得超过416个赞
知道小有建树答主
回答量:367
采纳率:66%
帮助的人:144万
展开全部
数组一但定义好之后,长度是不能修改的,除非你用另一个长一点的数组去替换掉。
int[] a = { 1, 2, 3, 4, 5 };
System.out.println(a[4]);
a = org.apache.commons.lang.ArrayUtils.add(a, 6);
System.out.println(a[5]);
追问
我把a = org.apache.commons.lang.ArrayUtils.add(a, 6);复制到我的码里面,org.apache报错,a = org.apache.commons.lang.ArrayUtils.add(a, 6);是什么意思啊?
追答
org.apache.commons.lang.ArrayUtils.add(a, 6);

这个的意思就是在a中添加一个值为6的元素,并返回一个新的数组。ArrayUtils这个类是在common-lang这个jar包里面的,如果你没有的话,可以换种方式:

int[] a = { 1, 2, 3, 4, 5 }; //原数组,长度为5
int[] b = new int[a.length + 1]; //新数组,长度为a的长度+1
System.arraycopy(a, 0, b, 0, 5); //复制数组,把a复制到b。参数分别为:源数组、源数组开始位置、目标数组、目标数组开始位置、元素个数
b[a.length] = 6;
System.out.println(b[a.length]);
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式