因此,对于像我这样的初学者来说,这个问题有些先进,这就是为什么我希望您可以忽略我的错误。
我们需要创建一个采用数组的方法,该值是我要放置在数组中的值,而索引值(空格)是在数组中。
因为我的老师并没有具体说明她想要的东西,所以她没有指定数组必须为空还是满,这是我在本练习中最困惑的地方。
静态方法必须命名为:
addAtIndex( int [] a, int value, int index)
并执行以下操作:
如果数组中的最后一个空格为0或为空,并且我想在一个已经占用的空格中放置一个新的整数值,则需要将每个元素向右移动并按顺序保留该空格能够做到这一点。
如果最后一个空格已被整数值占用,则需要“调整”数组的大小并腾出更多空间,以便可以继续输入更多的整数值。我知道您无法调整数组的大小,甚至无法保持所有元素的完整性,因此我需要创建一个更大的数组来做到这一点。
我用Java编程不到两个月,所以我觉得这很困难。
我已经能够创建一个空数组,并且已经使用给定的参数在数组中输入了不同的数值。所有这些都是在public static void main中完成的,而不是在方法中完成的。我似乎无法用一种方法来执行此操作,尤其是我不知道如何将数组中的所有内容向右移动。
import java.util.Arrays;
import java.util.Scanner;
public class Array{
public static void main (String args []){
Scanner input = new Scanner(System.in);
int [] array = new int[10];
for (int x = 0; x <= 9; x++){
int index = input.nextInt();
int value = (int)(Math.random()*50);
//move elements below insertion point.
for (int i = array.length-1; i > index; i--){
array[i] = array[i-1];
}
//insert new value
array[index] = value;
}
System.out.println(Arrays.toString(array));
}
}
这当然与老师要我做的事情相去甚远。我在这里所做的只是创建一个数组,在我选择的索引中输入随机整数并打印出来。我需要一些帮助。
答案 0 :(得分:1)
这就是我以最简约的方式做到的方式。
您可能需要进行调整,因为我没有花太多时间。
但是,它应该可以给您带来很大的帮助。
记住一个int[]
数组不能为空。因此,我将“空”值设为零。
按照评论!
static int[] addAtIndex(
final int[] array,
final int value,
final int index) {
if (array == null || array.length == 0) {
// We cannot do anything.
// Simply return to the caller
return array;
}
// This is the array reference holder
int[] localArray = array;
// Get the last element of the array
final int last = localArray[localArray.length - 1];
// Is the last element 0? Remember an int array cannot contain nulls
if (last == 0) {
if (array[index] != 0) {
// We need to shift everything to the right
// to give space to the new element
shiftRight(localArray, index);
}
} else {
// Create a bigger array of length = actualLength + 1
// and assign it to the reference holder
localArray = new int[array.length + 1];
// Copy the array elements to the new array, leaving a space
// for the new element
copyArrayAndLeaveSpace(index, array, localArray);
}
// Assign the new value
localArray[index] = value;
// Return the modified array reference
return localArray;
}
static void shiftRight(
final int[] array,
final int index) {
System.arraycopy(array, index, array, index + 1, array.length - index - 1);
}
static void copyArrayAndLeaveSpace(
final int index,
final int[] array,
final int[] newArray) {
System.arraycopy(array, 0, newArray, 0, index);
System.arraycopy(array, index, newArray, index + 1, array.length - index);
}
用法
final int[] nums = {1, 2, 3, 4, 5, 6, 8, 9, 0};
final int[] result = addAtIndex(nums, 7, 4);
输出:[1, 2, 3, 4, 7, 5, 6, 8, 9]
final int[] nums = {1, 2, 3, 4, 5, 6, 8, 9, 1};
final int[] result = addAtIndex(nums, 7, 4);
输出:[1, 2, 3, 4, 7, 5, 6, 8, 9, 1]