Trabalhando com Objetos

6 respostas
IcePeak

Olá!

Eu tenho o seguinte Servlet OlaMundo.java :

package principal;

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class OlaMundo extends HttpServlet{
	
	private double Saldo;
	private String Dono;
	private double Limite;
	private double Numero;
	
	public static class Conta {
		int Numero;
		String Dono;
		double Saldo;
		double Limite;
		
			void saca(double quantidade){
				double NovoSaldo = this.Saldo - quantidade;
				this.Saldo = NovoSaldo;
				
			}
			
			public void deposita(double quantidade){
				double NovoSaldo = this.Saldo + quantidade;
				this.Saldo = NovoSaldo;
			}
			
	}

	
	public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
		//Declarando as contas a serem criadas
		Conta Mateus;
		Conta Fulano;
		Conta Ciclano;
		//Instanciando e atribiuindo valores para a conta Mateus
		Mateus = new Conta();
		
		Mateus.Numero=123456;
		Mateus.Dono="Mateus de Souza Pinheiro";
		Mateus.Saldo=10000;
		Mateus.Limite=15000;
		//Instanciando e atribiuindo valores para a conta Fulano
		Fulano = new Conta();
		
		Fulano.Numero=123456;
		Fulano.Dono="Fulano de Souza Pinheiro";
		Fulano.Saldo=8000;
		Fulano.Limite=15000;
		//Instanciando e atribiuindo valores para a conta Mateus
		Ciclano = new Conta();
		
		Ciclano.Numero=123456;
		Ciclano.Dono="Ciclano de Souza Pinheiro";
		Ciclano.Saldo=9000;
		Ciclano.Limite=15000;
		
		//Começando a escrever no HTML
		res.setContentType("text/html");
		PrintWriter pHTML =  res.getWriter();
		//Pegando os parâmetro do HTML
		String Nome = req.getParameter("Nome");
		String sSaque = req.getParameter("Saque");
		String sDeposito = req.getParameter("Deposito"); 
		int Saque = Integer.parseInt(sSaque);
		int Deposito = Integer.parseInt(sDeposito);
		
		//Realizando as operações
		if (Deposito != 0 ) {
			Nome.deposita(Deposito);
		}
		if (Saque != 0 ) {
			Nome.saca(Deposito);
		}
				
				
		pHTML.println("<HTML>");
		pHTML.println("\n<HEAD>");
		pHTML.println("\n<TITLE> Exemplo Banco </TITLE>");
		pHTML.println("\n</HEAD>");
		pHTML.println("\n<BODY>");
		pHTML.println("\n<H1>Olá Caro " + Nome + "</H1>");
		pHTML.println("\n<H2>Seu Saldo Atual é de "+ Nome.Saldo +"</H2>");
		
		if (Nome.Limite &gt Nome.Saldo) {
			pHTML.println("\n<H2>E seu limite está estourado</H2>");
		}
		
		pHTML.println("\n<H3>Conta NUM. "+ Nome.Numero +"</H3>");
		pHTML.println("\n</BODY>");
		pHTML.println("\n</HTML>");
		
		
		
	}
}

Porém, ele dá erros diferentes e eu gostaria de entender o que são esses erros e como resolvê-los.

Primeiro erro: Nas linhas 74 e 77: “The method deposita(int) is undefined for the type String” e “The method saca(int) is undefined for the type String” . O Que é isso?? Essa variável “Nome” é um campo que é preenchido no JSP e mandado para o Servlet. Este nome é para saber com qual das três contas eu irei trabalhar, Mateus, Fulano ou Ciclano.

Segundo erro: Nas linhas 89, 89 e 93: “Nome.Limite cannot be resolver or is not a field”, “Nome.Saldo cannot be resolver or is not a field” e “Nome.Numero cannot be resolver or is not a field”

6 Respostas

Guilherme_Gomes

a função getParameter devolve uma String como vc mesmo fez:

String Nome = req.getParameter("Nome");

E as funções deposita(), saca(), etc estão na classe que vc fez (Conta), não são métodos da classe String…

o que voce quer fazer num seria mais ou menos isso:

Conta x = new Conta();
x.Dono = Nome;

Daí sim vc pode usar x com as funções!!!

vanzella

Obs: procurem usar gets e sets para atribuir e resgatar valores, essa padronização facilita muito para qualquer programador que por ventura venha pegar seus codigo.
Outra coisa, html em servlets? hoje temos JSPs, se fosse a alguns anos atras até perdoaria. Fica muito dificil dar manutenção dessa forma.

Só alguns conselhos, pra quem ta começando.

IcePeak

Vanzella,

Desculpe se me expressei mal. Escrever no HTML foi só para dizer que estava escrevendo em HTML, mas o arquivo é um jsp sim =], mas valeu pela dica.

Guilherme Gomes, mas o problema é que eu tenho três contas diferentes criadas e queria que conforme o nome que eu informar a ele na JSP ele me devolva as caracterísitcas de cada um.

Por exemplo, se lá eu Informar Mateus, ele substitui por Mateus a variável Nome, e então continua executando. Mas pelo jeito não é assim que se faz.

Mas obrigado a todos pela ajuda!

Guilherme_Gomes

Entao tera que fazer diferente, tente isso:

Conta conta = null;
conta = Nome.equals(Mateus.Dono) ? Mateus : (Nome.equals(Fulano.Dono) ? Fulano : (Nome.equals(Ciclano.Dono) ? Ciclano : null));

if(conta != null){
     //mostrar dados;
}

Essa linha louca aí funciona como uns IFs, se o nome for igual ao nome do Mateus ele devolve o que está antes do “:”, senão devolve o que vem depois. E assim consecutivamente para cada parenteses.
Caso não tenha gostado:

Conta conta = null;
if(Nome.equals(Mateus.Dono))
       conta = Mateus;
else if(Nome.equals(Ciclano.Dono))
       conta = Ciclano;
else if(Nome.equals(Fulano.Dono))
       conta = Fulano;

if(conta != null){
      //mostrar dados de conta
}

Belezura?

IcePeak

Caraca… Hehehehe… Acho que vai ser um pouqinho difícil de assimilar…

Mas valeu ai… vou tentar… se der certo te aviso, ok?

Até!

IcePeak

Awe!

Acho que já faz um tempinho… tava só brincando com o código, mas tá aí!!

Consegui graças a ajuda dos amigos aqui do GUJ!

Brigado povo!

Vou Deixar aqui o código dos dois arquivos, quem quiser, aventure-se!

ContasDoBanco.java

package principal;

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class ContasDoBanco extends HttpServlet{
	
	//Declarando as variáveis private para que só possam ser vistas e chamadas por métodos,
	//Mas declara-las aqui tem vantagem de ter todo o escopo da classe principal
	private double Saldo;
	private String Dono;
	private double Limite;
	private double Numero;
	//Definindo a Classe Conta
	public static class Conta {
		int Numero;
		String Dono;
		double Saldo;
		double Limite;
			//Metodo saca da classe conta
			void saca(double quantidade){
				double NovoSaldo = this.Saldo - quantidade;
				this.Saldo = NovoSaldo;
				
			}
			//Metodo deposita da classe conta
			public void deposita(double quantidade){
				double NovoSaldo = this.Saldo + quantidade;
				this.Saldo = NovoSaldo;
			}
			
	}

	//doGet do Servlet
	public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
		//Declarando as contas a serem criadas
		Conta Mateus;
		Conta Fulano;
		Conta Ciclano;
		//Instanciando e atribiuindo valores para a conta Mateus
		Mateus = new Conta();
		
		Mateus.Numero=123456;
		Mateus.Dono="Mateus de Souza Pinheiro";
		Mateus.Saldo=10000;
		Mateus.Limite=15000;
		//Instanciando e atribiuindo valores para a conta Fulano
		Fulano = new Conta();
		
		Fulano.Numero=123456;
		Fulano.Dono="Fulano de Souza Pinheiro";
		Fulano.Saldo=8000;
		Fulano.Limite=15000;
		//Instanciando e atribiuindo valores para a conta Mateus
		Ciclano = new Conta();
		
		Ciclano.Numero=123456;
		Ciclano.Dono="Ciclano de Souza Pinheiro";
		Ciclano.Saldo=9000;
		Ciclano.Limite=15000;
		
		//Começando a escrever no HTML
		res.setContentType("text/html");
		PrintWriter pHTML =  res.getWriter();
		//Pegando os parâmetro do HTML
		String Nome = req.getParameter("Nome");
		String sSaque = req.getParameter("Saque");
		String sDeposito = req.getParameter("Deposito"); 
		int Saque = Integer.parseInt(sSaque);
		int Deposito = Integer.parseInt(sDeposito);
		
		//Definindo a conta a ser utilizada
		Conta contaEmUso = null;
		
			if(Nome.equals("Mateus")){
				contaEmUso = Mateus;
			}
			if(Nome.equals("Fulano")){
			contaEmUso = Fulano;
			}
			if(Nome.equals("Ciclano")){
			contaEmUso = Ciclano;
			}
		
		//Realizando as operações
			if (Deposito != 0 ) {
				contaEmUso.deposita(Deposito);
			}
			if (Saque != 0 ) {
				contaEmUso.saca(Saque);
			}
			//Se a conta não for nula, ele imprime as informações
			if (contaEmUso != null){		
				pHTML.println("<HTML>");
				pHTML.println("\n<HEAD>");
				pHTML.println("\n<TITLE> Conta "+ contaEmUso.Numero +" </TITLE>");
				pHTML.println("\n</HEAD>");
				pHTML.println("\n<BODY>");
				pHTML.println("\n<H1>Olá Caro " + contaEmUso.Dono + "</H1>");
				pHTML.println("\n<H2>Seu Saldo Atual é de "+ contaEmUso.Saldo +"</H2>");
		
				if (contaEmUso.Saldo &gt contaEmUso.Limite) {
					pHTML.println("\n<H2>E seu limite está estourado</H2>");
				}
		
		
				pHTML.println("\n</BODY>");
				pHTML.println("\n</HTML>");
		
			}
			//Se a conta for nula, pede para entrar com um valor válido
			else {
				pHTML.println("<H1>Favor entrar com uma conta válida!</H1>");
			}
		
	}
}

Banco.jsp

<HTML>

<HEAD>
	<TITLE>Exemplo Banco</TITLE>
</HEAD>

<BODY>


	<FORM METHOD=GET ACTION="/Projeto1/servlet/principal.ContasDoBanco">
	
		<h3>Me fale a conta de quem você quer movimentar:</h3>
		&lt;INPUT TYPE=TEXT NAME="Nome"&gt;<P>
		&lt;h3&gt;Quanto irá sacar?&lt;/h3&gt;
		&lt;INPUT TYPE=TEXT NAME="Saque"&gt;<P>
		&lt;h3&gt;Quanto irá depositar?&lt;/h3&gt;
		&lt;INPUT TYPE=TEXT NAME="Deposito"&gt;<P>
		
		&lt;INPUT TYPE=SUBMIT VALUE="Efetuar!"&gt;
		
	
	&lt;/FORM&gt;

&lt;/BODY&gt;	

&lt;/HTML&gt;

Lembrando que isso é um servlet, portanto tem de estar mapeado no web.xml e deve ser executado de dentro de um Servlet Container (Ex. Tomcat).

Até!

Criado 17 de julho de 2007
Ultima resposta 17 de jul. de 2007
Respostas 6
Participantes 3