Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.09.10;
Скачать: CL | DM;

Вниз

Java => Delphi   Найти похожие ветки 

 
Kerk ©   (2014-12-01 22:50) [0]

 int b, shift = 0, result = 0;
 do {
  b = encoded.charAt(index++) - 63;
  result |= (b & 0x1f) << shift;
  shift += 5;
 } while (b >= 0x20);
 int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
 lat += dlat;


     Shift := 0;
     Result := 0;
     repeat
       B := Ord(Encoded[Index]) - 63;
       Result := Result or ((B and $1f) shl Shift);
       Shift := Shift + 5;
       Inc(Index);
     until b < $20;

     if (Result and 1) <> 0 then
       DLat := not (Result shr 1)
     else
       DLat := (Result shr 1);
     Lat := Lat + DLat;


Сверху оригинал на Java, снизу мой перевод на Delphi. Результаты не сходятся. Что я упустил?


 
kilkennycat ©   (2014-12-01 23:12) [1]

Условие цикла?


 
Ellisium ©   (2014-12-01 23:15) [2]

А пофлудить можно?

Ты на Java пишешь в каком контексте?


 
DVM ©   (2014-12-01 23:17) [3]

Index чему равен в начале?


 
Kerk ©   (2014-12-01 23:17) [4]


> kilkennycat ©   (01.12.14 23:12) [1]
> Условие цикла?

Вроде бы у while и until условия должны быть наоборот.


 
DVM ©   (2014-12-01 23:17) [5]


> Ellisium ©   (01.12.14 23:15) [2]
> А пофлудить можно?
>
> Ты на Java пишешь в каком контексте?

это он портирует что-то связанное с https://developers.google.com/maps/documentation/directions/?csw=1


 
junglecat ©   (2014-12-01 23:20) [6]

> Что я упустил?

содержимое Encoded совпадает?


 
jack128 ©   (2014-12-01 23:22) [7]

Что мешает использовать дебагер ?


 
kilkennycat ©   (2014-12-01 23:23) [8]

не наоборот


 
DVM ©   (2014-12-01 23:24) [9]


> Kerk ©

если encoded - это строка (а в оригинале она строка и начальное значение Index =0), то очевидно что-то не то получается, если конечно у строк индексация как обычно с 1, а не с 0.


 
DVM ©   (2014-12-01 23:28) [10]

кстати, да, do...while в Java это тоже самое, что repeat...until в паскале, а в Java есть еще просто while цикл.


 
kilkennycat ©   (2014-12-01 23:29) [11]

Или все-таки нет? Епрст, простейших вещей не помним :)


 
junglecat ©   (2014-12-01 23:35) [12]

> do...while в Java это тоже самое, что repeat...until в паскале

while - пока, until - пока не
в жабе должно быть как в си


 
Kerk ©   (2014-12-01 23:36) [13]


> junglecat ©   (01.12.14 23:20) [6]
>
> > Что я упустил?
>
> содержимое Encoded совпадает?

Конечно :)

> DVM ©   (01.12.14 23:24) [9]
>
> > Kerk ©
>
> если encoded - это строка (а в оригинале она строка и начальное
> значение Index =0), то очевидно что-то не то получается,
>  если конечно у строк индексация как обычно с 1, а не с 0.

Хорошая мысль, но я перепроверил, с индексами все в порядке. Изначально Index = Low(Encoded)

> кстати, да, do...while в Java это тоже самое, что repeat.
> ..until в паскале

По-моему, это не так.

Я сейчас подозреваю, что виноваты операции << и >>. В Delphi это логический сдвиг, а в Java - арифметический, если я все правильно понял.


 
jack128 ©   (2014-12-01 23:37) [14]


> Епрст, простейших вещей не помним :)

тут нужно английский язык знать. Ну в крайнем случае - зайти на ideone и проверить.


 
DVM ©   (2014-12-01 23:38) [15]


> Kerk ©   (01.12.14 23:36) [13]


> > кстати, да, do...while в Java это тоже самое, что repeat.
>
> > ..until в паскале
>
> По-моему, это не так.

в интернетах пишут что так:
http://metanit.com/java/tutorial/2.6.php


 
Kerk ©   (2014-12-01 23:40) [16]


> DVM ©   (01.12.14 23:38) [15]

По твоей ссылке:
Цикл do сначала выполняет код цикла, а потом проверяет условие в инструкции while. И пока это условие истинно, цикл повторяется.


 
DVM ©   (2014-12-01 23:43) [17]


> Kerk ©   (01.12.14 23:40) [16]

точно, все у тебя верно, цикл с постусловием, но оно проверяется не так как в паскале, а наоборот.


 
KilkennyCat ©   (2014-12-01 23:56) [18]


> jack128 ©   (01.12.14 23:37) [14]

Английский? Да кому он нужен? (с) почти Симпсоны
:)


 
KilkennyCat ©   (2014-12-02 00:00) [19]

http://begin-english.ru/img/upload/gomer.jpg


 
Dimka Maslov ©   (2014-12-02 00:19) [20]

А разрядность одинаковая?


 
Eraser ©   (2014-12-02 05:40) [21]

попробуй отладчиком цикл прогнать с контролем переменных на делфи и на джаве, будет видно на каком этапе что-то пошло не так.


 
DVM ©   (2014-12-02 13:36) [22]

Так нашли ошибку то или нет?


 
junglecat ©   (2014-12-02 13:40) [23]

> виноваты операции << и >>. В Delphi это логический сдвиг,
> а в Java - арифметический

для беззнаковых типов - по барабану


 
Kerk ©   (2014-12-02 14:07) [24]


> DVM ©   (02.12.14 13:36) [22]
>
> Так нашли ошибку то или нет?

Код правильный. Это был мой глюк. Входные данные все-таки немного отличались, т.е. баг был ДО этого кода. Извиняюсь, что потратил время форумчан на ерунду.

junglecat ©   (01.12.14 23:20) [6] получает главный приз :)


 
RWolf ©   (2014-12-02 15:12) [25]


> > виноваты операции << и >>. В Delphi это логический сдвиг,
> > а в Java - арифметический
> для беззнаковых типов - по барабану


В том и соль, что в джаве нет беззнаковых типов. Зато есть отдельный логический сдвиг.



Страницы: 1 вся ветка

Текущий архив: 2015.09.10;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.075 c
15-1415309409
Юрий
2014-11-07 00:30
2015.09.10
С днем рождения ! 7 ноября 2014 пятница


2-1397985451
Andrey5
2014-04-20 13:17
2015.09.10
Проверка пароля


15-1417274328
ВладОшин
2014-11-29 18:18
2015.09.10
Что за правило?


2-1392643424
Дмитрий СС
2014-02-17 17:23
2015.09.10
Редактор очень широких текстов.


1-1330847094
rraktir
2012-03-04 11:44
2015.09.10
Проблема с DevExpress cxGrid - автоматическая перефильтрафия