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

Проблемы с циклом

29.09.2012, 20:28. Показов 1566. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Java
1
2
3
4
5
for(i = 0; i < 8; i++)  
    for(j = 0; j < 8; j++) 
            {
                if(squares[i][j].contains(p))  break;                   
            }
Насколько я понимаю после того как условие выполняется цикл должен прерваться. А переменный i и j будут содержать нужные результаты.
Однако я после цикла получаю i и j значения равным восьми.
При этом условие if выполнячется(проверял вставкой System.out...).

Разве это правильно?
Теперь придется создать 2 переменные и присвоить им нужные значения что-то вроде
if(squares[i][j].contains(p)) {a = i; b = j;}
squares содержит Rectangle2D объекты.

Это шашки. Проверяю таким образом начальную и конечную позицию(mousePressed() mouseReleased()) шашки.

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

Добавлено через 3 минуты
плюс мало того, что придется использовать дополнительные переменные, получу еще и излишнюю итерацию, которая уже не нужна после получения результата

Добавлено через 2 минуты
Хм.
Какой я глупый.
У меня же двойной цикл

Добавлено через 41 секунду
тему можно закрыть

Добавлено через 33 секунды
И все таки)
Нельзя ли прервать вложенную итерацию?)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.09.2012, 20:28
Ответы с готовыми решениями:

Проблемы с циклом for
Проблема в x! = он выводиться всегда как константа 6....( #include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;cstdlib&gt; using...

Проблемы с циклом for?
Ребят, всем добрый вечер! Бьюсь над загадкой, почему алгоритм: class SPKSort: faname = '' name = '' scool = '' ...

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

13
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
29.09.2012, 23:34
Цитата Сообщение от ntny Посмотреть сообщение
Нельзя ли прервать вложенную итерацию?)
если поставить метку то брякнуться можно на неё,
но это считается плохим стилем программирования с неявной логикой
пример:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class LikeGoto {
 
    public static void main(String[] args) {
        int i = 0, j = 0;
        stop: for (i = 0; i < 10; i++) {
            for (j = 0; j < 10; j++) {
                if ((j + i) == 11)
                    break stop;
            }
        }
        System.out.println("i=" + i + " j=" + j);
    }
}
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
30.09.2012, 07:51
Цитата Сообщение от mutagen Посмотреть сообщение
если поставить метку то брякнуться можно на неё,
но это считается плохим стилем программирования с неявной логикой
А зачем тогда учить плохому?

ntny, сделай флаг, который бы информировал о том, завершился ли вложенный цикл досрочно, проверяя его, можно будет выйти из цикла верхнего уровня.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
30.09.2012, 17:38
Цитата Сообщение от aleksandy Посмотреть сообщение
А зачем тогда учить плохому?
а как Вы собираетесь разобраться в говнокоде попавшемся Вам на сапорт если не будете вкурсе ?
1
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
01.10.2012, 11:31
mutagen,

если что-то мне непонятно я ищу информацию, которая бы помогла разобраться. Но топикстартеру до разбора чужого говнокода еще очень далеко.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
01.10.2012, 17:19
Цитата Сообщение от aleksandy Посмотреть сообщение
Но топикстартеру до разбора чужого говнокода еще очень далеко.
поэтому там и сноска что это плохой стиль, а не голый код
0
9 / 9 / 1
Регистрация: 17.06.2012
Сообщений: 168
01.10.2012, 17:30  [ТС]
Цитата Сообщение от aleksandy Посмотреть сообщение
А зачем тогда учить плохому?

ntny, сделай флаг, который бы информировал о том, завершился ли вложенный цикл досрочно, проверяя его, можно будет выйти из цикла верхнего уровня.
Имеется в виду проверка условия i < arr.length && flag;
if(...) {flag = false; break}

Если я правильно понял, то не ижу каких либо отличий от меток.

Добавлено через 54 секунды
Цитата Сообщение от aleksandy Посмотреть сообщение
. Но топикстартеру до разбора чужого говнокода еще очень далеко.
В своем бы разобраться
0
9 / 9 / 1
Регистрация: 17.06.2012
Сообщений: 168
13.10.2012, 23:11  [ТС]
Дописал приложение, подчищаю код.
Добрался таки до цикла.
Хотел сделать все правильно но столкнулся с проблемой.

Код при
Java
1
2
3
4
5
6
7
label: for( i = 0; i < 8; i++)
{
           for(j = 0; j < 8; j++)
               {
                      if(squares[i][j].contains(p))   {  break label;      }    
                }
}
И
Java
1
2
3
4
5
6
7
8
while(i < 8 && notFind)
{
           for(j = 0; j < 8; j++)
               {
                      if(squares[i][j].contains(p))   { notFind = false; break;    }    
                if(notFind) i++;
                }
}
Ведет себя совершенно по разному.
Как мне кажется я написал одинаковые условия
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
14.10.2012, 00:54
в первом случае брейк прерывал 2 цикла, во втором только for
0
9 / 9 / 1
Регистрация: 17.06.2012
Сообщений: 168
14.10.2012, 08:57  [ТС]
mutagen, во втором случае после того как брейк прерывает цикл фор, разве цикл while не должен закончиться из-за того, что переменной нотФайнд участвующей в условии И присвоено значение фолс?
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
14.10.2012, 13:30
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
public class LabelVsBoolean {
 
    public static void main(String[] args) {
 
        label: for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                if (i * j == 12) {
                    System.out.println(i + " " + j);
                    break label;
                }
            }
        }
 
        // Ваш дабл цикл
        int i = 0;
        boolean notFind = true;
        while (i < 8 && notFind) {
            System.out.println("i" + i);
            for (int j = 0; j < 8; j++) {
                System.out.println("j=" + j);
                if (i * j == 12) {
                    notFind = false;
                    System.out.println(i + " " + j);
                    break;
                }
                // инкремент происходит внутри for, а надо в while
                if (notFind)
                    i++;
            }
            // если переместить if сюда всё будет ок
            // if (notFind)
            // i++;
        }
    }
 
}
1
9 / 9 / 1
Регистрация: 17.06.2012
Сообщений: 168
14.10.2012, 16:42  [ТС]
Действительно.
Невнимательно получилось, спасибо.

Добавлено через 27 минут
Кстати меня смущает поведение компилятора.
В основном использую консоль.
Если программа содержит ошибки и я воожу запрос на компиляцию(javac.....) компиляция не выполняется.
НО если я ничего не поменяю в исходниках, но при этом второй раз напишу javac "тот же файл" компиляция пройдет успешно.

Это глюк виртуальной машины?

Добавлено через 1 час 8 минут
Наверное это оффтоп, но тему думаю не нужно создавать.
Я использовал паттерн "одиночка" дабы была только одна шахматная доска.

У меня прайват конструктор и паблик статический метод getinstance()
Метод проверяет, что статическая ссылка не содержит экземпляр класса и в этом случае присваивает ей новый экземпляр.

Всем известно.

НО. Статические методы ведь не содержат скрытой this ссылки?
Т.е. я не совсем понимаю как статический метод имеет доступ к прайват методу.

Добавлено через 3 минуты
Или конструктор тоже статический метод?
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
15.10.2012, 06:25
вырезка из книги "private: члены класса доступны только внутри класса"... соответственно да, статический метод имеет доступ к private методу. А вот обратиться за пределами класса к прайвету - вы не сможете
0
9 / 9 / 1
Регистрация: 17.06.2012
Сообщений: 168
15.10.2012, 18:22  [ТС]
Нестатические прайвет члены доступны только внутри экземпляра класса, а не класса насколько я понимаю.

Статический метод это метод класса, а не конкретного экземпляра.

Странно что обращение из статического метода к прайвет экземляру класса компилируется.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2012, 18:22
Помогаю со студенческими работами здесь

Проблемы с циклом!!!
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include&lt;iomanip&gt; using namespace std; typedef struct { float...

Проблемы с циклом while
Подскажите пожалуйста: #include &lt;stdio.h&gt; int main() { int mas; int i=0; while(scanf(&quot;%d&quot;, &amp;mas)!=EOF) ...

Проблемы с циклом foreach
implement main open core, console class facts i : unsigned := 0. class predicates deleteItemsWithEvenIndices:...

Проблемы с циклом repeat … until
Возникли проблемы к такой программе: uses Crt; Var a: Integer; begin ClrScr; While a &gt;= 0 then begin Write(‘ Ввести число::...

Возможно какие то проблемы с циклом
Я создал 4 формы и связал их кнопкой Далее (код для нее внизу), и дело в том, что код рабочий, но когда я кликаю Далее на первой форме...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru