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

Проходит вложенный цикл for всего один раз

14.04.2015, 17:02. Показов 1540. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Что-то немного запарился с вложенными циклами, как сделать их правильно?

Есть 3 List и переменная

Java
1
2
3
4
List<File>totalFileList              //Список всех файлов, которые нужно обработать
List<File>overLimitList            //Список файлов, которые нужно исключить из обработки
List<Cont>containersList        //Список объектов класса Cont 
long limitSize                        //устанавливает лимит объема файла (в байтах)
В свою очередь класс Cont имеет следующие поля:
Java
1
2
List<File>filesOnCont           //Список файлов внутри класса
long contSize                      //тут сохраняется размер файлов(в байтах), добавленных в filesOnCont
плюс сеттеры и геттеры для них


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

Если я убираю оба break, то у меня программа проваливается в бесконечный цикл. С брейками создает много контейнеров, но проверяет и заполняет файлами только первый из них. Который обозначается с = 0. Если убираю первый брейк, то он заполняет и следующие, но некорректно, может несколько одних и тех же файлов добавить во все контейнеры.

Вероятно для подобных случаев есть более удобные способы решения, но пока на ум только такой пришел..и то неверный)

Заранее благодарен за ответ


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
public void generateContainers () {
 
        for (File file : totalFileList) {
            long fileSize = file.length();
 
            System.out.println("Проход для " + file.getName());             //tmp
 
            if (fileSize == limitSize) {
                createNewContainer(file, containersList);
            } else if (fileSize > limitSize) {
                overLimitList.add(file);
            } else {
                fileLessLimit(file);
                System.out.println("Передаем файл " + file + "в метод fileLessLimit");  //tmp
            }
        }
 
    }
 
    private void fileLessLimit(File file) {
        if (containersList.isEmpty()) {
            System.out.println("Список контейнеров пока пуст, создаем новый для файла " + file);
            createNewContainer(file, containersList);
        } else {
            for (int c = 0; c < containersList.size(); c++) {         //тут проходит только один раз
                System.out.println("===================");
                long tmp = file.length();
                System.out.println("Входим в цикл перебора списка контейнеров. Проход № " + c);
                if (limitSize >= containersList.get(c).getContSize() + file.length()) {
                    containersList.get(c).addFileToContFileList(containersList.get(c).getContFileList(), file);
                    break;
                } else {
                    createNewContainer(file, containersList);
                    break;
                }
            }
        }
    }
 
    public static void createNewContainer (File file, List<Cont> containersList) {
        Cont cont = new Cont();
        cont.getContFileList().add(file);
        cont.setContSize(cont.getContSize() + file.length());
        containersList.add(cont);
 
 
    }
Также тут упоминается метод addFileToContFileList из класса Cont

Java
1
2
3
4
 public void addFileToContFileList(List<File> contFileList, File file) {
        contFileList.add(file);
        setContSize(contSize + file.length());
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.04.2015, 17:02
Ответы с готовыми решениями:

Цикл проходит недостаточное к-во раз
Задача посчитать е^x. Считается через ряд Тейлора где е^x = 1 + x/1! + x^2/2! + x^3/3! + ... Программу составил, но она считает очень...

Цикл срабатывает только один раз -_-
import java.util.Scanner; import java.lang.String; import java.util.regex.*; public class Main { static Scanner in = new...

Цикл проходит только один раз
Всем привет! Такая проблема: цикл проходит только один раз, причём если убрать вызов функции create_xls($model); то цикл проходит сколько...

1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
14.04.2015, 21:37
Цитата Сообщение от qop Посмотреть сообщение
for (int c = 0; c < containersList.size(); c++) { * * * * //тут проходит только один раз
а что по вашему делает оператор break? конечно проход один, так как
Цитата Сообщение от qop Посмотреть сообщение
if (limitSize .....
* * * * * * * * * * break;
* * * * * * * * } else {
* * * * * * * * * * ....
* * * * * * * * * * break;
* * * * * * * * }
то есть срабатывает прерывание цикла в любом случае. С условиями перемудрил, надо пробовать по другому решить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.04.2015, 21:37
Помогаю со студенческими работами здесь

Цикл в функции проходит только один раз
Здравствуйте. Скажите что стоит изменить и почему не работает цикл в функции &quot;sortingArray&quot;, проходит только один раз.

Проходит цикл один раз и останавливается, в чем причина
Задача на вычисление числел фибоначе в рандомном массиве из 50 элементов ! { int k; bool t = false; const...

Циклы. Написал программу, но проблема в том, что цикл пробегает всего один раз...
Доброго времени суток. Пишу небольшой парсер для сайта курсов валют. Написал программу, но проблема в том, что цикл пробегает всего один...

Цикл проходит не полное количество раз
Происходит импорт Excel файла на сайт, пишу логи в файл, какое количество времени занимает переменная на каждой итерации. Все добавляется,...

Конвертер валют: Проходит только один цикл
Конвертер валют. Если выберу &quot;б&quot;, все равно проходит цикл а. Что не так? #include &lt;stdio.h&gt; int main(void){ char a,b,c; ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru