Решить задачу, используя 1 массив

225
09 апреля 2018, 02:30

Привет. Написал небольшую програмку.

Условие: "Дан массив размера n. После каждого отрицательного элемента массива вставить элемент с нулевым значением".

Я решил её, используя 2 массива ArrayList. Меня интересует, возможно ли получить решение, используя только 1 массив?

Код программы:

public class Task_108 {
public void Task108(){
    System.out.println("Input size of array: ");
    Scanner scn = new Scanner(System.in);
    int sizeArr = scn.nextInt();
    ArrayList<Integer> ArrIntNum = new ArrayList<>(sizeArr);            // Declare array
    Random rnd = new Random();
    int val;
    // Filling array random elements from -20 to 20
    for(int i = 0; i < sizeArr; i++){
        val = -20 + rnd.nextInt(41);
        ArrIntNum.add(i, val);
    }
    // Output array on the screen
    System.out.println(ArrIntNum.toString());
    ArrayList<Integer> ArrWithZeroAftNegVal = new ArrayList<>();        // Declare once more array
    // Adding zero after every negative number in array ArrIntNum and write in array ArrWithZeroAftNegVal
    for(int i = 0; i < sizeArr; i ++){
        if(ArrIntNum.get(i) < 0) {
            ArrWithZeroAftNegVal.add(ArrIntNum.get(i));
            ArrWithZeroAftNegVal.add(0);
        }
        else
            ArrWithZeroAftNegVal.add(ArrIntNum.get(i));
    }
    // Output edited array on the screen
    System.out.println(ArrWithZeroAftNegVal.toString());
    }
}
Answer 1

Если под массивом мы подразумеваем только голый массив, то можно, если до создания массива известно кол-во элементов. Если, как в вашем случае, под массивом подразумевается ArrayList, то реализация элементарна.

Answer 2

Вы путаете понятие массива и списка. В вашем примере используется список. У списков есть метод для добавления нового элемента по индексу. Для этого вы можете воспользоваться перегруженным методом add:

List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
// число 0 встанет на место второго элемента в списке
numbers.add(2, 0);
numbers.forEach(System.out::print);

Но более красивое решение можно получить с двумя списками:

List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(-3);
numbers.add(4);
numbers.add(-2);
numbers.add(5);
numbers.add(4);
numbers = numbers
        .stream()
        .flatMap(number -> number < 0 ? Stream.of(number, 0) : Stream.of(number))
        .collect(Collectors.toList());
numbers.forEach(System.out::print);
READ ALSO
Gradle intellij отсутствует Store generated project files externall

Gradle intellij отсутствует Store generated project files externall

Здравствуйте уважаемые, такая проблемаОсваиваю градл, запускаю градл проект с интелии и у меня отсутствует Store generated project files externally

242
Созданные мною процессы завершаются на Win Server 2012 R2. Java

Созданные мною процессы завершаются на Win Server 2012 R2. Java

У меня есть приложение, которое при старте создаёт вспомогательные процессы, которые общаются с помощью RMI

206
из python в java

из python в java

Помогите конвертировать код из python в java

234
Подскажите механизм работы хеш-функции

Подскажите механизм работы хеш-функции

Не могу разобраться в работе хеш-функцииНе могли вы подсказать основные принципы?

192