powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Логическая ошибка в простом алгоритме поиска кратчайшего пути.
45 сообщений из 45, показаны все 2 страниц
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455302
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написал код, но проблема в том, что есть ошибка, логическая, которую никак не могу найти. Суть задачи из точки А в точку Б добраться кратчайшем путем, алгоритм стянул из книги. То есть на координате Х.У которая у меня выглядит как массив 50х50
есть РАКЕТА и ЦЕЛЬ, в ракеты и цели есть Х та У координата, логично, если Х ракеты == Х целы и У ракеты == У целы, задача окончена. Так и делаю, но оно через раз, то ли не добежит до цели, толи глюк, пару раз надо запустить. КОД МОЖНО НАГЛО КОПИРОВАТЬ И ВСТАВЛЯТЬ, ПРОБЛЕМ НЕ БУДЕТ !
Код: 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.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
package com.ua.project;

public class Task 
{
	final static int size = 50;
	static char [][] field = new char[size][size];
	static int xRaketa;
	static int yRaketa;
	static int xTarget;
	static int yTarget;
	
	public static void main(String[] args)
	{
		fillArray();
		setRaketaAndTarget();
		System.out.println("Raketa" + " " + xRaketa + " " + yRaketa);
		System.out.println("Target" + " " + xTarget + " " + yTarget);
		
		while((xRaketa != xTarget) && (yRaketa != yTarget)) {
			goTarget();
			printArray();
			System.out.println(xRaketa + " " + yRaketa + " " + xTarget + " " + yTarget);
		}
		System.out.println();
		System.out.println("Raketa" + " " + xRaketa + " " + yRaketa);
		System.out.println("Target" + " " + xTarget + " " + yTarget);
		//printArray();
		
		
	}

	public static void goTarget() {
		int d = 100;
		int xTMP = 0, yTMP = 0;
		
		int d1 = (int) Math.sqrt(Math.pow((xRaketa - 1 - xTarget),2) + Math.pow((yRaketa - 1 - yTarget),2));
		if(d > d1) {
			d = d1;
			xTMP = xRaketa - 1;
			yTMP = yRaketa - 1;
		}
		int d2 = (int) Math.sqrt(Math.pow((xRaketa - xTarget),2) + Math.pow((yRaketa - 1 - yTarget),2));
		if(d > d2) {
			d = d2;
			xTMP = xRaketa;
			yTMP = yRaketa - 1;
		}
		int d3 = (int) Math.sqrt(Math.pow((xRaketa + 1 - xTarget),2) + Math.pow((yRaketa - 1 - yTarget),2));
		if(d > d3) {
			d = d3;
			xTMP = xRaketa + 1;
			yTMP = yRaketa - 1;
		}
		int d4 = (int) Math.sqrt(Math.pow((xRaketa + 1 - xTarget),2) + Math.pow((yRaketa - yTarget),2));
		if(d > d4) {
			d = d4;
			xTMP = xRaketa + 1;
			yTMP = yRaketa;
		}
		int d5 = (int) Math.sqrt(Math.pow((xRaketa + 1 - xTarget),2) + Math.pow((yRaketa + 1 - yTarget),2));
		if(d > d5) {
			d = d5;
			xTMP = xRaketa + 1;
			yTMP = yRaketa + 1;
		}
		int d6 = (int) Math.sqrt(Math.pow((xRaketa - xTarget),2) + Math.pow((yRaketa + 1 - yTarget),2));
		if(d > d6) {
			d = d6;
			xTMP = xRaketa;
			yTMP = yRaketa + 1;
		}
		int d7 = (int) Math.sqrt(Math.pow((xRaketa - 1 - xTarget),2) + Math.pow((yRaketa + 1 - yTarget),2));
		if(d > d7) {
			d = d7;
			xTMP = xRaketa - 1;
			yTMP = yRaketa + 1;
		}
		int d8 = (int) Math.sqrt(Math.pow((xRaketa - 1 - xTarget),2) + Math.pow((yRaketa - yTarget),2));
		if(d > d8) {
			d = d8;
			xTMP = xRaketa - 1;
			yTMP = yRaketa;
		}
		xRaketa = xTMP;
		yRaketa = yTMP;
		field[xRaketa][yRaketa] = '@';
		System.out.println(d);
		System.out.println(d1 + " " + d2 + " " + d3 + " " + d4 + " " + d5 + " " + d6 + " " + d7 + " " + d8);
		
	}	
	
	public static void setRaketaAndTarget() {
		xRaketa = 1;
		yRaketa = 1;
		field[xRaketa][yRaketa] = 'R';
		xTarget = (int)(Math.random() * 25);
		yTarget = (int)(Math.random() * 25);
		field[xTarget][yTarget] = 'T';
	}
	
	public static void fillArray() {
		for(int i = 0; i < field.length; i++) {
			for(int j = 0; j < field.length; j++) {
				field[i][j] = '-';
			}
		}
	}
	
	public static void printArray() {
		for(int i = 0; i < field.length; i++) {
			for(int j = 0; j < field.length; j++) {
				System.out.print(field[i][j] + " ");
			}
			System.out.println();
		}
		System.out.println();
	}
}
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455306
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты не из РосКосмоса случайно?
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455316
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лагман,

нет, это задача из контрольной из универа, препод хочет бабло выбить, а я хочу задачу сделать и загрузить его по самый не хочу =)
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455326
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не проще ли просто провести прямую линию между двумя точками (любой алгоритм рисования прямой линии), чем все эти извращения с Math.sqrt(....) и простыней if'ов ?

1) Расчет расстояния Math.sqrt(....) явно нужно вынести в отдельную функцию IMHO, сейчас код смотрится очень ужасно.

2) Тип переменной для хранения расстояния (переменные d,d1) должен быть явно float или double. IMHO. А с таким "округлением" Вы явно какой-то бред получать будете.

Если ошибка воспроизводиться на каких-то начальных значениях, то было бы хорошо данные значения и написать. IMHO
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455333
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кого и куда Вы загрузить хотите?

Да и насчет бабла сомневаюсь, такая жесть, на бабло не тянет. Только на 2-- и помахать ручкой (кто кому индепенд от универа). Задача напомнила учебники по языку ЛОГО, который разрабатывался, что бы дети в начальных классах школы хороводы водили и черепашкой на экране рисовали )))

botasa111нет, это задача из контрольной из универа, препод хочет бабло выбить, а я хочу задачу сделать и загрузить его по самый не хочу =)
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455335
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

бла бла бла ... эту задачу я сам переформулировал по своему и упросил ее еще раз в 10-15, так как на листочку от контрольной такое было написано, что препод сам не знал, где взял из кучей данных левых, это раз, во вторых, препод в программировании не шарит это два, а три, вы так и не ответили по существу, где у меня ошибка ! вы ее хоть запускали, или глазами компилите ?
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455340
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНе проще ли просто провести прямую линию между двумя точками (любой алгоритм рисования прямой линии), чем все эти извращения с Math.sqrt(....) и простыней if'ов ?

1) Расчет расстояния Math.sqrt(....) явно нужно вынести в отдельную функцию IMHO, сейчас код смотрится очень ужасно.

2) Тип переменной для хранения расстояния (переменные d,d1) должен быть явно float или double. IMHO. А с таким "округлением" Вы явно какой-то бред получать будете.

Если ошибка воспроизводиться на каких-то начальных значениях, то было бы хорошо данные значения и написать. IMHO


Я потом буду делать, что бы ЦЕЛЬ двигалась и РАКЕТА двигалась, мне нафик эти линии не нужны
1) А она у меня, что не в отдельный метод выноситься + там во всех 8 разные параметры передаются и знаки ? во первых функция значение вернет, процедура нет, у меня в ООП ДЖАВА это называется МЕТОДЫ, это так для развития.
2) скажите это автору книге, дать название и страницу ???


авторЕсли ошибка воспроизводиться на каких-то начальных значениях, то было бы хорошо данные значения и написать. IMHO
если не если, у меня на начальных значениях нету проблем, НАДО КОМПИЛИТЬ ИДЕ а не глазами =)
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455345
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
botasa111вы так и не ответили по существу, где у меня ошибка ! вы ее хоть запускали, или глазами компилите ?
1. Ответил
2. Запускать ЭТО не намерен. Особенно в отсутствие исходных данных (рандом за исходные данные не катит)

p.s.
2.1. Запускать и пошагово проходить такую фигню в полпервого ночи по мск желания нет. К тому же за бесплатно
2.2. Учись пользоваться отладчиком. Ошибку под отладчиком увидеть элементарно
p.p.s. Логических ошибок не увидел. Алгоритм должен приводит к более-менее правильному результату, если его корректно закодировать. Хотя, для меня, было бы более логично просто нарисовать прямую между двумя точками (как известно прямая и есть кратчайший путь), чем итерационно, на каждом шаге, рассчитывать в каком направление нужно идти.
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455351
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
botasa111,
у меня в ООП ДЖАВА это называется МЕТОДЫГде в вашем коде ООП?
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455355
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker,

глазки открой или уже спишь, ссылку на вики кинуть, что такое ООП ? ключевые слова как КЛАСС, ОБЕКТ, инкап. насле. полимор. абстр ? или у тебя ООП только когда есть класс и через NEW обьект создаешь ? в ДЖАВЕ все ООП, даже начальная программа начиная из МЕЙНА это уже ООП.
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455361
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
botasa1112) скажите это автору книге, дать название и страницу ???

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

Поменяй на float и посмотри под отладчиком, что изменилось ))) И убери random в тест кейсе (отладочной версии), иначе IMHO даже говорить не о чем.
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455362
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455363
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
botasa111,
ОБЕКТ, инкап. насле. полимор. абстр Да, вот это все где?
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455371
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker,

убежало от твоих глаз ... по твоей логике выходит, что если нету что то одного из перечисленного, хотя слово КЛАСС ты уже убрал, значит это не ООП ... ты или тролль или отсталый, в любом случае я не буду тебе отвечать на сообщение, так как от тебя в этой теме пользы 0 . удачи, приятных снов
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455372
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455378
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerbotasa111,
ОБЕКТ, инкап. насле. полимор. абстр Да, вот это все где?

Плюсуюсь.
Меня таки уговорили попытаться запустить это в JDeveloper. Скопи-пастил, думал добавить пару методов, причесать код по своему вкусу ))). После того, как увидел, что ВСЕ static, понял, что первое впечатление о коде было правильным.

Интересно, где товарищ такой стиль отладки кода увидел:

1. такое написание ф-ции main и класса, где все static. AFAIK Обычно в main делают что-то типа:
MyClass obj = new MyClass();
obj.myMethod();
и о static забывают как о страшном сне.

2. отлаживаться на Random входных значениях

Ждем скан страницы из книжки
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455382
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

методы статические соответвенно и поля будут, так как не откомпилится, менял я на ДАБЛ поля, проблема таже, РАНДОМ уберал и ставил поля например х1 = 1 у1 = 1 начало х2 = 35 у2 = 35 проблема таже ... а рандом просто для генерации ЦЕЛЫ в любой точки поля. СКАН КНИГИ залил уже давно сверху... АВТОР КОЛДАЕТ книга за 200 год скачал с ПРОГБУК если захочешь качать ...
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455384
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И где здесь приведение расстояния к int ?

Вот скажи нам (не запуская ide), друг сердечный, чему будет равна (в целых числах) длина гипотенузы прямоугольного треугольника при длине катитов равным 1 ? И какое, при таких условиях, расстояние будет короче: путь по прямой линии (по гипотенузе) или по двум катитам. Лично я - не знаю. Никогда не пытался такие задачи решать в целых числах.
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455391
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
botasa111х1 = 1 у1 = 1 начало
х2 = 35 у2 = 35 проблема таже ...

Ok. Сейчас запущу.
Только static'и поубиваю )))
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455392
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
botasa111,
про ООП начали вы, а не я. И если уж верить википедии, то ООП это парадигма а не набор умных слов. А теперь о вашем алгоритме - вдумайтесь в это условие:
Код: java
1.
while((xRaketa != xTarget) && (yRaketa != yTarget)
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455393
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

а я пытался именно на моем пример, я ставил ИНТ и ДАБЛ результат тотже ... тоже значение только там целое а там целое и куча знаком после коммы, это РОЛЬ НЕ СЫГРАЛО ... я заметил, но никак не пойму ошибка в ЦИКЛЕ WHILE кажется, но не пойму почему оно так работает криво !
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455395
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker,

дак я вдумался, КОГДА крутиться пока х1 не будет равно х2 и у1 не будет равно у2, то есть пока РАКЕТА не будет иметь те же координаты что и ЦЕЛЬ
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455396
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

а в чем проблема статиков, я вот не пойму, реально.
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455398
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
botasa111,
дак я вдумался, КОГДА крутиться пока х1 не будет равно х2 и у1 не будет равно у2, то есть пока РАКЕТА не будет иметь те же координаты что и ЦЕЛЬПлохо вдумался, читай буквально что в условии, вслух
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455399
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
botasa111,я вот не пойму вот с этого надо было начинать
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455400
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker,

я уже мозгами плыву ...там верняк все верно, это ж логично ...
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455402
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
botasa111,
если не можешь в уме, подставь циферки в условие (у ракеты координаты 1,1 и у цели 1, 10) и на бумажке просчитай.
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455405
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker,

да между точками поезд проедит ... на пересечении 1:1 и 1:10 там такая вертикальная палка вверх идет на 10 пунктов
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455410
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
botasa111,
вертикальная палка вверх идетв том и дело что не идет. Какой результат вычисления выражения
Код: java
1.
(1 != 1) && (1 != 10)
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455415
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker,

ага, то есть первое условие дает 1 != 1 будет фолс 1 != 10 будет тру (фолс И труе) будет фалс и конец тут или я мозгами плыву уже ... или хз что, но как теперь исправить это ?
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455419
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
botasa111,
как теперь исправить это ? Ну как, если вносить самый минимум исправлений, то нужно сказать: Я хочу чтобы цикл выполнялся пока хотя бы одна координата цели (х или у) отличается от соответствующей координаты ракеты. А сейчас у тебя написано так: Я хочу чтобы цикл выполнялся пока обе координаты цели отличаются от соответствующей координаты ракеты.
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455421
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker,

а можешь кодом, я уже на логику ничего не понимаю в 12 ночи ...
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455422
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все работает. Исправил 2-е ошибки + легкий рефакторинг.
С точки зрения Java, код конечно ужасный, но из чего лепили, то и получили

1. INT --> double
2. while((xRaketa != xTarget) && (yRaketa != yTarget))
заменил на
||
иначе ракета не достигала цели.

Легкий рефакторинг
1. Убрал все static'и. Можно еще и убрать все public'и )))
2. Из main все вынес в метод flight() и initAndFlight()
3. Вычисление расстояния сделал в методе tryDirection. В принципе, излишество /когда выносил в метод, не думал, что простыню if... сделаю циклом ))) /
4. Простыню if... сделал циклом. Т.к. было лень 8 вызовов tryDirection писать )))


Код: 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.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
package fignya;

    public class Task 
    {
            final static int size = 50;
            char [][] field = new char[size][size];
            int xRaketa;
            int yRaketa;
            int xTarget;
            int yTarget;
            
            public static void main(String[] args)
            {
                Task my = new Task();
                // Из точки 1,1 в точку 35,35
                my.initAndFlight( 1,1, 35, 35 );
                // В обратном направлении
                my.initAndFlight( 35, 35, 1,1  );
                // Это не ФОБОС, т.ч. и так летает
                my.initAndFlight( 5, 40, 30, 10  );
            }
            
            public void initAndFlight( int xRaketa, int yRaketa, int xTarget, int yTarget ) {
                fillArray();

                this.xRaketa = xRaketa;
                this.yRaketa = yRaketa;
                this.xTarget = xTarget;
                this.yTarget = yTarget;

                field[xRaketa][yRaketa] = 'R';
                field[xTarget][yTarget] = 'T';
                
                System.out.println( "" );
                System.out.println( "          ROS-KOSMOS - FOREVE !!!" );
                System.out.println( "" );
                System.out.println("Raketa" + " " + xRaketa + " " + yRaketa);
                System.out.println("Target" + " " + xTarget + " " + yTarget);
                System.out.println( "" );
                
                flight();
            }
            public void flight() {
                while(( xRaketa != xTarget) || (yRaketa != yTarget)) {
                  goTarget();
                  printArray();
                  System.out.println( xRaketa + " " + yRaketa + " " + xTarget + " " + yTarget );
                }
            }

    class offset_t {
                public int dx;
                public int dy;
                public double d;
                public void set( offset_t new_val ) {
                    dx = new_val.dx;
                    dy = new_val.dy;
                    d = new_val.d;
                }
            };
            
            /* Функция расчитывает перемещение в заданном направлении. Возврашает true если направление перемещение лучше, чем предыдущее */
            public boolean tryDirection( offset_t direction, double min_d ) {
                direction.d = Math.sqrt(Math.pow(( xRaketa + direction.dx - xTarget  ),2) + Math.pow(( yRaketa + direction.dy - yTarget ),2));
                if ( direction.d < min_d ) {
                    return true;
                }
                return false;
            }
            
            public void goTarget() {
                // best - лучшее направление
                // current - текущее (последнее тестировавшиеся направление)
                offset_t best, current;
                best = new offset_t();
                current = new offset_t();
                
                // Некое большое число )))
                best.d = size * size * 2;
                // Находим наилучшее расстояние для движения
                int dx, dy;
                for ( dx = -1; dx <= 1; dx++ ) {
                    for ( dy = -1; dy <= 1; dy++ ) {
                        // Ситуацию, когда стоим на месте просчитывать не нужно, хотя и можно )))
                        // Если стоять на месте самое выгодное, скорее всего, мы догнали цель. IMHO
                        if ( dx==0 && dy==0 ) {
                           continue;
                        }
                        current.dx = dx;
                        current.dy = dy;
                        if ( tryDirection( current, best.d ) ) {
                            best.set( current );
                        }
                    }
                }
                //
                xRaketa = xRaketa + best.dx;
                yRaketa = yRaketa + best.dy;
                //
                field [ xRaketa ] [ yRaketa ] = '*';
            }
            
            public void setRaketaAndTarget() {
                    xRaketa = 1;
                    yRaketa = 1;
                    field[xRaketa][yRaketa] = 'R';
//                    xTarget = (int)(Math.random() * 25);
//                    yTarget = (int)(Math.random() * 25);
                    xTarget = (int)35;
                    yTarget = (int)35;
                    
                    field[xTarget][yTarget] = 'T';
            }
            
            public void fillArray() {
                    for(int i = 0; i < field.length; i++) {
                            for(int j = 0; j < field.length; j++) {
                                    field[i][j] = '-';
                            }
                    }
            }
            
            public void printArray() {
                    for(int i = 0; i < field.length; i++) {
                            for(int j = 0; j < field.length; j++) {
                                    System.out.print(field[i][j] + " ");
                            }
                            System.out.println();
                    }
                    System.out.println();
            }
    }
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455425
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

спасибо, иду спать, может повезет мне присниться что то по круче =) а код уже с утра разберу
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455426
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
botasa111,а можешь кодом, я уже на логику ничего не понимаю в 12 ночи ...Ну теперь куда денусь)Leonid Kudryavtsev 2. while((xRaketa != xTarget) && (yRaketa != yTarget))
заменил на
||
иначе ракета не достигала цели.
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455427
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
botasa111а я пытался именно на моем пример, я ставил ИНТ и ДАБЛ результат тотже ...

Пример где Дабл и результат тот же.

У меня с даблом - летает. С первого раза. Рефакторинг на алгоритм сказаться не должен (если только у тебя в простыне if... нет очепяток, что, при таком количестве if, сделать не сложно).
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455429
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
у вас очень серьезная ошибка в коде
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455436
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerу вас очень серьезная ошибка в коде
Возможно. А где?

Еще раз глазами пробежался, не заметил. (были опечатка, что я dx и dy перепутал. Но это при первом же запуске выплыло)
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455438
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
в этой строке) System.out.println( " ROS-KOSMOS - FOREVE !!!" );
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455444
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это была дань уважения Лагман'у. Он первый в данной ветки ответил )))
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455541
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Только на 2-- и помахать ручкой (кто кому индепенд от универа). Задача напомнила учебники по языку ЛОГО,

independ - независимо
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455544
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот она - моЩЬ JAVA!
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38455628
HoBTID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
while(( xRaketa != xTarget) || (yRaketa != yTarget))


А кто это придумал числа с плавающей точкой на равенство сравнивать?
Про матанализ и эпсилон не слышали?
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38456326
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HoBTID,
они были интами сначала
...
Рейтинг: 0 / 0
Логическая ошибка в простом алгоритме поиска кратчайшего пути.
    #38456329
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HoBTID,
и остались
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Логическая ошибка в простом алгоритме поиска кратчайшего пути.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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