Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不从列表中删除任何项的情况下在数组中添加项?_Java_Arrays - Fatal编程技术网

Java 如何在不从列表中删除任何项的情况下在数组中添加项?

Java 如何在不从列表中删除任何项的情况下在数组中添加项?,java,arrays,Java,Arrays,我有一个数组,我想在这个数组的第二个索引处添加一个新元素,但不从列表中删除任何其他项 Current array: ["AA", "BB", "CC", "DD"] 在第二位插入11后 New Array: ["AA", "11", "BB", "CC", "DD"] 这就是我正在做的,但它将从数组中删除最后一条记录 private void inserItem(int pos, String value) { String[] result = new String

我有一个数组,我想在这个数组的第二个索引处添加一个新元素,但不从列表中删除任何其他项

Current array: 
["AA", "BB", "CC", "DD"]
在第二位插入
11

New Array:
["AA", "11", "BB", "CC", "DD"]
这就是我正在做的,但它将从数组中删除最后一条记录

   private void inserItem(int pos, String value) {
        String[] result = new String[itemsArray.length];
        for(int i = 0; i < pos; i++)
            result[i] = itemsArray[i];

        result[pos] = value;
        for(int i = pos + 1; i < itemsArray.length; i++)
            result[i] = itemsArray[i-1];

        itemsArray= result;
 }

从技术上讲,您正在添加一个元素 旧数组有3个元素,您希望再添加1个元素,因此您应该创建大小为4的新数组,但尚未完成。。。。 尝试字符串结果[]=新字符串[itemsArray.length+1] 这可能会解决你的问题

您只需使用ArrayList即可解决所有问题


快乐编码:)

新阵列将比当前阵列多出一项:

String[] result = new String[itemsArray.length + 1];
两个错误

private void inserItem(int pos, String value) {
    String[] result = new String[itemsArray.length + 1];//new array with old size+1
    for(int i = 0; i < pos; i++)
        result[i] = itemsArray[i];

    result[pos] = value;
    for(int i = pos + 1; i < result.length; i++)//change loop termination
        result[i] = itemsArray[i-1];

    itemsArray= result;
}
private void inserItem(int pos,字符串值){
String[]结果=新字符串[itemsArray.length+1];//旧大小为+1的新数组
对于(int i=0;i
一旦创建数组,就不能更改数组的大小

您应该使用
LinkedList
及其
add(int index,E元素)
方法:

public void add(int-index,E-element)在 此列表中的指定位置。移动当前位于的元素 该位置(如果有)和右侧的任何后续元素(添加 一个是他们的指数)

String[]数组={“AA”、“BB”、“CC”、“DD”};
LinkedList=新的LinkedList(Arrays.asList(array));
列表。添加(1,“11”);
请注意,您应该使用LinkedList,而不是ArrayList,因为带有移位的添加操作对于ArrayList更为昂贵

另一个要考虑的是,我只使用数组来填充Link表。我并不是建议您在每次插入项目时都这样做。您应该完全停止使用数组,只使用LinkedList。

string[]itemsArray={“AA”、“BB”、“CC”、“DD”};
string[] itemsArray = { "AA", "BB", "CC", "DD" };
private String[] inserItem(int pos, String value)
{
        String[] result = new String[itemsArray.Length + 1];

        for (int i = 0, idx = 0; i < itemsArray.Length; i++)
        {
            if (idx == pos)
            {
                result[idx] = value;
                idx++;
                result[idx] = itemsArray[i];
                idx++;
            }
            else
            {
                result[idx] = itemsArray[i];
                idx++;
            }
        }

        return result;
}
私有字符串[]inserItem(int-pos,字符串值) { 字符串[]结果=新字符串[itemsArray.Length+1]; for(inti=0,idx=0;i
在函数中创建新数组时,请使用(当前长度+1)创建它。我已经在下面编辑了你的代码

private void insertItem(int pos, String value) {
        String[] result = new String[itemsArray.length + 1];
        for(int i = 0; i < pos; i++)
            result[i] = itemsArray[i];

        result[pos] = value;
        for(int i = pos + 1; i < itemsArray.length + 1; i++)
            result[i] = itemsArray[i-1];

        itemsArray= result;
 }
private void插入项(int-pos,字符串值){
字符串[]结果=新字符串[itemsArray.length+1];
对于(int i=0;i

但是,请注意,您在这里所做的并不是扩展原始数组。而是从原始数组和新添加元素的值创建一个新数组。

Change String[]result=new String[itemsArray.length];to String[]结果=新字符串[itemsArray.length+1]。。。也许在其他地方,你有什么理由不能使用
ArrayList
?只需使用方法
ArrayList.add(index,String)
。请明确,在创建数组后,您无法更改数组的大小,因此您尝试执行的操作永远不会起作用。你应该改用LinkedLisy。你的评论“增大大小”有点误导人。您正在创建所需大小的新阵列,而不是增加现有阵列的大小。我喜欢此解决方案。您可能想向OP演示如何从
链接列表
中获取
字符串[]
,以防他们真的需要一个
字符串数组
,使用
数组(T[]a)
。我想您的解决方案可以很好地处理这些情况。其他解决方案类似于“newstring[itemsArray.length+1]”,但我觉得我们应该有一个通用的代码。如果我们需要向数组中添加不同数量的数据,那么每次我们都不能添加+1、+2。我们不能概括这行代码,如果我需要添加两个或三个额外的值呢?每次我都不能对数组长度做+1、+2、+3。好吧,插入项只插入一个项。@coderkemp OP说他需要在给定位置放置一个元素。@Doc我在考虑根据输入添加元素,很想知道这是如何工作的。我知道链表可能是创建我们想要的存储的一个很好的选择。
string[] itemsArray = { "AA", "BB", "CC", "DD" };
private String[] inserItem(int pos, String value)
{
        String[] result = new String[itemsArray.Length + 1];

        for (int i = 0, idx = 0; i < itemsArray.Length; i++)
        {
            if (idx == pos)
            {
                result[idx] = value;
                idx++;
                result[idx] = itemsArray[i];
                idx++;
            }
            else
            {
                result[idx] = itemsArray[i];
                idx++;
            }
        }

        return result;
}
private void insertItem(int pos, String value) {
        String[] result = new String[itemsArray.length + 1];
        for(int i = 0; i < pos; i++)
            result[i] = itemsArray[i];

        result[pos] = value;
        for(int i = pos + 1; i < itemsArray.length + 1; i++)
            result[i] = itemsArray[i-1];

        itemsArray= result;
 }