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

Не используя вспомогательных объектов, переставить отрицательные элементы списка в конец, а положительные - в начало

02.04.2018, 23:32. Показов 8309. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Новичок в Java. Попалось задание: не используя вспомогательных объектов, переставить отрицательные элементы данного списка в конец, а положительные - в начало этого списка.

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

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
36
37
38
39
40
41
42
43
44
45
46
47
import java.util.*;
 
public class Lab
{
    public static List<Integer> list = new ArrayList<Integer>();
    
    public static void enterList() //функция для ввода списка
    {
        Random random = new Random(System.currentTimeMillis());
        
        for(int i = 0; i < 15; i++)
        {
            int number = -15 + random.nextInt(16 + 15);
            list.add(number);
        }
    }
    
    public static void printList() //функция для вывода списка
    {
        for(int i = 0; i < list.size(); i++)
        {
            System.out.print(list.get(i) + " ");
        }
    }
    
    public static void main(String[] args) 
    {        
        enterList();
        printList();
        
        int i = 0;
        while(i < list.size()) //на этом цикле все зависает 
        {
            if(list.get(i) < 0) //если значение меньше нуля
            {
                list.add(list.get(i)); //добавляем элемент с таким значением в конец списка
                list.remove(list.get(i)); //и удаляем первое вхождение такого элемента
            }
            else
                i++;  // иначе переходим к следующему элементу
        }
        
        printList();
        
        System.out.println();
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.04.2018, 23:32
Ответы с готовыми решениями:

Не используя вспомогательных объектов, переставить отрицательные элементы данного списка в конец, а положитель
Не используя вспомогательных объектов, переставить отрицательные элементы данного списка в конец, а положительные - в начало этого списка.

Дан массив: перестановка положительные элементы переставить в начало массива, отрицательные - в конец
Дан массив: перестановка положительные элементы переставить в начало массива, отрицательные - в конец.

Последовательно переместить все отрицательные элементы списка в его начало, а положительные - в конец
1314 Дан список из n целых чисел a1, a2,..., an. Последовательно переместить все отрицательные элементы списка в его начало, а все...

7
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
03.04.2018, 07:24
Пришло время время поговорить с тобой про дебаггер...
Так вот, включаешь дебаггер, ставишь бряку, смотришь, чё у тебя там зависает
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
03.04.2018, 08:41
misolej, ты удаляешь и добавляешь в цикле, поэтому длина листа, на которую ссылается счетчик постоянно меняется. Или заведи отдельную переменную с длиной листа, или (что более правильно) используй итератор. А еще проще, создать компаратор и использовать Collecrions.sort
0
 Аватар для Aviz__
2738 / 2047 / 507
Регистрация: 17.02.2014
Сообщений: 9,465
03.04.2018, 12:44
хорошая задачка))
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
36
37
38
39
40
41
42
43
44
45
46
import java.util.*;
 
public class CyberList {
    private static final int COUNT_NUM = 15;
    private static List<Integer> list = new ArrayList<>(COUNT_NUM);
 
    private static void enterList() {
        Random random = new Random(System.currentTimeMillis());
 
        for(int i = 0; i < COUNT_NUM; i++)
        {
            int number = -1*COUNT_NUM + random.nextInt(COUNT_NUM * 2);
            list.add(number);
        }
    }
 
    private static void printList() {
        for (Integer aList : list) {
            System.out.print(aList + " ");
        }
        System.out.println();
    }
 
   public static void main(String[] args) {
        enterList();
        printList();
 
       int highLimInd = list.size();
 
       for (int i = 0; i < highLimInd; i++) {
           if (list.get(i) >= 0)
               list.add(list.get(i));
       }
       for (int i = 0; i < highLimInd; i++) {
           if (list.get(i) < 0)
               list.add(list.get(i));
       }
 
       for (int i = 0; i < highLimInd; i++) {
           list.remove(0);
       }
       printList();
 
       System.out.println();
    }
}
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
03.04.2018, 18:12
Java
1
2
3
list.stream()
    .sorted((x, y) -> (y - x))
    .forEach(System.out::println);
1
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
03.04.2018, 19:45
Цитата Сообщение от misolej Посмотреть сообщение
кажется, что решение этой проблемы где-то на поверхности
misolej, частный случай, попробуй сообразить, как будет работать этот цикл, когда все элементы списка отрицательны.
Цитата Сообщение от misolej Посмотреть сообщение
На цикле, который должен был бы реализовать эти перестановки все зависает.
Java
1
2
3
4
5
6
7
8
9
10
11
        int i = 0;
        while(i < list.size()) //на этом цикле все зависает 
        {
            if(list.get(i) < 0) //если значение меньше нуля
            {
                list.add(list.get(i)); //добавляем элемент с таким значением в конец списка
                list.remove(list.get(i)); //и удаляем первое вхождение такого элемента
            }
            else
                i++;  // иначе переходим к следующему элементу
        }
1
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
03.04.2018, 20:22
misolej,

не используя вспомогательных объектов, переставить отрицательные элементы данного списка в конец, а положительные - в начало этого списка.
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
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
 
public class Overload {
 
    public static List<Integer> createNewList() {
        ArrayList<Integer> integers = new ArrayList<>();
        Random random = new Random(System.currentTimeMillis());
        for(int i = 0; i < 15; i++) {
            int number = -15 + random.nextInt(16 + 15);
            integers.add(number);
        }
        return integers;
    }
 
 
    public static void main(String[] args) {
        List<Integer> list = createNewList();
        System.out.println(list);
        List<Integer> result = list.stream().sorted((o1, o2) -> o2).collect(Collectors.toList());
        System.out.println(result);
    }
 
}
2
1 / 1 / 0
Регистрация: 21.12.2016
Сообщений: 9
03.04.2018, 20:48  [ТС]
Спасибо всем за помощь, уже получилось найти решение. Вот так все работает:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
int i = 0;
        int res = 0;
        while(i < list.size() - res)
        {
            if(list.get(i) < 0)
            {
                list.add(list.get(i));
                list.remove(list.get(i));
                res++;
            }
            else
                i++;   
        }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.04.2018, 20:48
Помогаю со студенческими работами здесь

Переместить положительные элементы в начало массива, отрицательные в конец
1 Одномерный целочисленный массив. Превратить данный массив таким образом, чтобы сначала шли все положительные элементы, а затем...

Перенести положительные элементы в начало массива, а отрицательные - в конец
Как должен выглядеть код нового массива в VBA который переставляет отрицательные числа? Исходные данные 2 55 -3 -43 12 -34 ...

Перестановить положительные элементы в начало массива, отрицательные — в конец
Помогите написать задачи: 1. Перестановить положительные элементы в начало массива, отрицательные - в конец. 2. Найти элемент с...

Положительные элементы массива переместить в начало, а отрицательные — в конец
Дана последовательность чисел неизвестной длинны. Нужно заполнить массив этими числами, а потом в отдельной функции положительные элементы...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю 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. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru