Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему не работает простой код? (https://javascript.ru/forum/misc/13695-pochemu-ne-rabotaet-prostojj-kod.html)

Teddi Aps 09.12.2010 20:50

Почему не работает простой код?
 
Вот встал вопрос - как переделать код, изменяющий формат даты
Вот что написал я (это кусок кода)
{c=
a+" час";if(a>1&&a<=4)c=a+" часа";else if(a>4&&a<=20)c=a+" часов";else if(a===21)c=a+" час";else if(a>21)c=a+" часа"}

Странность заключается в том, что выводится 7 часов, но 18 часа:cray:
Что не так?
Пробовал без элсов делать, === заменял на == - не помогает
Целый день смотрел логику жавы, все вроде по правилам...
До этого работал только с Си
Помогите пожалуйста
Дополнение - в переменной а содержится само значение, в с - комбинация, насколько я понял

Kolyaj 09.12.2010 20:55

http://translate.sourceforge.net/wiki/l10n/pluralforms

Teddi Aps 09.12.2010 21:01

Это ссылка на окончания, я правильно понял? Так оно и у меня вроде реализовано...

Kolyaj 09.12.2010 21:17

Это ссылка на формы слов рядом с числительными.

dmitriymar 09.12.2010 21:27

перепиши тоже самое с фигурными скобками в ветвлениях стандарт с++ подойдёт

Teddi Aps 09.12.2010 21:39

Kolyaj, это я понял. Но дело в том что код похоже не совсем обычный. Там со скобками вообще плохо... Я это для виджета делаю
Кстати, чем == отличается от === ??? Нигде не нашел про это.
насчет скобок, фигурные надо? А то никак не работает...

dmitriymar 09.12.2010 21:45

надо в формате
if(){
.....
}
else{
if(){
....
}
else{
.....
}
}
стандарт ещё никто не отменял

Teddi Aps 09.12.2010 21:46

dmitriymar, сейчас пробую

dmitriymar 09.12.2010 21:47

если за ветвлением один оператор то скобки не обязательны. если группа то обязательное обрамление части этого кода

Teddi Aps 09.12.2010 21:56

Получилось так
{c=a+" час";if (a>1&&a<=4){c=a+" часа"};else {if(a>4&&a<=20){c=a+" часов"};else {if(a===21){c=a+" час"};else {if(a>21)c=a+" часа"}}}}

Проверить сейчас уже не получится, так как телефон заряжен... Посмотрим, примет ли вообще код
А пробелы имеют значение?
----------------
Не запустилось вообще.

Kolyaj 09.12.2010 21:56

Нормально там всё со скобками.

Number.prototype.plural = function(forms, hideNumber) {
    return (hideNumber ? '' : this.valueOf() + ' ') + forms.split('|')[Number.pluralIndex(this.valueOf())];
};

Number.pluralIndex = function(n) {
    return (n%10 == 1 && n%100 != 11 ? 0 : n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20) ? 1 : 2);
};

var plurals = [];
for (var i = 0; i < 25; i++) {
    plurals.push(i.plural('час|часа|часов'));
}
alert(plurals.join('\n'));

Teddi Aps 09.12.2010 21:58

Цитата:

Сообщение от Kolyaj (Сообщение 83083)
Нормально там всё со скобками.

Number.prototype.plural = function(forms, hideNumber) {
        return (hideNumber ? '' : this.valueOf() + ' ') + forms.split('|')[Number.pluralIndex(this.valueOf())];
    };

    Number.pluralIndex = function(n) {
        return (n%10 == 1 && n%100 != 11 ? 0 : n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20) ? 1 : 2);
    };

var plurals = [];
for (var i = 0; i < 25; i++) {
    plurals.push(i.plural('час|часа|часов'));
}
alert(plurals.join('\n'));

Ого=) Это мне в другом проекте пригодится=)

dmitriymar 09.12.2010 21:59

не думаю-всётаки основы програмирования никто не отменял и незнание их не заменял знанием более сложних вещей.это я не о человеке задавшем вопрос по теме почему код не работат

Teddi Aps 09.12.2010 22:06

Проблема в том, что для нокиевских виджетов все как-то не так. Только что перелопатил весь страничный код и привел к нормальному состоянию - телефон вообще не запустил. Похоже, придется обойтись просто сокращениями, благо один иф он понимает

dmitriymar 09.12.2010 22:08

блин подожди-это приложение для телефона? так там используется по ходу java а не javascript это разные языки.

Teddi Aps 09.12.2010 22:14

ой. да... Извиняюсь!! Просто в телефоне было "javascript file"// Сбило расширение .js, думал ява только в *жар и т.п.
Хотя если это ява, почему он свичи не понимает

dmitriymar 09.12.2010 22:16

да нет если js-то это яваскипт

Teddi Aps 09.12.2010 22:19

Какой-то упрощенный значит

dmitriymar 09.12.2010 22:22

это приложение выводиться через интернет браузер или запускается как приложение?ну а свичь и в скрипте есть

Teddi Aps 09.12.2010 22:50

Хм. Вообще как приложение, но так как там еще ксс-оформление и штмл-страницы, может и браузер затрагивает

dmitriymar 09.12.2010 22:53

телефон ведь смарт? в задачах можно посмотреть что именно работает ява или браузер или ехе скомпилированный из с#?Или могут быть просто лишние файлы чтобы запутать или случайно в процессе кочёвки приложения с телефона на телефон обменик и т.д прибились.

Teddi Aps 09.12.2010 23:03

работает экзешник. Но он сразу скрывается из меню (фишка программы). В общем большое спасибо за помощь, сейчас попробовал с конструкцией или - все равно не запускается.. Упростил код, поставил всегда отображать просто " ч"

dmitriymar 09.12.2010 23:09

ехе шник....конечно это всё жутко интересно. насколько я понимаю это какойто каллендарь? так за время этих мучений было проще на с# его по новой написать или на яве

Teddi Aps 10.12.2010 21:32

Все, что хотел -сделал=) Код не совсем красивый получился, но главное - работает=) Это не календарь, я переводил программу-батарейку (выводится на рабочий стол + в меню показывает разную информацию).
dmitriymar - отдельное спасибо

bushstas 15.12.2010 12:53

<script>
a=22
c=a+" час";

if (a>1 && a<=4){c=a+" часа"}
  else {
         if(a>4 && a<=20){c=a+" часов"}
  else {
         if(a==21){c=a+" час"}
  else {
         if(a>21){c=a+" часа"}
        }
		}
		}
alert(c)		
		</script>


Часовой пояс GMT +3, время: 13:37.