powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / кто запускает процедуру ?
25 сообщений из 36, страница 1 из 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
25 сообщений из 36, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / кто запускает процедуру ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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