Problema com o código

4 respostas
T

Tô tentando achar o erro desse código para poder concertá-lo. Alguém me ajuda, por favor. Deveria aparecer uma mensagem de “conta não cadastrada” quando eu digitasse o nº de uma conta que não está no sistema, mas isso não acontece.
Agradeço desde já.

CÓDIGO:

import java.util.;
import javax.swing.
;

public class principal {

/**
 * @param args
 */
public static void main(String[] args) {
	// TODO Auto-generated method stub

	int opcao;
	int pos=0;
	banco banc=new banco();
	
	
	do{
	opcao=Integer.parseInt(JOptionPane.showInputDialog("APLICAÇÃO BANCÁRIA\n"+
                                                                        "1- Criar nova conta\n"+
                                                                        "2- Realizar saque\n"+
                                                                        "3- Realizar depósito\n"+
                                                                        "4- Realizar transferência\n"+
                                                                        "5- Saldo\n"+
                                                                        "6- Sair"));
	
	switch (opcao){
	case 1: banc.Cadastrar(pos);
	break;
	case 2: banc.sacar();
	break;
	case 3: banc.depositar();
	break;
	case 4: banc.transferir();
	break;
	case 5: banc.exibir();
	break;
	case 6: break;
	default: JOptionPane.showMessageDialog(null,"opção inválida");
	
	}
}
    while (opcao!=6);

}
}

import java.util.;
import javax.swing.
;

public class banco {
//criando atributos e vetores

conta[]vconta=new conta[100];//criando o vetor
conta c=new conta();
int pos=0;

//método para cadastrar
int buscar(int nconta){
	for(int i=0;i<100;i++){//
		if(nconta==vconta[i].num_conta){
			return i;
			//se encontrar retorna a posição do vetor
			
		}
}
	
	return-1;
	//senão encontrar retorna - 1
	
}
	//método para cadastrar
int Cadastrar(int pos){
   int nconta;
   nconta=Integer.parseInt(JOptionPane.showInputDialog("Informe o nº da conta:"));
 	
	if(vconta[0]==null){
		   c.num_conta=nconta;
		   c.nome_titular=JOptionPane.showInputDialog("Nome");
		   c.saldo=Double.parseDouble(JOptionPane.showInputDialog("Saldo:"));
		   vconta[pos]=c;
		   JOptionPane.showMessageDialog(null,"conta cadastrada com sucesso!");
		   pos++;
		   
		return pos;
		  
	}
   
   if(buscar(nconta)!=-1){
		JOptionPane.showMessageDialog(null,"Conta já cadastrada");
   }
   else{
	   c.num_conta=nconta;
	   c.nome_titular=JOptionPane.showInputDialog("Nome");
	   c.saldo=Double.parseDouble(JOptionPane.showInputDialog("Saldo:"));
	   vconta[pos]=c;
	   JOptionPane.showMessageDialog(null,"conta cadastrada com sucesso!");
	   pos++;
	   
	  
	   
   }
   return pos;
   
}
//metodo para realizar
void sacar(){
	int nconta;
	nconta=Integer.parseInt(JOptionPane.showInputDialog("Informe o nº da conta:"));
	int a=buscar(nconta);//procura se a conta existe
	if(a!=-1){ //se a conta existir
		double valor=Double.parseDouble(JOptionPane.showInputDialog("Valor:"));
		if(vconta[a].saldo<valor){ //testa se  saldo suficiente
			JOptionPane.showInternalMessageDialog(null,"Saldo insuficiente"); //senão houver saldo exibe msg
		}
		else{
			vconta[a].sacar(valor); //se houver saldo realiza a operação
		}}
	
else { //se a conta não existir exibe a msg
	JOptionPane.showMessageDialog(null,"Conta não cadastrada!");
}
}

//metodo para depositar
void depositar(){
	int nconta;
	nconta=Integer.parseInt(JOptionPane.showInputDialog("Informe o nº da conta:"));
	int a=buscar(nconta);//procura se a conta existe
	if(a!=-1){ //se a conta existir
		double valor=Double.parseDouble(JOptionPane.showInputDialog("Valor:"));
		vconta[a].depositar(valor); //se houver saldo realiza a operação
		}
	
else { //se a conta não existir exibe a msg
	JOptionPane.showMessageDialog(null,"Conta não cadastrada!");
}

}

void transferir(){

JOptionPane.showMessageDialog(null,Realizando Transferência+Conta Origem);

sacar();

JOptionPane.showMessageDialog(null,Conta Destino);

depositar();
}
void exibir(){

int nconta;

nconta=Integer.parseInt(JOptionPane.showInputDialog(Deposito,Informe o  da conta));

int a=buscar(nconta); //procura se a conta existe, armazena a resposta em “a”
if(a!=-1){
	JOptionPane.showMessageDialog(null, "Nome:\n" + vconta[a].nome_titular+
			                            "Número:\n"+vconta[a].num_conta+
			                            "Saldo:\n"+vconta[a].saldo);
}
else{//se a conta não existir exibe a msg
	JOptionPane.showMessageDialog(null,"Conta não cadastrada!");
}

}
}

import java.util.;
import javax.swing.
;

public class conta {

int num_conta;
String nome_titular;
double saldo;

void sacar(double valor){
	saldo=saldo-valor;
		}

void depositar(double valor){
	saldo=saldo+valor;
		}

}

4 Respostas

ViniGodoy

Olá, ao postar códigos, por favor use a tag code. Se não sabe como, leia:
http://www.guj.com.br/posts/list/50115.java

aeciovc

erro de semântica…

já tentou debugar??

T

cara, esse código aí muda de erro a cada segundo
eu consegui corrigir esse erro, mas o problema agora é que o vetor apaga as informações anteriores e armazena a mais recentemente armazenada

romarcio

Uma dica, ao invés de usar vetor, use uma lista.

import java.util.List;
import java.util.ArrayList;

List<Conta> vConta = new ArrayList<Conta>();
O problema pelo que percebi parece ser no vetor. Vc criou ele com 100 posições, dai tenta fazer um for em posições que ainda não receberam valores, vai dar NullPointerException.
int buscar(int nconta) {
        for (int i = 0; i < 100; i++) {//
            if ( nconta == vconta[i].num_conta ) {
                return i;
                //se encontrar retorna a posição do vetor
            }
        }
        return -1;
        //senão encontrar retorna - 1
    }

Por isso sugiro o uso de um List, ele cresce dinamicamente, não precisa definir limite.

Outro coisa, olhe isso:
conta[]vconta=new conta[100];//criando o vetor
conta c=new conta();
int pos=0;
Quando vc cria o
conta c=new conta();
todos os valores que vc inserir, serão inseridos no mesmo objeto, por isso todas as vezes q vc insere, fica sempre aparecendo o ultimo inserido. Retira ele dali onde colocou, e coloca em:
if(vconta[0]==null){

conta c=new conta();

c.num_conta=nconta;
c.nome_titular=JOptionPane.showInputDialog("Nome");
c.saldo=Double.parseDouble(JOptionPane.showInputDialog("Saldo:"));
vconta[pos]=c;
JOptionPane.showMessageDialog(null,"conta cadastrada com sucesso!");
pos++;

return pos;

}

No else abaixo também faça a mesma coisa.

Criado 18 de agosto de 2010
Ultima resposta 18 de ago. de 2010
Respostas 4
Participantes 4