Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / кто запускает процедуру ? / 25 сообщений из 36, страница 1 из 2
27.12.2016, 23:52
    #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
28.12.2016, 00:04
    #39376446
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кто запускает процедуру ?
Меня всегда смущало использование do...while, может переписать и тогда станет понятнее?.
...
Рейтинг: 0 / 0
28.12.2016, 01:29
    #39376472
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кто запускает процедуру ?
andron81, когда ты уже стоишь в брейкпойнте - внизу есть окошко где показан полный стектрейс
и по нему видно кто кого вызвал.
...
Рейтинг: 0 / 0
28.12.2016, 08:21
    #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
28.12.2016, 09:30
    #39376561
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кто запускает процедуру ?
andron81так вот при запуске отладки на вышеуказанных строках происходит остановка, на точках в методе PrintX - нет. Тем не менее метод PrintX каким-то волшебным образом выполняется...
1. Методы называются с маленькой буквы.
2. А чего ему не выполняться, если у вас он в методе Check, а метод Check выполняется.
С чего PrintX не должен выполняться-то, если он лежит в Check?
...
Рейтинг: 0 / 0
28.12.2016, 09:32
    #39376563
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кто запускает процедуру ?
и точки остановы ставятся без проблем на цикле.
Если вам надо где-то между указанием переменных i1, j1 и c; поставить точку остановы, то воткните туда sout и на него поставьте брекпоинт
...
Рейтинг: 0 / 0
28.12.2016, 09:34
    #39376567
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кто запускает процедуру ?
*останова :)
...
Рейтинг: 0 / 0
28.12.2016, 09:46
    #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
28.12.2016, 12:04
    #39376727
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кто запускает процедуру ?
Nixic,


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

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

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

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

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


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



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

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

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

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


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

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

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


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


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

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


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



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


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

ну что ? )))
Пока ещё не поздно (пока не начали праздник), у кого Eclipse попробуйте отбрекпоинтить процедуру PrintX и позапускать...
ну были же тут не ленивые герои ;-)
...
Рейтинг: 0 / 0
29.12.2016, 14:57
    #39377723
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кто запускает процедуру ?
andron81я и так это вижу... тогда кто вызывает процедуру ???
System.err и System.out - отдельные потоки вывода со своими буферами. Они не синхронизированы. Поэтому печать отдельно, стэк отдельно.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / кто запускает процедуру ? / 25 сообщений из 36, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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