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


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