Erro Construtor e outro em String

2 respostas
Yazi

Pessoal, fechei Java na faculdade e agora voltei a mecher para treinar, estou num nível bem básico ainda. Comecei a fazer aquele programinha de banco simples e tive dois problemas que tá ruim de entender, coloquei eles em comentário nos códigos abaixo.

Criei 3 classes.

Classe Conta:

import javax.swing.*;

public abstract class Conta {
	private String nome;
	private int conta;
	private double saldo, salario, limite;
	boolean verifLimite=false;
		
	public Conta(String nome, int conta, double saldo, double salario, double limite){
		setNome(nome);
		setConta(conta);
		setSaldo(saldo);
		setSalario(salario);
		setLimite(limite);
		
	}
	
	public void deposito(double deposito){
		saldo += deposito;
	}
	
	public void retira(double retira){
		if(getSaldo()>= retira)
			saldo-=retira;
			else
				JOptionPane.showMessageDialog(null, "Saldo insuficiente");
	}
	
	public void setNome(String nome){
		this.nome = nome.toUpperCase();
	}
	public void setConta(int conta){
		this.conta = conta;
	}
	public void setSaldo(double saldo){
		this.saldo = saldo > 0 ? saldo:0;
	}
	public void setSalario(double salario){
		this.salario = salario > 0 ? salario:0;
	}
	public void setLimite(double limite){
		if(this.limite <= getSalario()){
			this.limite = limite;
			verifLimite=true;
		}else
				while(verifLimite=false)
			JOptionPane.showMessageDialog(null, "O Limite deve ser maior que o salario. Digite novamente.");
		}
	public String getNome(){
		return nome;
	}
	public int getNumero(){
		return conta;
	}
	public double getSaldo(){
		return saldo;
	}
	public double getSalario(){
		return salario;
	}
	public double getLimite(){
		return limite;
	}
}

Classe ContaCorrente:

import javax.swing.*;

public class ContaEspecial extends Conta{
	private double limiteEsp;
	/*tive que colocar este "limite" aqui por que se nao o Eclipse diz que o construtor está "indefinido", este é o primeiro problema, não entendi pq ele não aceita puxar só as outras variáveis e usar o limite desta classe normalmente.*/
	public ContaEspecial(String nome, int conta, double saldo, double salario, double limiteEsp, double limite){
		super(nome, conta, saldo, salario, limite);
		setLimite(limiteEsp);
	}
	
	public void setLimite(double limite){
		if(limite*3 <= getSalario()){
			this.limiteEsp = limite;
			verifLimite=true;
		}else
			while(verifLimite=false)
			JOptionPane.showMessageDialog(null, "O valor do limite não pode ser 3x maior que o salario. Digite um novo valor limite.");
		}
	public double getLimite(){
		return limiteEsp;
	}
}

E o segundo problema está na terceira classe que criei, a classe Cartao:

import javax.swing.*;

public class Cartao extends Conta{
	private String senha="abc123";
	boolean verifSenha=false;
	
	public Cartao(String nome,int conta, double saldo, double salario, double limite){
		super(nome, conta, saldo, salario, limite);
		setSenha(senha);
		
	}
	public void alteraSenha(double senha){
		JOptionPane.showMessageDialog(null, "Siga os próximos passos para trocar sua senha.");
		String confSenha = JOptionPane.showInputDialog("Insira a senha atual: ");
		if(confSenha = getSenha()){ /*dá erro nesta linha: "Type mismatch: cannot convert from String to boolean" este é o segundo problema que não entendi.*/
			String novaSenha = JOptionPane.showInputDialog("Insira a nova senha: ");
			this.senha = novaSenha;
			verifSenha = true;
		}
		
		else
			while(verifSenha=false)
			JOptionPane.showMessageDialog(null, "Senha atual inválida. Tente novamente.");
	}
	
	public void setSenha(String senha){
		this.senha = senha;
	}
	public String getSenha(){
		return senha;
	}
}

se alguém puder me dar uma força…vlws

2 Respostas

Andre_Fonseca

Yazi:
Pessoal, fechei Java na faculdade e agora voltei a mecher para treinar, estou num nível bem básico ainda. Comecei a fazer aquele programinha de banco simples e tive dois problemas que tá ruim de entender, coloquei eles em comentário nos códigos abaixo.

Criei 3 classes.

Classe Conta:

import javax.swing.*;

public abstract class Conta {
	private String nome;
	private int conta;
	private double saldo, salario, limite;
	boolean verifLimite=false;
		
	public Conta(String nome, int conta, double saldo, double salario, double limite){
		setNome(nome);
		setConta(conta);
		setSaldo(saldo);
		setSalario(salario);
		setLimite(limite);
		
	}
	
	public void deposito(double deposito){
		saldo += deposito;
	}
	
	public void retira(double retira){
		if(getSaldo()>= retira)
			saldo-=retira;
			else
				JOptionPane.showMessageDialog(null, "Saldo insuficiente");
	}
	
	public void setNome(String nome){
		this.nome = nome.toUpperCase();
	}
	public void setConta(int conta){
		this.conta = conta;
	}
	public void setSaldo(double saldo){
		this.saldo = saldo > 0 ? saldo:0;
	}
	public void setSalario(double salario){
		this.salario = salario > 0 ? salario:0;
	}
	public void setLimite(double limite){
		if(this.limite <= getSalario()){
			this.limite = limite;
			verifLimite=true;
		}else
				while(verifLimite=false)
			JOptionPane.showMessageDialog(null, "O Limite deve ser maior que o salario. Digite novamente.");
		}
	public String getNome(){
		return nome;
	}
	public int getNumero(){
		return conta;
	}
	public double getSaldo(){
		return saldo;
	}
	public double getSalario(){
		return salario;
	}
	public double getLimite(){
		return limite;
	}
}

Classe ContaCorrente:

import javax.swing.*;

public class ContaEspecial extends Conta{
	private double limiteEsp;
	/*tive que colocar este "limite" aqui por que se nao o Eclipse diz que o construtor está "indefinido", este é o primeiro problema, não entendi pq ele não aceita puxar só as outras variáveis e usar o limite desta classe normalmente.*/
	public ContaEspecial(String nome, int conta, double saldo, double salario, double limiteEsp, double limite){
		super(nome, conta, saldo, salario, limite);
		setLimite(limiteEsp);
	}
	
	public void setLimite(double limite){
		if(limite*3 <= getSalario()){
			this.limiteEsp = limite;
			verifLimite=true;
		}else
			while(verifLimite=false)
			JOptionPane.showMessageDialog(null, "O valor do limite não pode ser 3x maior que o salario. Digite um novo valor limite.");
		}
	public double getLimite(){
		return limiteEsp;
	}
}

E o segundo problema está na terceira classe que criei, a classe Cartao:

import javax.swing.*;

public class Cartao extends Conta{
	private String senha="abc123";
	boolean verifSenha=false;
	
	public Cartao(String nome,int conta, double saldo, double salario, double limite){
		super(nome, conta, saldo, salario, limite);
		setSenha(senha);
		
	}
	public void alteraSenha(double senha){
		JOptionPane.showMessageDialog(null, "Siga os próximos passos para trocar sua senha.");
		String confSenha = JOptionPane.showInputDialog("Insira a senha atual: ");
		if(confSenha = getSenha()){ /*dá erro nesta linha: "Type mismatch: cannot convert from String to boolean" este é o segundo problema que não entendi.*/
			String novaSenha = JOptionPane.showInputDialog("Insira a nova senha: ");
			this.senha = novaSenha;
			verifSenha = true;
		}
		
		else
			while(verifSenha=false)
			JOptionPane.showMessageDialog(null, "Senha atual inválida. Tente novamente.");
	}
	
	public void setSenha(String senha){
		this.senha = senha;
	}
	public String getSenha(){
		return senha;
	}
}

se alguém puder me dar uma força…vlws

O segundo erro é mais facil de resolver, vocè está fazendo uma atribuiçao, e o esperado é uma comparação

ao invés de fazer

faça

lembre-se que o == compara se os objetos são os mesmos - apontam para a mesma posição de memória - o método equals compara os valores

o primeiro erro tem a ver com o fato de você ter declardo um construtor na classe conta, assim esta classe deixa de ter o construtor padrão que é aquele sem argumentos

A classe ContaEspecial deve ser capaz de criar um objeto do tipo ContaEspecial E um objeto do tipo Conta

Para fazer isso você deve fornecer ao construtor de ContaEspecial todos os parametros necessários para criar um objeto do tipo Conta - já que conta tem apenas um construtor com parâmetros, entendeu??

Yazi

Consegui entender sim
Valeu! brigadão!

Criado 15 de agosto de 2009
Ultima resposta 16 de ago. de 2009
Respostas 2
Participantes 2