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

Zamotanie w projekcie kalkulatora w JavaScript

Object Storage Arubacloud
0 głosów
346 wizyt
pytanie zadane 5 lutego 2019 w JavaScript przez prymex Obywatel (1,250 p.)
edycja 5 lutego 2019 przez prymex

Cześć po długim czasie programowania w PHP, przypominam sobie JavaScript i chciałem sam zrobić kalkulator, tylko nie chciałem żeby to był kalkulator na 2 liczby a taki naturalny tylko w pewnym momencie nie wiem co zrobić, ponieważ ani wynik mi nie wychodzi, tylko napis "NaN" ani w sumie coś chyba z Tablicami Array pomieszałem. Jeżeli ktoś ma chwilkę czasu proszę o pomoc.

<!DOCTYPE html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <title>Kalkulator</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body{
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }
        
        .main{
            width: 400px;
        }
        
        .score{
            width: 100%;
            height: 30px;
        }
        
        #plus{
            height: 50px;
        }
        
        #zero{
            width: 100px;
        }
        
        input{
            width: 50px;
            height: 25px;
        }
    
    </style>
</head>
<body>
    <div clas="main">
        <input class="score">
        <table>
            <tr>
                <td><input type="button" value="O"></td>
                <td><input type="button" value="C"></td>
                <td><input type="button" value="/"></td>
                <td><input type="button" value="*"></td>
            </tr>
            <tr>
                <td><input type="button" value="7" class="siedem"></td>
                <td><input type="button" value="8"></td>
                <td><input type="button" value="9"></td>
                <td><input type="button" value="-"></td>
            </tr>
            <tr>
                <td><input type="button" value="4"></td>
                <td><input type="button" value="5"></td>
                <td><input type="button" value="6"></td>
                <td><input type="button" value="+"></td>
            </tr>
            <tr>
                <td><input type="button" value="1"></td>
                <td><input type="button" value="2"></td>
                <td><input type="button" value="3"></td>
                <td rowspan="2"><input id="plus" type="button" value="="></td>
            </tr>
            <tr>
                <td colspan="2"><input id="zero" type="button" value="0"></td>
                <td><input type="button" value="."></td>
            </tr>
        </table>
    </div>
    <script>
    
        const inp = document.querySelectorAll('input');
        
        for(i=0; i < inp.length; i++){
        inp[i].addEventListener("click", function (){
        
            const liczba = new Array();
            liczbaz = 0;
            
            if(isFinite(this.value)==true || this.value=="."){
                
            document.querySelector('.score').value = document.querySelector('.score').value + this.value; 
            liczba.push = this.value;
            console.log(liczba);
            liczbaz++;
            }
            else{ 
                
                if(this.value!="="){
                    
                    var znak = this.value;
                    document.querySelector('.score').value = this.value;
                    
                }
                else{
                    
                    //for(a=0; a < liczbaz; a++){
                    
                    //var wynik = liczba[liczbaz]; 
                    //}
                
                    
                    var wynik = Number(liczba[1])+znak+Number(liczba[2])
                    
                    document.querySelector('.score').value = '='+wynik;
                }
                
            }
        })}
        
        
    </script>
</body>
</html>

 

komentarz 5 lutego 2019 przez kenjiro244 Dyskutant (8,600 p.)

Nie wiem jak to ma się do błędu ale metoda push powinna chyba wyglądać tak push:

liczba.push(this.value);

 

1 odpowiedź

0 głosów
odpowiedź 16 lutego 2020 przez cani Bywalec (2,060 p.)

zauwazylem kilka bledow:

-zmienna "znak" nie jest w zakresie zmiennych dla wyniku, trzeba zmienic miejsce jej deklaracji,

-zamiast "liczba.push = argumenty", powinno byc "liczba.push(argumenty)",

-zmienna liczba jest resetowana za kazdym razem wykonywania kodu w pentli, trzeba wyciagnac ją z tej pentli,

-zmienna wynik daje nam stringa, np. "4+3". zamiast tego powinna dodawac do siebie. metoda eval(), zamienia string w rownania (nie polecam uzywania tej metody, wiecej przeczytasz o tym tutaj: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval)

moja propozycja zmiany kodu

var znak
     const liczba = new Array();
        const inp = document.querySelectorAll('input');
        for(i=0; i < inp.length; i++){
        inp[i].addEventListener("click", function (){
         
            liczbaz = 0;
             
            if(isFinite(this.value)==true || this.value=="."){
                 
            document.querySelector('.score').value = document.querySelector('.score').value + this.value; 
            liczba.push(this.value);
            console.log(liczba);
            liczbaz++;
            }
            else{ 
                 
                if(this.value!="="){
                     
                     znak = this.value;
                    document.querySelector('.score').value = this.value;
                     
                }
                else{
                     
                    //for(a=0; a < liczbaz; a++){
                     
                    //var wynik = liczba[liczbaz]; 
                    //}
                 
                     
                    var wynik = eval(Number(liczba[0])+znak+Number(liczba[1]))
                     console.log(Number(liczba[0]),znak,Number(liczba[1]))
                    document.querySelector('.score').value = '='+wynik;
                }
                 
            }
        })}

 

Podobne pytania

0 głosów
1 odpowiedź 136 wizyt
pytanie zadane 12 lutego 2020 w JavaScript przez Nowicjusz13 Użytkownik (570 p.)
0 głosów
2 odpowiedzi 322 wizyt
pytanie zadane 1 lutego 2020 w JavaScript przez Nowicjusz13 Użytkownik (570 p.)

92,556 zapytań

141,403 odpowiedzi

319,560 komentarzy

61,942 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!

...