如何在java中的数组中插入一个数字

时间:2015-02-16 17:44:09

标签: java arrays

好的我正在尝试使用数组执行以下操作。

说我有一个数组

1 4 3 7 8

并且在索引1处我想放置一个2以获得以下

1 2 4 3 7 8

我该如何做到这一点我想我必须创建一个数组来保存索引之前的所有内容,一个数组可以保留索引之后的所有内容。

在数组中添加一个元素,其中包含索引之前的所有内容。创建一个新的更长的数组,其中包含索引之前的所有内容以及索引之后的所有内容。

但我似乎无法做到。这就是我试过的。

//这个程序将测试如何用更多东西替换数组

public class Raton
  {
     public static void main(String[] args)
 {
        int[] gato={1,4,3,7,8};
        int[] perro = new int[gato.length+1];
        int[] biggie = new int[gato.length];

         int index=2; //store item index 2

    System.out.println("the contents of gato are ");

    for(int i=0; i<gato.length;i++)
    {
        System.out.println(gato[i]);
    }

    for(int i=0;i<gato.length;i++)
    {
        if(i<index)
        {
            perro[i]=gato[i];
        }
        else
        {
            int red=0;
            biggie[red]=gato[i];
            red++;
        }
    }

    //put two in the new place

         for(int i=0;i<perro.length;i++)
         {
           System.out.println(" \n the contents of peero are " + perro[i]);

      }
          for(int i=0; i<biggie.length;i++)
        {
        System.out.println("\nthe contents of biggie are " + biggie[i]);
        }
    }
}

4 个答案:

答案 0 :(得分:0)

使用ArrayList<Integer>代替数组,它们允许轻松插入新元素,而arraylists也允许在特定索引处使用。

int[] gato={1,4,3,7,8};
List<Integer> list = new ArrayList<>(Arrays.asList(gato));
list.add(1, 2);

答案 1 :(得分:0)

首先,你需要同时获得新的数字和新索引。

int newNumber = 2;
int newIndex = 1;

创建大小为+ 1的旧数组

的新数组
int[] gato = {1,4,3,7,8}; //old array
int[] perro = new int[gato.length+1]; //new array

然后跟踪两个计数器。旧数组为j,新数组为i

int j = 0;
for(int i = 0; i<perro.length; i++){
    if(i == newIndex){
        perro[i] = newNumber;
    }
    else{
        perro[i] = gato[j];
        j++;
    }
}

这是一个test run。此解决方案假设您有一个约束,您只能使用数组(而不是ArrayList或Java中的任何其他预构建类)

答案 2 :(得分:0)

尝试查看“之前”和“之后”数组:

<强>之前

┌─┬─┬─┬─┬─┐
│1│4│3│7│8│
└─┴─┴─┴─┴─┘
 0 1 2 3 4

<强>后

┌─┬─┬─┬─┬─┬─┐
│1│2│4│3│7│8│
└─┴─┴─┴─┴─┴─┘
 0 1 2 3 4 5

您已经注意到的一件事是您需要一个比原始数组大1的目标数组。那是对的。

但是你的程序中有几个问题。

  1. 您将index之前的所有部分复制到perro。由于perro是您的目标数组(比原始数组大),您必须确保将所有内容复制到它。但相反,您只需复制index之前的部分。

  2. 您希望将2放在索引1处。但你写了index=2。这意味着14都将连续复制到perro。您的perro将如下所示:

    ┌─┬─┬─┬─┬─┬─┐
    │1│4│0│0│0│0│
    └─┴─┴─┴─┴─┴─┘
     0 1 2 3 4 5

    这意味着您没有将2放在您想要的位置。该地点由4

  3. 拍摄
  4. 您尝试将index之后的数字复制到biggie。但是你使用red这样做。在循环的每次迭代中,再次设置red=0。因此,biggie中唯一会改变的地方是0,该地方将获得所有数字,最后一个将保留。因此,您的biggie将是:

    ┌─┬─┬─┬─┬─┐
    │8│0│0│0│0│
    └─┴─┴─┴─┴─┘
     0 1 2 3 4
  5. 您没有将2放在任何地方!

  6. 您不会将内容从biggie复制到perro,因此您不会将阵列的所有部分放在一起。

  7. 让我们再看一下我们的beforeafter数组:

    <强>之前

    ┌─┬─┬─┬─┬─┐
    │1│4│3│7│8│
    └─┴─┴─┴─┴─┘
     0 1 2 3 4

    <强>后

    ┌─┬─┬─┬─┬─┬─┐
    │1│2│4│3│7│8│
    └─┴─┴─┴─┴─┴─┘
     0 1 2 3 4 5

    首先,我们必须记住,我们要更改的index1,而不是2。现在看看after数组。您注意到有三种类型的数字:

    • 留在同一个地方的人(1
    • 已添加的内容(2
    • 将一个地方向右移动的地方(4378

    我们如何知道哪些原始数字“停留”以及哪些“移动”?这很简单。索引小于index(请记住,它是1!),即索引为0的那个,保留。

    所有其他人(包括index本身的那个!)必须搬到新的地方。这个地方是他们的老指数+1。

    所以你的程序应该是这样的:

    • 准备一个大小比原始大一的数组(如perro)。
    • 循环旧数组中的所有索引。假设循环变量为i

      • 如果我小于 index,请将索引i处的数字从原始数组复制到同一索引处的新数组,即{ {1}}。
      • 对于所有其他情况,请将索引i处的数字从原始数组复制到新数组,但要移动一个位置。也就是i。这里不需要另一个变量或i+1

      完成该循环后,您的数组将如下所示:

      ┌─┬─┬─┬─┬─┬─┐
      │1│0│4│3│7│8│
      └─┴─┴─┴─┴─┴─┘
       0 1 2 3 4 5
    • 现在不要忘记将实际的++放在2索引处!

    注意:请为变量提供有意义的名称。我不确定,这些名字在您的母语中是否有意义,但indexbiggie似乎是英语单词,但它们无助于我们理解这些变量的作用。尝试使用描述变量函数的变量名称。与redoriginaltargettemporary等相同。

答案 3 :(得分:0)

我认为这是一个简洁明了的解决方案:

 public static void main(String[] args) {
    int[] gato = {1, 4, 3, 7, 8};


    int index = 2; //store item index 2

    System.out.println("the contents of gato are ");

    for (int i = 0; i < gato.length; i++) {
        System.out.println(gato[i]);
    }
    gato = Arrays.copyOf(gato, gato.length + 1);

    for (int i = gato.length - 1; i > index; i--) {
        gato[i] = gato[i - 1];
    }
    //put the element in the array
    gato[index] = 2;

    for (int i = 0; i < gato.length; i++) {
        System.out.println(gato[i]);
    }
}