• 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

Cloud VPS
0 głosów
452 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ź 181 wizyt
pytanie zadane 12 lutego 2020 w JavaScript przez Nowicjusz13 Użytkownik (570 p.)
0 głosów
2 odpowiedzi 377 wizyt
pytanie zadane 1 lutego 2020 w JavaScript przez Nowicjusz13 Użytkownik (570 p.)

93,460 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,837 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

Kursy INF.02 i INF.03
...