вставить число в фиксированной позиции в существующий массив, преобразовать псевдо-код в исполняемый код - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь получить исполняемый фрагмент кода из этого фрагмента псевдокода, который мой учитель предоставил в классе, чтобы я мог шаг за шагом увидеть, как он работает, но из-за моих ограниченных знаний в Java (меньше, чем неделю), я не могу преобразовать это в исполняемые коды из данной структуры, пожалуйста, помогите.

ниже псевдокод: моя цель - добавить 6 к 4-й позиции в этом массиве: arr = [1,3,5,7,8]

public class Class3 {
    public static int[] insert(int[]x,int item,int position){
        int[] newX= new int[x.length+1];
        position =Math.min(x.length, position);
        for (int i=0;i<position;i++){
            newX[i]=x[i];
        }
        newX[position]=item;
        for (int indexinOld)=position.indexinOld<x.length;indexinOld++){
            newX[indexinOld+1]=x[indexinOld]
        }

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Привет, как указано в комментариях, вам просто нужно вернуть newX в качестве нового массива. Задача вашего учителя требует три шага для ее решения:

  1. Создать новый массив с длиной, которая может содержать добавленные элементы
  2. добавлять все старые элементы до позиции, в которую вы хотите добавить новый элемент из старого массива в новый массив
  3. Добавьте свой элемент к нему и заполните новый массив оставшимися элементами из старого массива.

    public static int[] insert(int[]x,int item,int position){
        int[] newX= new int[x.length+1];
        position =Math.min(x.length, position);
        for (int i=0;i<position;i++){
            newX[i]=x[i];
        }
        newX[position]=item;
        for (int indexinOld=position+1;indexinOld<x.length+1;indexinOld++){
            newX[indexinOld]=x[indexinOld-1];
        }
        return newX;
    }
    

Это рабочая функция, которую вы хотели иметь. Я только что отредактировал ваш второй цикл for и вернул newX-Array в качестве массива.

Для других читателей есть гораздо более простой способ без использования for-loop для этого (и без использования ArrayLists)

Я использовал это:

public static int[] insert(int[]x,int item,int position){
    int[] newX= new int[x.length+1];
    position =Math.min(x.length, position);
    System.arraycopy(x, 0, newX, 0, position);
    newX[position]=item;
    System.arraycopy(x, position, newX, position+1, x.length-position);
    return newX;
}
0 голосов
/ 06 мая 2018

Самый простой способ - использовать ArrayList вот так ...

public static int [] insert(int[]x,int item,int position)
{
    ArrayList <Integer> list = new ArrayList <> ( Arrays.asList(x) );

    list.add(position, item);

    return ArrayUtils.toPrimitive(list.toArray(new Integer [0]));
}

Однако, поскольку вы новичок в Java, я не предлагаю это решение. Альтернативой здесь является решение без ArrayList ...

public static int[] insert(int [] oldArray, int value, int insertIndex)
{
    int [] newArray = new int[oldArray.length + 1];

    for(int index = 0; index < newArray.length - 1; ++index)
    {
        newArray[index < insertIndex ? index : index + 1] = oldArray[index];
    }

    newArray[insertIndex] = value;

    return newArray;
}

Некоторые пояснения: сначала вы создаете второй массив с еще одним элементом, чем исходный элемент. Во-вторых, вы инициализируете все слоты значениями из исходного массива. Если счетчик равен позиции, в которую должно быть вставлено значение, этот алгоритм пропускает этот слот. После завершения цикла вы инициализируете слот в позиции вставки с заданным значением.

...