好的我正在尝试使用数组执行以下操作。
说我有一个数组
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]);
}
}
}
答案 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的目标数组。那是对的。
但是你的程序中有几个问题。
您将index
之前的所有部分复制到perro
。由于perro
是您的目标数组(比原始数组大),您必须确保将所有内容复制到它。但相反,您只需复制index
之前的部分。
您希望将2放在索引1
处。但你写了index=2
。这意味着1
和4
都将连续复制到perro
。您的perro
将如下所示:
┌─┬─┬─┬─┬─┬─┐ │1│4│0│0│0│0│ └─┴─┴─┴─┴─┴─┘ 0 1 2 3 4 5
这意味着您没有将2
放在您想要的位置。该地点由4
。
您尝试将index
之后的数字复制到biggie
。但是你使用red
这样做。在循环的每次迭代中,再次设置red=0
。因此,biggie
中唯一会改变的地方是0
,该地方将获得所有数字,最后一个将保留。因此,您的biggie
将是:
┌─┬─┬─┬─┬─┐ │8│0│0│0│0│ └─┴─┴─┴─┴─┘ 0 1 2 3 4
您没有将2
放在任何地方!
您不会将内容从biggie
复制到perro
,因此您不会将阵列的所有部分放在一起。
让我们再看一下我们的before
和after
数组:
<强>之前强>
┌─┬─┬─┬─┬─┐ │1│4│3│7│8│ └─┴─┴─┴─┴─┘ 0 1 2 3 4
<强>后强>
┌─┬─┬─┬─┬─┬─┐ │1│2│4│3│7│8│ └─┴─┴─┴─┴─┴─┘ 0 1 2 3 4 5
首先,我们必须记住,我们要更改的index
是1
,而不是2
。现在看看after
数组。您注意到有三种类型的数字:
1
)2
)4
,3
,7
,8
)我们如何知道哪些原始数字“停留”以及哪些“移动”?这很简单。索引小于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
索引处!
注意:请为变量提供有意义的名称。我不确定,这些名字在您的母语中是否有意义,但index
和biggie
似乎是英语单词,但它们无助于我们理解这些变量的作用。尝试使用描述变量函数的变量名称。与red
,original
,target
,temporary
等相同。
答案 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]);
}
}