PDA

Просмотр полной версии : [Вопрос] switch VS if else



Coopr
23.04.2016, 17:28
Добрый вечер! Ребята скажите пожалуйста как будет лучше использовать??

new bomj_man[5][1]
{
1,
2,
3,
4,
5
}


new bomj_girl[6][1]
{
1,
2,
3,
4,
5,
6
}

switch:

switch(Player[playerid][pSex])
{
case 1:
{
if(Change[playerid] -- == 0) Change[playerid] = sizeof(bomj_man) - 1;
SetPlayerSkin(playerid, bomj_man[Change[playerid]][0]);
}
default:
{
if(Change[playerid] -- == 0) Change[playerid] = sizeof(bomj_girl) - 1;
SetPlayerSkin(playerid, bomj_girl[Change[playerid]][0]);
}
}

if else:

if(Player[playerid][pSex] == 1)
{
if(Change[playerid] == sizeof(bomj_man) - 1) Change[playerid] = 0;
else Change[playerid] ++;
SetPlayerSkin(playerid, bomj_man[Change[playerid]][0]);
}
else
{
if(Change[playerid] == sizeof(bomj_girl) - 1) Change[playerid] = 0;
else Change[playerid] ++;
SetPlayerSkin(playerid, bomj_girl[Change[playerid]][0]);
}

Слышал еще Тернарный оператор можно как то

Profyan
23.04.2016, 17:35
Как тебе будет удобнее,так и делай. Тут особой разницы нет. Я бы использовал if else

TheMallard
23.04.2016, 17:50
if(Change[playerid] == sizeof(Player[playerid][pSex] ? bomj_man : bomj_girl))
Change[playerid] = 0;
else
Change[playerid] = 1;
SetPlayerSkin(playerid, Player[playerid][pSex] ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);

Coopr
23.04.2016, 18:35
if(Change[playerid] == sizeof(Player[playerid][pSex] ? bomj_man : bomj_girl))
Change[playerid] = 0;
else
Change[playerid] = 1;
SetPlayerSkin(playerid, Player[playerid][pSex] ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);

Может объяснить принцип работы пожалуйста

- - - Добавлено - - -

Вместо всего этого:


switch(Player[playerid][pSex])
{
case 1:
{
if(Change[playerid] -- == 0) Change[playerid] = sizeof(bomj_man) - 1;
SetPlayerSkin(playerid, bomj_man[Change[playerid]][0]);
}
default:
{
if(Change[playerid] -- == 0) Change[playerid] = sizeof(bomj_girl) - 1;
SetPlayerSkin(playerid, bomj_girl[Change[playerid]][0]);
}
}

У нас будет выглядить так я прав???

if(Change[playerid] --/*(листаем на 1 назад)*/ == 0) Change[playerid] = sizeof(Player[playerid][pSex] ? bomj_man : bomj_girl) - 1;
SetPlayerSkin(playerid, Player[playerid][pSex] ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);
SetPlayerSkin(playerid, bomj_man[Change[playerid]][0]);

Nash_Brigers
23.04.2016, 18:52
У нас будет выглядить так я прав???Да, только лишняя строчка:
SetPlayerSkin(playerid, bomj_man[Change[playerid]][0]);

Coopr
23.04.2016, 18:59
if(Change[playerid] --/*(листаем на 1 назад)*/ == 0) Change[playerid] = sizeof(Player[playerid][pSex] ? bomj_man : bomj_girl) - 1;
SetPlayerSkin(playerid, Player[playerid][pSex] ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);




Если вас не затруднит можете подробнее рассказать что да как это получилось, Что то про Тернарный оператор прочёл не не понял

Nash_Brigers
23.04.2016, 19:04
if(Change[playerid] --/*(листаем на 1 назад)*/ == 0) Change[playerid] = sizeof(Player[playerid][pSex] ? bomj_man : bomj_girl) - 1;
SetPlayerSkin(playerid, Player[playerid][pSex] ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);




Если вас не затруднит можете подробнее рассказать что да как это получилось, Что то про Тернарный оператор прочёл не не понял
В общем смотри.. Рассмотрим на примере:

Player[playerid][pSex] ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]Расшифровываю: Player[playerid][pSex] не равен нулю ? тогда bomj_man[Change[playerid]][0] : в остальных случаях bomj_girl[Change[playerid]][0]

Еслиб, к примеру, мужской пол у тебя был двойка:

(Player[playerid][pSex] == 2) ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]
Учитель из меня ни какой, не знаю понятно ли..

TheMallard
23.04.2016, 19:05
Тернарный оператор работает так.

условие ? результат1 : результат2

Если условие true (>=1), то берется результат1, если условие false (0<=), то берется результат2. Ничего сложного.

Coopr
23.04.2016, 19:12
Спасибо огромное ребята


Player[playerid][pSex]/*(тут у нас пол 1(муж.) 2(жен))*/ ? bomj_man[Change[playerid]][0]/*Player[playerid][pSex] если выдаёт 1 то использует это*/ : bomj_girl[Change[playerid]][0]/*если 2 то используем это*/
Правильно понял??

Nash_Brigers
23.04.2016, 19:17
Спасибо огромное ребята


Player[playerid][pSex]/*(тут у нас пол 1(муж.) 2(жен))*/ ? bomj_man[Change[playerid]][0]/*Player[playerid][pSex] если выдаёт 1 то использует это*/ : bomj_girl[Change[playerid]][0]/*если 2 то используем это*/
Правильно понял??Не совсем.. Если у тебя 1 мужики, то:

(Player[playerid][pSex] == 1) ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0];
Если просто Player[playerid][pSex], то он посмотрит есть ли значение в этой переменной или 0 в ней.


В общем
Player[playerid][pSex] ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0];
равносильно
(Player[playerid][pSex] != 0) ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0];

Coopr
23.04.2016, 19:43
if(clickedid == <<[0])
{
if(Change[playerid] -- == 0) Change[playerid] = sizeof(Player[playerid][pSex] == 1 ? bomj_man : bomj_girl) - 1;
SetPlayerSkin(playerid, Player[playerid][pSex] == 1 ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);
}

При компилирование:


C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : error 001: expected token: "]", but found "-identifier-"
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : warning 215: expression has no effect
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : error 001: expected token: ";", but found "]"
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : error 029: invalid expression, assumed zero
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.

Nash_Brigers
23.04.2016, 20:05
if(clickedid == <<[0])
{
if(Change[playerid] -- == 0) Change[playerid] = sizeof(Player[playerid][pSex] == 1 ? bomj_man : bomj_girl) - 1;
SetPlayerSkin(playerid, Player[playerid][pSex] == 1 ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);
}

При компилирование:


C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : error 001: expected token: "]", but found "-identifier-"
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : warning 215: expression has no effect
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : error 001: expected token: ";", but found "]"
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : error 029: invalid expression, assumed zero
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.
Ах да.. в sizeof так, вроде не получится сделать. Он не массив bomj_girl считает, а значение записанное в bomj_girl.. По другому значит надо сделать.

$continue$
23.04.2016, 20:31
Что, это за монстр такой?


if(clickedid == <<[0])

Coopr
23.04.2016, 21:10
if(Player[playerid][pSex] == 1)
{
if(Change[playerid] ++ == sizeof(bomj_man) - 1) Change[playerid] = 0;
}
else
{
if(Change[playerid] ++ == sizeof(bomj_girl) - 1) Change[playerid] = 0;
}
SetPlayerSkin(playerid, Player[playerid][pSex] == 1 ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);


if(Player[playerid][pSex] == 1)
{
if(Change[playerid] -- == 0) Change[playerid] = sizeof(bomj_man) -1;
}
else
{
if(Change[playerid] -- == 0) Change[playerid] = sizeof(bomj_girl) -1;
}
SetPlayerSkin(playerid, Player[playerid][pSex] == 1 ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);


А если я так сделаю это нормальНо? нечему не навредит?