powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / кто запускает процедуру ?
36 сообщений из 36, показаны все 2 страниц
кто запускает процедуру ?
    #39376438
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну не могу понять кто запускает процедуру PrintX.
Её может запустить только метод Check .
Там этот метод вызывается только один раз в условии его можно легко найти (ближе к низу кода):
Код: java
1.
if (Check(x, y , h, l, field)==countOfStone) 	{


если пометить эту строчку как точку остановки и запуститься пошагово , то мы увидим ,
что на начальных итерациях эта строка просто не выполняется , однако PrintX вызывается...
То есть пошаговая отладка ответ на вопрос не даёт. Мистика !
Вопрос к тем кому не лень разбираться , кто вызывает PrintX на начальных шагах цикла ?


Код: 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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
public class Island {
	int[][]  field = new int[8][8];
	int countOfStone;
	int maxX=0;
	int maxY=0;
	int maxL=0;
	int maxH=0;
	int maxS=0;
	public Island(){
		field[0][0]=1;
		field[0][1]=1;
		field[1][2]=1;
		field[1][7]=1;
		countOfStone = CountOfStone(field);
 	}
	public int CountOfStone(int[][] f){
		int count=0;
		for (int i=0;  i<=7 ; i++){
			for (int j=0;  j<=7;j++){
				if (f[i][j]==1) {count++;}
			}
		}
		return count;
	}
	public int Check(int x, int y , int i, int j, int[][] massive){
		System.out.println("zzzz");
		int i1;
		int j1;
		int c;
		int[][] m=massive;
		for (i1=x; i1<=i; i1++) {
			for (j1=x; j1<=i; j1++) {
				m[i1][j1]=2;
			}
		}
		PrintX(m);
		return (CountOfStone(massive));
	}
	public void PrintX(int[][] f){
		int i1;
		int j1;
		int c;
		for (i1=0; i1<=7; i1++) {
			for (j1=0; j1<=7; j1++) {
				System.out.print(f[i1][j1]  + " ");
			}
			System.out.println();
		}
		System.out.println("jjj");
		
	}
	
	public void Trying(){
		boolean result=false;
		int[][] f = field ; 
		int x=8;
		int y=8;
		int h=8;
		int l=8;		
		do {
		do {
			h=8;l=8;
			do {
				do {

					if (x+h<=8 && y+l<=8) {

					if (Check(x, y , h, l, field)==countOfStone) 	{

						System.out.print(x + " "+ y +" "+h +" "+ l );System.out.println();
					if (maxS<h*l) {
						maxS=h*l; maxX=x;maxY=y;maxH=h;maxL=l;}														
					}								
					} 								
					h--;
				} while (!(result || h==0));
				h=8;l--;
			} while (!(result || l==0));
				
			
			x--;
		
		} while (!(result || x==0));
		x=8;y--;
		} while (!(result || y==0));
		
		System.out.println(maxX + "|" +maxY+ "|" +maxH+ "|" +maxL);			
	}
}




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class Main {

	public static void main(String[] args) {
		 Island	i= new Island();
		 i.trying();

	}

}
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376446
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня всегда смущало использование do...while, может переписать и тогда станет понятнее?.
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376472
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81, когда ты уже стоишь в брейкпойнте - внизу есть окошко где показан полный стектрейс
и по нему видно кто кого вызвал.
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376522
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonandron81, когда ты уже стоишь в брейкпойнте - внизу есть окошко где показан полный стектрейс
и по нему видно кто кого вызвал.


да Вы понимаете я наторкал всё тело PrintX брейкпоинтами , а так же брейкпоинтами пометил вот эти строки
Код: java
1.
2.
if (x+h<=8 && y+l<=8) {
if (Check(x, y , h, l, field)==countOfStone) 	{


и запускаю.

так вот при запуске отладки на вышеуказанных строках происходит остановка, на точках в методе PrintX - нет. Тем не менее метод PrintX каким-то волшебным образом выполняется...
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376561
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81так вот при запуске отладки на вышеуказанных строках происходит остановка, на точках в методе PrintX - нет. Тем не менее метод PrintX каким-то волшебным образом выполняется...
1. Методы называются с маленькой буквы.
2. А чего ему не выполняться, если у вас он в методе Check, а метод Check выполняется.
С чего PrintX не должен выполняться-то, если он лежит в Check?
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376563
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и точки остановы ставятся без проблем на цикле.
Если вам надо где-то между указанием переменных i1, j1 и c; поставить точку остановы, то воткните туда sout и на него поставьте брекпоинт
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376567
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*останова :)
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376575
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перепишите PrintX вот так, с его переименованием:
Зачем без инициализации создавать перед циклами отдельно int'ы, если они только в цикле используются.
И зачем там переменная int c; ? удалил.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public void printX(int[][] f) {
        for (int i1 = 0; i1 <= 7; i1++) {
            for (int j1 = 0; j1 <= 7; j1++) {
                System.out.print(f[i1][j1] + " ");
            }
        }
        //System.out.println("jjj");
    }
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376727
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic,


это всё ньюансы важные , но к делу не относящиеся.
Если я расставил брекпоинтов на каждую строчку процедуры PrintX значит при любом обращении на процедуру PrintX в любой точке программы выполнение должно останавливаться на первой строчке процедуры или же нет ???
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376809
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

см скриншот: я нажимаю на букашку(Eclipse) программа попадает на строчку выделенную стрелочку.
но в консоле мы видим , что почему-то уже отработала процедура PrintX , тогда как она нафаршерована брейкпоинтами (выделено красным) и на этих точках останова не произошло. а почему ???
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376821
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

ошибся , немного не так написал . скриншот тот же , а читать это :
изначально я попадаю на строчку подсвеченную (см. скриншот) , а при продолжении отладки (клавиша F8) сразу высвечивается в консоле результат выполнения PrintX , но почему нет останова на шагах метода PrintX мне непонятно.
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376837
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что F8 - это шаг без захода. Если хочешь зайти внутрь, жми F7
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376844
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettПотому что F8 - это шаг без захода. Если хочешь зайти внутрь, жми F7

не помогает. в процедуру PrintX отладчик не заглядывает. Тем не менее её выполняет. а неё каждая строка (см. скриншот) вся в брейкпонитах .
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376872
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81отладчик не заглядывает. Тем не менее её выполняет.
проверь установкой не бряка, а райзе\лога внутри.
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376876
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, вы тут все уже отмечаете что ли?

Код: java
1.
2.
3.
4.
public void PrintX(int[][] f){
   Thread.dumpStack();
   ...
}


И всё видно в выхлопе без всякой отладки.
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376877
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123
райзе\лога внутри.



можно вот это по - русски ?
логирование предлагаете приплести ?
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376886
morewind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andron81andron81,

см скриншот: я нажимаю на букашку(Eclipse) программа попадает на строчку выделенную стрелочку.
но в консоле мы видим , что почему-то уже отработала процедура PrintX , тогда как она нафаршерована брейкпоинтами (выделено красным) и на этих точках останова не произошло. а почему ???

Может целиком пересобрать проект? У меня в нетбинсе PrintX выполняется как и задумано - при совпадении условий.
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376888
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczДа, вы тут все уже отмечаете что ли?

Код: java
1.
2.
3.
4.
public void PrintX(int[][] f){
   Thread.dumpStack();
   ...
}


И всё видно в выхлопе без всякой отладки.

что я там увижу ?

мне нужно увидеть логика выполнения программы, переменные прозвонить на каждой итерации. а если у меня скачки необъяснимые, то грош цена этим отладкам ...
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376893
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
morewindМожет целиком пересобрать проект? У меня в нетбинсе PrintX выполняется как и задумано - при совпадении условий.


так это уже вторая сборка. предыдущая была дома...
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376896
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81что я там увижу ?


Вот это:andron81то мы увидим , что на начальных итерациях эта строка просто не выполняется , однако PrintX вызывается

andron81мне нужно увидеть логика выполнения программы, переменные прозвонить на каждой итерации. а если у меня скачки необъяснимые, то грош цена этим отладкам ...
Для этого сначала надо дать переменным значимые имена.
А потом логирования добавить на любой ветвление. Что мешает добавить логирование?
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376911
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81можно вот это по - русски ?
будет видно врёте вы или нет что процедура выполняется.
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376912
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczandron81что я там увижу ?


Вот это:andron81то мы увидим , что на начальных итерациях эта строка просто не выполняется , однако PrintX вызывается



я и так это вижу... тогда кто вызывает процедуру ???
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39376916
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123andron81можно вот это по - русски ?
будет видно врёте вы или нет что процедура выполняется.


если закоментить всё тело процедуры PrintX , то мы вывод матрицы (а это процедура и делает ) не увидим.
Значит процедура выполняется именно PrintX .
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39377704
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

ну что ? )))
Пока ещё не поздно (пока не начали праздник), у кого Eclipse попробуйте отбрекпоинтить процедуру PrintX и позапускать...
ну были же тут не ленивые герои ;-)
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39377723
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81я и так это вижу... тогда кто вызывает процедуру ???
System.err и System.out - отдельные потоки вывода со своими буферами. Они не синхронизированы. Поэтому печать отдельно, стэк отдельно.
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39377724
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81andron81,

ну что ? )))
Пока ещё не поздно (пока не начали праздник), у кого Eclipse попробуйте отбрекпоинтить процедуру PrintX и позапускать...
ну были же тут не ленивые герои ;-)
Не желаете ли сформулировать свой вопрос?
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39377757
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНе желаете ли сформулировать свой вопрос?


а, выходит проблема в проблеме ???

Хорошо постараюсь сформулировать иначе и проще .
Вот внизу актуальный код. Есть методы Trying и Check. В первом вызывается второй в цикле по выполнению условия. при вызове второго выводится в консоле
"Execute Check method" .

Расставляем 3 брейкпоинта в процедуре Trying() как показано на рисунке , а так же каждую строчку Check так же пометим брейкпоинтами

Итак запускаем отладку :
1. останавливаемся на первой точке останова :
Код: java
1.
int y=0;


всё ясно.
2. запускаем отладку далее переносимся к следующей точке останова:
Код: java
1.
h=8;l=8;



В консоле появилась запись "Execute Check method" , а почему ?. Ведь не срабатывал брейкпоинт на строчке :

Код: java
1.
if (Check(x, y , h, l, field)==countOfStone) 	{



и по самой процедуре Check где тоже есть брейкпоинт отладка не заглянула. Почему ???


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class Main {

	public static void main(String[] args) {
		 Island	i= new Island();
		i.Trying();
		 

	}

}



Код: 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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
public class Island {
	int[][]  field = new int[8][8];
	int countOfStone;
	int maxX=0;
	int maxY=0;
	int maxL=0;
	int maxH=0;
	int maxS=0;
	public Island(){
		field[0][0]=1;
		field[0][1]=1;
		field[1][2]=1;
		field[1][7]=1;
		countOfStone = CountOfStone(field);
		
 	}
	public int CountOfStone(int[][] f){
		int count=0;
		for (int i=0;  i<=7 ; i++){
			for (int j=0;  j<=7;j++){
				if (f[i][j]==1) {count++;}
			}
		}
		
		return count;
	}
	public int Check(int x, int y , int i, int j, int[][] massive){
	
		int i1;
		int j1;
		int c;
		int[][] m = new int [8][8]; 
		//m=massive;
		System.out.print("test2");
		for (i1=0; i1<=7; i1++) {
			for (j1=0; j1<=7; j1++) {
				m[i1][j1]=massive[i1][j1];
			}
		}
		
		
		for (i1=x; i1<=i; i1++) {
			for (j1=x; j1<=j; j1++) {
				m[i1][j1]=2;
			}
		}
		PrintX(m);
		return (CountOfStone(massive));
	}
	public void PrintX(int[][] f){
		
		
		int i1;
		int j1;
		int c;
		
		System.out.print("test");
		for (i1=0; i1<=7; i1++) {
			for (j1=0; j1<=7; j1++) {
				System.out.print(f[i1][j1]  + " ");
			}
			System.out.println();
		}
		System.out.println();
		
	}
	
	public void Trying(){
		boolean result=false;
		int[][] f = field ; 
		int x=0;
		int y=0;
		int h=8;
		int l=8;
		
		do {
		do {
			h=8;l=8;
			do {
				do {

					if (x+h<=8 && y+l<=8 && x-h>0 && y-l>0) {

					if (Check(x, y , h, l, field)==countOfStone) 	{

						System.out.print("x="+x + ":"+ "y="+y +" h="+h +", l="+ l );System.out.println();
					if (maxS<h*l) {
						maxS=h*l; maxX=x;maxY=y;maxH=h;maxL=l;}														
					}								
					} 								
					h--;
				} while (!(result || h==0));
				h=7;l--;
			} while (!(result || l==0));
				
			
			x++;
		
		} while (!(result || x==8));
		x=7;y++;
		} while (!(result || y==8));
		
		System.out.println(maxX + "|" +maxY+ "|" +maxH+ "|" +maxL);			
	}
}
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39377766
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81а, выходит проблема в проблеме ???

Русский не родной?

andron81Вот внизу актуальный код. Есть методы Trying и Check. В первом вызывается второй в цикле по выполнению условия. при вызове второго выводится в консоле "Execute Check method" .

Кем выводиться? В коде такого нет. В брейкпоинте выводится?
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39377781
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczandron81а, выходит проблема в проблеме ???

Русский не родной?

andron81Вот внизу актуальный код. Есть методы Trying и Check. В первом вызывается второй в цикле по выполнению условия. при вызове второго выводится в консоле "Execute Check method" .

Кем выводиться? В коде такого нет. В брейкпоинте выводится?

метод Trying вызывает Check.
метод Check выводит в консоль - test2. (а не "Execute Check method" извиняюсь , пока писал сообщение переделал код).


Итак запускаем отладку :
1. останавливаемся на первой точке останова :
int y=0;

всё ясно.
2. запускаем отладку далее переносимся к следующей точке останова:
h=8;l=8;


В консоле появилась запись "test2" , а почему ?. Ведь не срабатывал брейкпоинт на строчке :

if (Check(x, y , h, l, field)==countOfStone) {


и по самой процедуре Check где тоже есть брейкпоинт отладка не заглянула. Почему ???
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39377799
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

Некоторые строки кода не выполняются в рантайме. Наведите курсор на брейкпоин. Там иконка обычная или перечекнутая? Если обычная, то можно зайти в свойства breakpoint и посмотреть, может она отключена у вас?
http://www.beyondjava.net/blog/eclipse-breakpoints-unleashed/
Вы показываете скриншоты с рабочими бряками, но проблема у вас в нерабочих бряках и их скриншоты вы стесняетесь показать.
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39377800
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

Забавно что вы всё время приводите код, хотя очевидно что вопрос в работе с IDE.
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39377809
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczandron81,

Там иконка обычная или перечекнутая? Если обычная, то можно зайти в свойства breakpoint и посмотреть, может она отключена у вас?


вы имеете ввиду вкладка "Breakpoints" - там все с галочками
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39377811
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

Строка 36 находится где-то в теле цикла. Если метод вызвался, а тело цикла - нет, значит что-то с условием цикла.
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39377819
alexanderer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andron81,

Всё работает. Брейкоинт тут
Код: java
1.
2.
3.
			do {
*				h = 8;
				l = 8;



Брейкоинт тут:
Код: java
1.
System.out.print(f[i1][j1] + " ");



Пошагово долго, поэтому просто жмёшь F8. Всё заходит, всё печатает.
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39378016
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81, ну что.

Конь уже неактуален? Теперь у нас - "острова" и "камни" ? :)
...
Рейтинг: 0 / 0
кто запускает процедуру ?
    #39378023
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonandron81, ну что.

Конь уже неактуален? Теперь у нас - "острова" и "камни" ? :)

ну коня то я решил Вандер как его там методом. но без этих умных применений алгоритмов простым перебором даже в нескольких потоках думаю задача не решается за адекватное время - я пришёл к такому выводу
можно , конечно сидеть решать эту задачу до пенсии , но не уверен , что это верно.
Вы не согласны ?
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / кто запускает процедуру ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]