С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/40: Рейтинг темы: голосов - 40, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 15.08.2016
Сообщений: 1

Убрать четные числа из массива, заменив их нулями и переместив в конец массива

15.08.2016, 21:23. Показов 7572. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
убрать четные числа из массива, заменив их нулями и переместить в конец массива
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package array;
class array{
public static void main(String [] args){
 
int array[];
int n = 0;
array = new int [] {1,2,3,4,5,6,7,8,9,10};
 
for (int i = 0; i < array.length; i++){
if (array[i]%2 ==0){
n++;
}
}
}
 
}
как обнулить четные элементы и переместить их в конец массива?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.08.2016, 21:23
Ответы с готовыми решениями:

Добавить в конец массива A все четные по значению элементы массива B
Добавить в конец массива A все четные по значению элементы массива B. В массивах хранятся целые числа. Массивы заполняются исходными...

В Массиве А(10) расположить элементы следующим образом: четные в начало,а не четные в конец массива
2.)составьте программы, изпользуя одномерный массив. В Массиве А(10) расположить элементы следующим образом: четные в начало,а не четные в...

Переместить в начало массива все нечетные числа, а в конец все четные
Переместить в начало все нечетные числа, а в конец все четные.

20
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
16.08.2016, 00:18
Vitalii2727,
зачем тебе n?

if (array[i]%2 ==0){
array[i] = 0;
}

а сортировка почитай http://study-java.ru/uroki-jav... a-massiva/
0
 Аватар для RedPatrick
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 305
16.08.2016, 09:44
Vitalii2727, сортировка не нужна, просто пр проверке сдвигайте элементы массива и заполняйте нулями последние элементы
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Main  {
    public static void main(String args[]) {
        int x[] = {2, 45, 34, 12, 45, 34, 73, 35};
        
        for (int i : x ) System.out.print(i + " ");
        System.out.println();
        
        for (int i = 0; i < x.length; i++){
            if (x[i] % 2 == 0){
                for (int j = i; j < x.length - 1; j++){
                    x[j] = x[j + 1];
                }
                x[x.length - 1] = 0;
            }
        }
        
        
        for (int i : x ) System.out.print(i + " ");
        
        
}
}
0
11 / 2 / 0
Регистрация: 20.07.2016
Сообщений: 35
16.08.2016, 10:17
Vitalii2727, n тут можно использовать так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package array;
 
import java.util.Arrays;
 
class array{
   public static void main(String [] args){
 
      int array[];
      array = new int [] {1,2,4,3,5,6,7,8,9,10};
      
      for (int i = 0; i < array.length; i++){
         if (array[i]%2 == 0){
            int n = 0;
            for (int j = i + 1; j < array.length; j++){
               array[i + n] = array[j];
               n++;
            }
            for (int j = 0; j < array.length; j++) {
                if (array[j]%2 == 0) array[j] = 0; 
            }
         }
      }
      for (int i = 0; i < array.length; i++){
          if (array[i]%2 == 0){
             int n = 0;
             for (int j = i + 1; j < array.length; j++){
                array[i + n] = array[j];
                n++;
             }
          }
       }
      //В консоль для проверки.
      System.out.println(Arrays.toString(array));
   }
}
Но на мой взгляд для подобных задач лучше всего использовать ArrayList:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package array;
 
import java.util.ArrayList;
import java.util.Random;
 
class array{
   public static void main(String [] args){
       
       ArrayList<Integer> array = new ArrayList<>();
       
       Random rd = new Random();
       for (int i = 0; i < rd.nextInt(50) + 51; i++) {
           array.add(rd.nextInt(100) + 1);
       }
       
       int size = array.size();
       System.out.println(size);
       if (size % 2 == 0) size /= 2;
       else {
           size /= 2;
           size += 1;
       }
       
       for (int i = 0; i < array.size(); i++) {
           if (array.get(i) % 2 == 0) array.remove(i--);
       }
       
       for (int i = 0; i < size; i++) array.add(0);
       
       for (Integer i : array) System.out.print(i + " ");
   }
}
Добавлено через 4 минуты
RedPatrick, при запуске Вашего кода во втором массиве число "12" остается =)
При двух четных значениях подряд не срабатывает.

Добавлено через 22 минуты
А у меня не срабатывает при четырех и более четных подряд )
В общем: "Это как-то работает, но надо фиксить" (с)
0
 Аватар для RedPatrick
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 305
16.08.2016, 13:38
Zelmm, да, тут Вы правы.
Java
1
2
3
4
5
6
7
8
9
        for (int i = 0; i < x.length; i++){
            if (x[i] % 2 == 0){
                for (int j = i; j < x.length - 1; j++){
                    x[j] = x[j + 1];
                }
                x[x.length - 1] = 0;
                if (x[i] != 0) i--;
            }
        }
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
16.08.2016, 14:48
Цитата Сообщение от Zelmm Посмотреть сообщение
ArrayList
Вот тут как раз удобнее сделать LinkedList.
0
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
16.08.2016, 14:54
Java
1
2
3
4
int[] array = {13, 1, 3, 4, 4, 8, 11};
int j = 0;
for (int item : array) if (item % 2 == 1) array[j++] = item;
Arrays.fill(array, j, array.length, 0);
0
11 / 2 / 0
Регистрация: 20.07.2016
Сообщений: 35
16.08.2016, 16:58
xoraxax, я еще совсем Junior, так что не обессудьте
Полез читать про отличия ArrayList и LinkedList.

RedPatrick, как Вам удается так легко "раскалывать" подобные задачки? Что сейчас, что мне тогда помогли с этой рекурсивной пермутацией?

Добавлено через 10 минут
xoraxax, прочитал.

Вот тут, на Хабре умный человек говорит, что LinkedList имеет смысл использовать только если планируются частые вставки в середину. Почему, по Вашему мнению, тут уместнее LinkedList?
0
 Аватар для RedPatrick
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 305
16.08.2016, 17:26
Zelmm, читайте больше, программируйте. Поверьте, я сам джуниор с натяжкой.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
16.08.2016, 19:21
Цитата Сообщение от Zelmm Посмотреть сообщение
Почему, по Вашему мнению, тут уместнее LinkedList
Потому что с массивом необходимо несколько раз копировать все элементы, а со связанным списком достаточно связи поменять и все.
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
16.08.2016, 21:25
Чего-то я не понял: просто убрать чётные числа и нули оставить в конце массива? И всё? А отчего бы вот так не сделать:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class RemoveEven {
    public static void main(String[] args) {
        int[] array = {2, 2, 3, 4, 1, 4, 5, 6, 6, 7, 8, 9, 10, 12, 12, 21};
        System.out.println(Arrays.toString(deleteEven(array)));
    }
 
    public static int[] deleteEven(int[] array) {
        int count = 0;
        int[] temp = new int[array.length];
        for (int i = 0; i < array.length; i++) {
            if (array[i] % 2 != 0) {
                temp[count] = array[i];
                count++;
            }
        }
        return temp;
    }
}
Или я чем-то не проникся?..
0
 Аватар для RedPatrick
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 305
17.08.2016, 01:29
HOBATOP, хитрите, про копию массива никто не говорил. ТС просил совсем другое
0
11 / 2 / 0
Регистрация: 20.07.2016
Сообщений: 35
17.08.2016, 08:02
Цитата Сообщение от xoraxax Посмотреть сообщение
а со связанным списком достаточно связи поменять и все
А разве доступ к отдельному элементу LinkedList'a допускается по индексу? Мне казалось, что тут доступ осуществляется за счет итерирования до нужного элемента, а в этом случае мы на больших массивах будем бежать в начало, потом бежать в конец, потом снова в начало и т.п.
0
84
 Аватар для 84
28 / 33 / 12
Регистрация: 11.04.2016
Сообщений: 132
17.08.2016, 08:09
Zelmm, Зачем бежать в начало, потом в конец, потом снова в начало если доступ к первому и последнему массиву осуществляется за О(1)?
У вас всегда есть ссылка на последний и на первый элемент. "заходите" с самого начала и начинаете проверять элементы. Если элемент подходит - обнуляем его и в конец, если нет - то идем к следующему. Только тут надо учесть что рано или поздно ты уткнешься в последовательность нулей, которые будешь перебрасывать по кругу, так что надо придумать момент, когда пора остановиться
0
11 / 2 / 0
Регистрация: 20.07.2016
Сообщений: 35
17.08.2016, 11:55
Цитата Сообщение от 84 Посмотреть сообщение
Если элемент подходит - обнуляем его и в конец,
Но ведь чтобы поставить его в конец нам разве не надо дойти до этого конца через все элементы? Или имеется ввиду, что мы: а) убираем элемент, цепляя связи его соседей друг на друга; б) пишем его в конец, куда нам доступ О(1).
Но в этом случае получается, что если мы провели такую операцию над, предположим, 1.5 миллионным элементом, чтобы продолжить всю процедуру, нам надо будет опять пробежать всю очередь в 1.5 миллиона.

Добавлено через 1 минуту
И что означает О(1), О(n) и т.п.?
0
84
 Аватар для 84
28 / 33 / 12
Регистрация: 11.04.2016
Сообщений: 132
17.08.2016, 12:27
Цитата Сообщение от Zelmm Посмотреть сообщение
И что означает О(1), О(n) и т.п.?
это зависимость длитльности выполнения операции от количества элементов в наборе. Тут лучше гугл поисследовть если собираешься программировать "всерьез".
Цитата Сообщение от Zelmm Посмотреть сообщение
Но ведь чтобы поставить его в конец нам разве не надо дойти до этого конца через все элементы?
По поводу "доступа" тут просто так все не объяснить. Надо понять модель данных и как работает переход по элементам.
Загугли про компаратор.

PS Сорян что гоняю в гугл, но на форуме все "просто так" не объяснить.
0
11 / 2 / 0
Регистрация: 20.07.2016
Сообщений: 35
17.08.2016, 12:30
Цитата Сообщение от xoraxax Посмотреть сообщение
Потому что с массивом необходимо несколько раз копировать все элементы, а со связанным списком достаточно связи поменять и все.
Копировать несколько раз все элементы не обязательно. Вот, на пример:
Java
1
2
3
4
5
6
7
8
9
 int count = 0;
for (int i = 0; i < array.size(); i++) {
           if (array.get(i) % 2 == 0) {
array.remove(i--);
count++;
       }
}
       
       for (int i = 0; i < count; i++) array.add(0);
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
17.08.2016, 12:35
Zelmm, а как по-твоему работает array.remove?

Добавлено через 1 минуту
Zelmm, https://habrahabr.ru/post/162017/
0
84
 Аватар для 84
28 / 33 / 12
Регистрация: 11.04.2016
Сообщений: 132
17.08.2016, 12:49
xoraxax, Копирует все оставшуюся после удаляемого элемента часть со сдвигом "влево" и уменьшает значение array.size?

ЗЫ Нам кажется надо создавать отдельную ветку. Вопрос топикстартера сильно отличается от нашего обсуждения
0
11 / 2 / 0
Регистрация: 20.07.2016
Сообщений: 35
17.08.2016, 13:42
Цитата Сообщение от 84 Посмотреть сообщение
это зависимость длитльности выполнения операции от количества элементов в наборе. Тут лучше гугл поисследовть если собираешься программировать "всерьез".
Ок, поисследую. А на счет "всерьез" - месяц назад устроился на работу Java Junior'ом (в программировании первая моя работа). Работаю в команде, которая занимается настройкой, внедрением и поддержкой ElasticSearch.

Цитата Сообщение от 84 Посмотреть сообщение
Загугли про компаратор. PS Сорян что гоняю в гугл, но на форуме все "просто так" не объяснить.
Не вопрос.

Цитата Сообщение от xoraxax Посмотреть сообщение
а как по-твоему работает array.remove?
Не знал, спасибо огромное за ссылку.

Общий итог всех цитирований - пипец, как все, оказывается, не просто. Буду гуглить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.08.2016, 13:42
Помогаю со студенческими работами здесь

Выстроить элементы массива A по убыванию, определить и поместить в массив В – нечетные числа массива А, в массив С – четные числа массива А
Дан массив А (5; 7; 22; 1; 8; 16; 3). Выстроить элементы массива A по убыванию, определить и поместить в массив В – нечетные числа массива...

Убрать нули из массива, заменив на DBL_MIN
Есть некий массив чисел типа double. Числа от 0.0 и до десятков тысяч. Может, сотни тысяч. Не больше. В одной из формул происходит деление...

Если числа не равны,то заменив каждое из них одним и тем же числом, равным большему из исходных,а если равны то заменив числа нулями.
Даны целые числа ш,и: Если числа не равны,то заменив каждое из них одним и тем же числом, равным большему из исходны,а если равны то...

Сколько элементов встречается в массиве по 3 раза
Помогите, пожалуйста. &gt;&gt;&quot;Дан одномерный массив А, состоящий из N элементов. Сколько значений элементов встречается в массиве по 3...

Дан одномерный массив А, состоящий из N элементов. Перенести в начало массива все четные элементы, а в конец массива - все нечетные
Помогите, пожалуйста. &gt;&gt;&quot;Дан одномерный массив А, состоящий из N элементов. Перенести в начало массива все четные элементы, а в конец...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru