Calculadora em MVC

20 respostas
C

Bom dia,
Estou com um problema na calculadora abaixo... eu digito um valor e na hora que clico em + ele zera... não estou conseguindo armazenar nas variaveis os valores digitados
segue os codigos.

index.jsp

<%--
    Document   : index
    Created on : 16/03/2011, 19:35:03
    Author     : Julio
--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Calculadora</title>
        <script language="javascript" type="text/javascript">
            function adiciona(valor) {
                display = document.getElementById("display");
                valorAtual = display.value;
                display.value = valorAtual + valor;
            }
        </script>
    </head>
    <body>
        <form action="/calculadora2/calcSv" name="form1" method="post">
            <table border="1" >
                <td><input id="display" size="16" name="display" value="${display}" type="text"><br /></td>
                <table border="1">
                    <tr><td><input onclick="adiciona('7');" type="button" value="7" /></td><td><input onclick="adiciona('8');" type="button" value="8" /></td><td><input type="button" onclick="adiciona('9');" value="9" /></td><td><input type="submit" name="operacao" value="/" /></td></tr>
                    <tr><td><input onclick="adiciona('4');" type="button" value="4" /></td><td><input onclick="adiciona('5');" type="button" value="5" /></td><td><input type="button" onclick="adiciona('6');" value="6" /></td><td><input type="submit" name="operacao" value="*" /></td></tr>
                    <tr><td><input onclick="adiciona('1');" type="button" value="1" /></td><td><input onclick="adiciona('2');" type="button" value="2" /></td><td><input type="button" onclick="adiciona('3');" value="3" /></td><td><input type="submit" name="operacao" value="-" /></td></tr>
                    <tr><td ><input type="submit" style="background-color:#FF0000"  name="operacao"  value="C" /></td><td><input onclick="adiciona('0');" type="button" value="0" /></td><td><input type="submit" name="operacao" value="+" /></td><td><input type="submit" name="igual" value="=" /></td></tr>
                </table>
            </table>
        </form>
    </body>
</html>

[/b]Segue a servlet

package controle;

import Modelo.calcVo;
import Modelo.divideDao;
import Modelo.multiplicaDao;
import Modelo.somaDao;
import Modelo.subtraiDao;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet(name = "calcSv", urlPatterns = {"/calcSv"})
public class calcSv extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        RequestDispatcher view = request.getRequestDispatcher("index.jsp");/*envia para o jsp*/

        String valor = request.getParameter("display");
        int resultado = Integer.parseInt(valor);
        int valor2 = Integer.parseInt(valor);
        String opcao = request.getParameter("operacao");
        String op = request.getParameter("igual");
        
        somaDao soma = new somaDao();
        subtraiDao subtrai = new subtraiDao();
        multiplicaDao multiplica = new multiplicaDao();
        divideDao divide = new divideDao();

        calcVo calc = new calcVo();
        calc.setValor1(resultado);
        calc.setValor2(valor2);
int result = 0;
        if (calc.getValor1() != 0 || calc.getValor2() != 0) {

            if ("+".equals(opcao)) {
               result = soma.soma();
            }
            if ("-".equals(opcao)) {
                resultado = subtrai.subtrai();
            }
            if ("/".equals(opcao)) {
                resultado = divide.divide();
            }
            if ("*".equals(opcao)) {
                resultado = multiplica.multiplica();
            }
            if ("=".equals(op)){
                
            }
        }
        request.setAttribute("display", result);
        view.forward(request, response);
    }
}

[b]Segue a soma dao

package Modelo;

public class somaDao extends calcVo{
    public int soma() {
         setResultado (resultado + valor2);
        return getResultado();
    }
    }

Aguardo uma resposta... obrigado!!!

20 Respostas

C

Ninguém para me dar uma resposta???

S
view plaincopy to clipboardprint?
package controle;  
  
import Modelo.calcVo;  
import Modelo.divideDao;  
import Modelo.multiplicaDao;  
import Modelo.somaDao;  
import Modelo.subtraiDao;  
import java.io.IOException;  
import java.io.PrintWriter;  
import javax.servlet.RequestDispatcher;  
import javax.servlet.ServletException;  
import javax.servlet.annotation.WebServlet;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
  
@WebServlet(name = "calcSv", urlPatterns = {"/calcSv"})  
public class calcSv extends HttpServlet {  
  
    /**  
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. 
     * @param request servlet request 
     * @param response servlet response 
     * @throws ServletException if a servlet-specific error occurs 
     * @throws IOException if an I/O error occurs 
     */  
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
  
        RequestDispatcher view = request.getRequestDispatcher("index.jsp");/*envia para o jsp*/  
  
        String valor = request.getParameter("display");  
        int resultado = Integer.parseInt(valor);  
        int valor2 = Integer.parseInt(valor);  
        String opcao = request.getParameter("operacao");  
        String op = request.getParameter("igual");  
          
        somaDao soma = new somaDao();  
        subtraiDao subtrai = new subtraiDao();  
        multiplicaDao multiplica = new multiplicaDao();  
        divideDao divide = new divideDao();  
  
        calcVo calc = new calcVo();  
        calc.setValor1(resultado);  
        calc.setValor2(valor2);  
int result = 0;  
        if (calc.getValor1() != 0 || calc.getValor2() != 0) {  
  
            if ("+".equals(opcao)) {  
               result = soma.soma(calc.getValor1(),calc.getValor2());  
            }  
            if ("-".equals(opcao)) {  
                resultado = subtrai.subtrai();  //TROCA PARA result  em vez de resultado
            }  
            if ("/".equals(opcao)) {  
                resultado = divide.divide();  //TROCA PARA result 
            }  
            if ("*".equals(opcao)) {  
                resultado = multiplica.multiplica();  //TROCA PARA result 
            }  
            if ("=".equals(op)){  
                  
            }  
        }  
        request.setAttribute("display", result);  
        view.forward(request, response);  
    }  
}

Ai depois

public class somaDao extends calcVo{  
    public int soma(int resultado, int valor2) {  
         setResultado (resultado + valor2);  
        return getResultado();  
    }  
    }
T

Cruzes!

nao me venha com essa codificação ultrapassada

voce deveria tentar algo com JSF, Facelets, etc

é MUITO mais facil :smiley:

C

Ok… eu fiz o result só para fazer um teste…

request.setAttribute("display", result); // aqui antes era resultado como nos outros.
        view.forward(request, response);

Sempre quando clico em mais está me retornando zero…
me ajudem…

S

Takeshi mó TrollFace mesmo rsrrs…

Alterasse a passagem de parametro ??
Da uma olhada no meu comentario anterior, o procedimento Soma…

C

Alterei agora ta dando erro na servlet…

método soma… esta dizendo para mim criar um metodo soma na dao…

Ele não está agora reconhecendo o metodo soma na dao.

S

Você alterou o método como eu botei no meu comentario ?
Seu metódo soma no dao tem que receber os 2 parametros…

public class somaDao extends calcVo{    
    public int soma(int resultado, int valor2) {    
         setResultado (resultado + valor2);    
        return getResultado();    
    }    
    }
C

Opa desculpe eu não tinha visto esta linha de código…

if ("+".equals(opcao)) { result = soma.soma(calc.getValor1(),calc.getValor2()); }

Agora quando executo… digito por exemplo 6 … na hora que clico em + ele já me retorna 12.

T

Desenvolvimento Web com Java só sei JSF e olhe lá, sinto não poder ajudar.

Alguem poderia me ajudar aqui?

S

Putz mano, agora entendi o que voce quer fazer…
Então assim calcVo calc = new calcVo(); <----
Vais ter que transformar essa variavel para Global, porque você vai ter que manter o valor anterior.

Vamos la…

@WebServlet(name = "calcSv", urlPatterns = {"/calcSv"})    
public class calcSv extends HttpServlet {    
    
    /**   
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.  
     * @param request servlet request  
     * @param response servlet response  
     * @throws ServletException if a servlet-specific error occurs  
     * @throws IOException if an I/O error occurs  
     */    
    calcVo calc = new calcVo();  
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)    
            throws ServletException, IOException {    
    
        RequestDispatcher view = request.getRequestDispatcher("index.jsp");/*envia para o jsp*/    
    
        String valor = request.getParameter("display");    
        int valor2 = Integer.parseInt(valor);    
        String opcao = request.getParameter("operacao");    
        String op = request.getParameter("igual");    
            
        somaDao soma = new somaDao();    
        subtraiDao subtrai = new subtraiDao();    
        multiplicaDao multiplica = new multiplicaDao();    
        divideDao divide = new divideDao();    
        calc.setValor2(valor2);    
         int result = 0;    
        if (calc.getValor1() != 0 || calc.getValor2() != 0) {    
    
            if ("+".equals(opcao)) {    
               result = soma.soma(calc.getValor1(),calc.getValor2());    
               calc.setValor1(result);  
            }    
            if ("-".equals(opcao)) {    
                result= subtrai.subtrai(calc.getValor1(),calc.getValor2()); 
               calc.setValor1(result);  
            }    
            if ("/".equals(opcao)) {    
                result= divide.divide(calc.getValor1(),calc.getValor2());  
               calc.setValor1(result);  
            }    
            if ("*".equals(opcao)) {    
                result= multiplica.multiplica(calc.getValor1(),calc.getValor2());  
                calc.setValor1(result);  
            }    
            if ("=".equals(op)){    
                calc.setValor1(result);  
            }    
        }    
        request.setAttribute("display", result);    
        view.forward(request, response);    
    }    
}

Ve se assim vai…

C

Agora a hora digito 6 e clico em somar me retorna 219… não deixar eu digitar o segundo valor para somar…

C

Passei a informação errada…

quando digito 6… e clico em +… dai de novo 6 …
na tela fica 66… ele ta trazendo um valor do lado do outro…

S

Não mano, ai você que ta interpretando errado…
Tua calculadora não ta sendo quenem a calculadora do Windows…
É assim… digita 6
Clicar em soma…
Continua 6…
Ai adiciona outro numero… Exemplo… Apaga o 6 e bota 12…
Clicar em Soma… vai aparecer 18 na tela…
Você esta usando o mesmo 'display" para exibir o resultado e o valor que você quer somar, por isso da essa má interpretação…
Se você quiser fazer que nem a calculadora do windows, ai vai ter que pensar mais…
Pega uns tutorial na net…

C

Sim deu certo do jeito que vc falou… mais não tem como fazer quando o cara clicar em “=” para retornar o resultado?

porque só quando clico em mais de novo que ele traz o resultado…

tem como fazer isso?

valeu.

S
if ("=".equals(opcao)){      
                calc.setValor1(result);    
       }
C

Está me retornando zero na hora que clico no igual para todas as operações.

S

Perdão, eu fiz errado…

if ("=".equals(opcao)){        
     result=     calc.getValor1();      
}
C

agora eu digito assim 6 dai + apago o 6 e digito 3 … dai clico em igual e retorna 6 de novo…

outra coisa é que quando clico em “C” para zerar o display, vou tentar fazer outra operação ele fica trazendo um monte de numero nada a ve na tela…

tipo os numeros estão ficando gravados na variaveis…
como posso retirar isso?

S

if ("C".equals(opcao)){ calc.setValor1(0); result= calc.getValor1(); }

Novamente é só questão de interpretação…
Voce teria que criar um procedimento que armazena a função… e
Cara, é complicado, é tudo questão de lógica…
Vou deixar isso com você…

C

blz… valeu ai pela ajuda… qualquer duvida eu pergunto de novo…

valeu mesmo… abraço.

Criado 23 de março de 2011
Ultima resposta 23 de mar. de 2011
Respostas 20
Participantes 3