Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
16 / 14 / 4
Регистрация: 21.11.2014
Сообщений: 296
1

Ошибка в алгоритме

21.10.2019, 15:19. Просмотров 1129. Ответов 5
Метки нет (Все метки)

Всем доброго времени суток. Есть кусок программы, в общем он проверяет одинаковые элементы в масиве если есть такие до установить в их поля значения null
вот код :
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
       for (int i = 0; i < toStorageList.size(); i++) {
                    ToStorage toStorage = toStorageList.get(i);
                    for (int m = i + 1; m < toStorageList.size(); m++) {
                        ToStorage toStorage2 = toStorageList.get(m);
                            if (toStorage.getMatchId().equals(toStorage2.getMatchId())) {
                                toStorage.setRuleId(null);
                                toStorage.setMatchId(null);
                                toStorage.setMatchType(null);
                                toStorage2.setRuleId(null);
                                toStorage2.setMatchId(null);
                                toStorage2.setMatchType(null);
                               // тут будет типа saveToDb(toStorage) и saveToDb(toStorage2)
                        }
                    }
                }
в массиве у меня вот такой список
123
111
123
111
123
111
123
я пишу это все в базу данных,и в ней по идее в после выполнения алгоритма везде должно быть Null но в базе у мнея вот так
null
null
null
null
null
111
null
предпоследний элемент не стал Null, подскажите плиз что я не так делаю в алгоритме ???
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.10.2019, 15:19
Ответы с готовыми решениями:

Ошибка в алгоритме
Добрый вечер. Имеется следующая задача - Помогите, пожалуйста, найти прорехи в моем алгоритме....

Ошибка в алгоритме
import java.util.Scanner; public class twenty_seven { public static void main(String args) {...

Не могу найти ошибку в алгоритме
Добрый день, уважаемые форумчане. Необходимо решить следующую задачу: Дана последовательность...

Ошибка в алгоритме
В общем есть две меняющиеся величины одна постоянно растущая - аа, а другая - с имеет два значения...

5
918 / 521 / 174
Регистрация: 18.08.2013
Сообщений: 1,963
Записей в блоге: 2
21.10.2019, 15:41 2
пушто ты обнуляешь переменную, с которой сравниваешь все остальные, сразу же, как находишь первое совпадение. Надо сначала проверить массив до конца, а потом обнулять toStorage
1
16 / 14 / 4
Регистрация: 21.11.2014
Сообщений: 296
21.10.2019, 15:45  [ТС] 3
Я думал в эту сторону, не подскажите как правильно проверить а потом обнулять ??
0
918 / 521 / 174
Регистрация: 18.08.2013
Сообщений: 1,963
Записей в блоге: 2
21.10.2019, 15:49 4
Лучший ответ Сообщение было отмечено Nightwalker как решение

Решение

Можно так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        boolean found;
        for (int i = 0; i < toStorageList.size(); i++) {
            ToStorage toStorage = toStorageList.get(i);
            found = false;
            for (int m = i + 1; m < toStorageList.size(); m++) {
                ToStorage toStorage2 = toStorageList.get(m);
                if (toStorage.getMatchId().equals(toStorage2.getMatchId())) {
                    found = true;
                    toStorage2.setRuleId(null);
                    toStorage2.setMatchId(null);
                    toStorage2.setMatchType(null);
                    // тут будет типа saveToDb(toStorage) и saveToDb(toStorage2)
                }
            }
            if (found) {
                toStorage.setВсё(null);
            }
        }
1
16 / 14 / 4
Регистрация: 21.11.2014
Сообщений: 296
21.10.2019, 18:07  [ТС] 5
Спасибо большое насчет флага совсем не подумал!!! Тема закрыта!!!

Добавлено через 1 час 51 минуту
А еще вопрос это хорошо когда все надо обнулять, а как быть когда не все совпали и надо только конкретные поля обнулять??

Добавлено через 5 минут
хотя можно собрать в лист только те обьекты которые совпали и потом их обнулять используя функционал БД)))

Добавлено через 1 минуту
сделал так но теперь последний обьект не обнулился((((
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
 for (int i = 0; i < toStorageList.size(); i++) {
                    List<String> toStorageId = new ArrayList<>();
 
                    ToStorage toStorage = toStorageList.get(i);
                    for (int m = i + 1; m < toStorageList.size(); m++) {
                        ToStorage toStorage2 = toStorageList.get(m);
                        if (Objects.equals(ofNullable(toStorage.getMatchId()).orElse(null), ofNullable(toStorage2.getMatchId()).orElse(null))) {
                                found = true;
                                toStorageId.add(toStorageList.get(i).getId());
                                toStorage2.setRuleId(null);
                                toStorage2.setMatchId(null);
                                toStorage2.setMatchType(null);
                            }
                    }
                    if (found) {
                        Query queryFields = new Query();
                        queryFields.addCriteria(Criteria.where("_id").in(toStorageId));
                        Update update = new Update();
                        update.set("ruleId", null);
                        update.set("matchId", null);
                        update.set("matchType", null);
                        mongoTemplate.updateMulti(queryFields, update, ToStorage.class);
 
                    }
                }
Добавлено через 13 минут
Я задал не похожее на все значения в предпоследний элемент а последний оставил 123 и он не обнулился

Добавлено через 4 минуты
что то типа
123
111
123
111
123
3213
123
0
16 / 14 / 4
Регистрация: 21.11.2014
Сообщений: 296
22.10.2019, 09:14  [ТС] 6
В общем решил все ок не надо было обнулять в if ничего и норм там все собрать в лист и обнулять!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2019, 09:14

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Ошибка в алгоритме
Public Sub primer() x = 0.225 Dim p(1 To 20) For i = 1 To 20 p(i) = x * Exp(i) * Sin(x / i)...

Ошибка в алгоритме
Неправильно работает программа есть сетка (координаты x - в векторе A y - в векторе B) надо из...

Ошибка в алгоритме
Алгоритм не всегда выполняется правильно( первый элемент не сортируется). В чем ошибка? 95...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.