• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Nie działający warunek pętli while JavaScript

Object Storage Arubacloud
0 głosów
514 wizyt
pytanie zadane 21 czerwca 2020 w JavaScript przez Marak123 Stary wyjadacz (11,190 p.)
zamknięte 23 czerwca 2020 przez Marak123

Mam warunek pętli while ale nie działa w ogóle nie reaguje i pętla robi się w nieskończoność to jest kod:

miejsce = znak_x;
namierz = wyrazenie.charAt(miejsce);
while(namierz !== "+" || namierz !== "-" || namierz !== "/"){
    miejsce = miejsce - 1;
    namierz = wyrazenie.charAt(miejsce);
    console.log(miejsce + " | " + namierz);
}
alert(miejsce)

Dodam jeszcze ze to jest wycinek z kodu a na tym wycinku jest zmienna znak_x która przechowuje miejsce znaku x w ciągu znaków, i po namierzeniu ma to tak działa ze od tego miejsca gdzie jest x odejmuje jeden i sprawdza czy na tym miejscu jest jakiś znak co widać w warunku pętli i tak w kuło a gdy wykryje ze na tym miejscu jest jeden z 3 znaków wypisze to miejsce tylko ze to się wykonuje w nieskończoność i nie wiem czemu. Wie ktoś może czemu?

komentarz zamknięcia: Dzięki wszystkim za pomoc
komentarz 21 czerwca 2020 przez ScriptyChris Mędrzec (190,190 p.)

Czy w konsoli są jakieś błędy? Jakie wartości początkowo mają zmienne miejsce oraz namierz? Co konkretnie zawiera zmienna wyrazenie?

komentarz 21 czerwca 2020 przez Marak123 Stary wyjadacz (11,190 p.)
Błędów w konsoli nie ma

Zmienna miejsce początkową mają zależnie od tego na jakiej pozycji w zmiennej wyrazenie będzie x

a zmienna namierz przechowuje wynik pozycji która jest podana po przez zmienną miejsce

zmienna wyrazenie przechowuje ciąg znaków np. 12+12x12

2 odpowiedzi

0 głosów
odpowiedź 21 czerwca 2020 przez Comandeer Guru (600,730 p.)

W chwili, gdy licznik będzie wskazywał <= 0, to warunek pętli będzie zawsze spełniony. Pusty string jest przecież inny od wymienionych w warunkach znaków. Dlatego musiałbyś też sprawdzić, czy namierz !== ''.

komentarz 22 czerwca 2020 przez Marak123 Stary wyjadacz (11,190 p.)
Jak pusty string jest inny od wymienionych w warunku? To ma działać tak że po wpisaniu w znacznik input wartość zostanie odczytana i zapisana w zmiennej wyrazenie
komentarz 22 czerwca 2020 przez Comandeer Guru (600,730 p.)

Jak pusty string jest inny od wymienionych w warunku?

Normalnie :P W warunku masz wymienione trzy konkretne znaki, żaden z nich nie wygląda jak pusty string. A nigdzie nie masz ograniczenia, żeby miejsce nie było ujemne. W chwili, gdy jest ujemne, charAt będzie zawsze zwracać pusty string i przez to pętla się nigdy nie zakończy. Stąd musisz dodatkowo sprawdzić, czy namierz ma wartość.

komentarz 22 czerwca 2020 przez Marak123 Stary wyjadacz (11,190 p.)
A w takim sensie. Albo mogę też sprawdzić czy miejsce jest większe lub równe 0
komentarz 22 czerwca 2020 przez Marak123 Stary wyjadacz (11,190 p.)
I powiem że zrobiłem tak ale i tak nie działa ten warunek z zakańczaniem pętli gdy w zmiennej namierz będzie jeden z tych znaków
komentarz 22 czerwca 2020 przez Comandeer Guru (600,730 p.)

Dodatkowo występuje błąd wspomniany przez @pablop76 w jego odpowiedzi: tak zapisane warunki sprawiają, że ostatni warunek nie jest brany pod uwagę. Tutaj zastosowałbym raczej [].includes, żeby sprawdzić, czy znaki nie należą do konkretnego zbioru znaków.

komentarz 22 czerwca 2020 przez Marak123 Stary wyjadacz (11,190 p.)
indexOf dziala podobnie
komentarz 22 czerwca 2020 przez Comandeer Guru (600,730 p.)
Działa – tylko po co się z nim męczyć, skoro od ES6 mamy specjalną funkcję od sprawdzania, czy element jest w tablicy?
komentarz 22 czerwca 2020 przez Marak123 Stary wyjadacz (11,190 p.)
A na przykład po to bo muszę sprawdzić na której pozycji jest ten znak a nie czy jest tylko w tablicy
komentarz 22 czerwca 2020 przez Comandeer Guru (600,730 p.)

Hm… To równie dobrze możesz zastąpić cały ten kod czymś na kształt string.indexOf.

0 głosów
odpowiedź 21 czerwca 2020 przez pablop76 VIP (123,120 p.)
edycja 22 czerwca 2020 przez pablop76

twój warunek zawsze zwraca true bo jak pierwszy znak  nie jest "+"  to już jest true, a  jeżeli pierwszy jest "+" to jest false ale drugi jest true bo nie jest "-" bo znak nie może być jednocześnie true i false, trzeci warunek jest nigdy nie rozpatrywany 

Logiczne OR (||) expr1 || expr2 Zwraca expr1, jeśli wartość ta może być przekonwertowana na true; w przeciwnym razie zwraca expr2. Tak więc, używany z wartościami typu logicznego, operator || zwraca true którykolwiek z operandów równy jest true.
komentarz 22 czerwca 2020 przez Marak123 Stary wyjadacz (11,190 p.)
yyy co? Nie skumałem. Wiesz może jak zrobić tak aby pętla przestała się wykonywać gdy przynajmniej jeden warunek będzie spełniony?
komentarz 22 czerwca 2020 przez pablop76 VIP (123,120 p.)

Tak jak napisał @Comandeer użyj includes lub np. zwykła pętla for z warunkiem if

Podobne pytania

0 głosów
1 odpowiedź 201 wizyt
pytanie zadane 9 lutego 2023 w C i C++ przez Mefer Nowicjusz (140 p.)
0 głosów
2 odpowiedzi 136 wizyt
pytanie zadane 27 grudnia 2015 w C i C++ przez macik1423 Początkujący (480 p.)
0 głosów
1 odpowiedź 118 wizyt
pytanie zadane 25 lipca 2020 w Java przez Programmingc100 Bywalec (2,620 p.)

92,539 zapytań

141,382 odpowiedzi

319,481 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...