Get e Set

62 respostas
M
import java.util.Scanner;

public class Conta{

        //atributos da classe
        private int numero;
        String nomeTitular;
        private double saldo;
        Scanner entrada = new Scanner(System.in);
        
        
   
      
        
        public void  entradaDados(){
        
        	System.out.println("Informe o nome do Titular");
        	nomeTitular = entrada.nextLine();
        	System.out.println("Informe o numero da Conta");
        	numero = entrada.nextInt();
        	System.out.println("\n\nConta criada com sucesso!!!");
        
        }
       
        
        public int getNumero(){
        	return(numero);
        }
        
        public void setNumero(int numero){
        	this.numero=numero;
        }
        
         public String getNomeTitular(){   //apenas retorna o nome do tituar
         	   return nomeTitular ;
         }
         
         public void setNomeTitular(){
         	nomeTitular = nomeTitular;
         }
         
         public double getSaldo(){
         	return(saldo);
         }
       // metodos da classe
        public void sacar(double valor){
        	System.out.println("Qual o valor que deseja sacar ?");
        	valor=entrada.nextDouble();
        	if(saldo>valor){
            saldo-= valor;
            
        	}else{
        		System.out.println("O saque excede o seu limite");
        	}
        }
         public void depositar(double valor){
        	System.out.println("Qual o valor que deseja despositar ?");
            valor=entrada.nextDouble();
            saldo+=valor;
        }
        public void imprimirEstado(){
                 System.out.printf("Numero.: %d", numero);
                 System.out.printf("\nNome...: %s", nomeTitular);
                 System.out.printf("\nSaldo .: R$%.2f\n\n", saldo);
        }
}

Classe execBanco:

import java.util.Scanner;

public class execBanco{
	   public static void main(String args[]){
	   	      Conta ct1 = new Conta();
	   	      Scanner entrada = new Scanner(System.in);
	   	      int opcao=0;
	   	      
	   	    do{
	   	   
	   	    System.out.println("1-Criar conta");
        	System.out.println("2-Depositar");
        	System.out.println("3-Sacar");
        	System.out.println("4-Imprimir estado");
        	System.out.println("5-Sair");
        	System.out.printf("Qual sua opcao: ");
        	opcao=entrada.nextInt();
        	
        	if(opcao==1){
        		ct1.entradaDados();	
        		ct1.imprimirEstado();
        	}
        	if(opcao==2){
        		ct1.depositar(56);
        		ct1.imprimirEstado();
        	}
        	if(opcao==3){
        		ct1.sacar(52652);
        		ct1.imprimirEstado();
        	}
        	if(opcao==4){
        		ct1.imprimirEstado();
        		ct1.imprimirEstado();
        	}
        	
	   	    }while(opcao<5);
	   	    
	   	    
	   	      	 
	   }
}

*Na primeira vez que eu executo meu programa execBanco aparece o menu, dai eu crio uma conta, apos isso ele mostra a caonta o numero da conta e o saldo, mas quando eu vou novamente criar uma conta, ele simplesmente imprime System.out.println("Informe o nome do Titular"); ( enao deixa eu colocar o nome como se ja estivesse prenchido), dai ele ja pede o numero da conta direto, o que pode ser esse problema?

*Outra coisa que gostaria de sbaer, é como que faz para o programa ja criar um numero para minha conta, como se fosse um numero automatico!!!

62 Respostas

lina

Oi,

Bem vindo ao GUJ.

Qual a sua dúvida ?

Tchauzin!

Foxlol

Esse tah mto loko :shock:

M

alguem saberia resolver isso?, alias me explicar como procedo nisso?

Foxlol

Você está utilizando um programação mto estruturada, o que dificulta achar os erros.

Sua classe conta está com muitas responsabilidades, separe a entrada/saída de dados dela, crie outra classe para isso, e talvez vc ache o erro.

Leia mais sobre orientação a objetos/refatoração/design patterns.

Flw.

lina

Oi,

Por isso acho scanner uma droga :(

Modifique seu código:

public void  entradaDados(){   
           
            System.out.println("Informe o nome do Titular");   
            nomeTitular = entrada.next();   // Não use nextLine();
            System.out.println("Informe o numero da Conta");   
            numero = entrada.nextInt();   
            System.out.println("\n\nConta criada com sucesso!!!");   
           
        }

Tchauzin!

MarcioCasteloBranco

Lina já que você acha o Scanner um Droga , qual sua sugestão e porque?
Obrigado

G

lina, eu já estava propondo a mesma coisa, quando atualizei a página e ví sua mensagem, hehehehe. O que estava acontecendo nessa linha é que na segunda execução o nextLine vinha com um \n, então executava com nomeTitular vazio.

Quando a gerar um número de conta, leia sobre a classe java.util.Random. Há alguns métodos que podem te interessar:

new Random().nextInt() - imprime um inteiro de 0 até Integer.MAX_VALUE
new Random().nextInt(100) - imprime um inteiro de 0 até 100

MarcioCasteloBranco

Michelato na minha opinião voce deveria criar uma classe só para fazer os getts e setters, com todas variáveis de instancia private, como Fox havia falado você não esta respeitando o paradigma O.O você poderia criar uma classe Dados que seria irmã da classe contas(vc criaria metodos para manipular o estado do objeto Conta ex: setConta, sacar e fazer toda entrada de dados so na main para melhor encapsulamento).
Obrigado!!!

lina

MarcioCasteloBranco:
Michelato na minha opinião voce deveria criar uma classe só para fazer os getts e setters, com todas variáveis de instancia private, como Fox havia falado você não esta respeitando o paradigma O.O você poderia criar uma classe Dados que seria irmã da classe contas(vc criaria metodos para manipular o estado do objeto Conta ex: setConta, sacar e fazer toda entrada de dados so na main para melhor encapsulamento).
Obrigado!!!

Oi,

Na realidade… se você observar direito, ele não está utilizando uma inner class ou “classe irmã”.

Ele colocou 2 classe dentro de apenas 1 só tag [CODE]. Sendo assim, o encapsulamento dele está correto.

Vou editar o post dele e deixar separado as tags [CODE]

Tchauzin!

lina

MarcioCasteloBranco:
Lina já que você acha o Scanner um Droga , qual sua sugestão e porque?
Obrigado

Oi,

Gostaria de deixar claro que isso é apenas a minha opinião (antes que comecem a discutir comigo em relação a dizer: Scanner é uma DROGA).

1º Geralmente ocorre problema com LineFeed (\r\n)
2º Prefiro 100% utilizar Swing com JOptionPane.
3º Sim, swing tem muito BUG ainda, porém é o futuro.
4º JOptionPane é uma droga, por isso o correto é criar uma classe extends ao JOptionPane e fazer a sua.
5º Esse lance de escrever em console é para depuração.

+ou- isso… é questão de preferencia.

Tchauzin!

ViniGodoy

O scanner é bom quando você está analisando um arquivo de textos. Para leitura pelo console, ele quebra um galho, mas como a Lina falou, as vezes ele gera alguns bugs difíceis de corrigir (especialmente quando não detecta o fim da linha).

Uma das coisas que resolve é usar o nextLine() sempre. Ele é o único comando do Scanner que realmente procura por todos os terminadores.

Outra opção é inicializar um scanner com uma expressão regular adequada para o seu console. Isso nem de longe é simples, já que para sua aplicação ficar multi-plataforma, você terá que rebolar um bocado.

Claro que a Lina recomendou não usar o nextLine(), pq um programador iniciante teria dificuldades em fazer isso. O nextLine() só retorna Strings, e você precisaria fazer casts o tempo todo. Portanto, uma outra forma de atenuar o problema é não combinar o nextLine() com outros tipos de next().

M

mas se eu usar o next resolve meu problema, mas dai aparece outro, se eu digitar um nome completo da erro

ViniGodoy

É pq o separador do scanner é o espaço. Para suportar coisas com espaço vindo do console, ou vc muda esse separador, ou vc usa o nextLine(), que usará de separador a quebra de linha.

MarcioCasteloBranco

Vini legal ! Contudo possui outro método de leitura pelo teclado? O que vc acha do buffereader?
Obrigado pela atenção

MarcioCasteloBranco

Lina eu jamais brigaria com vc só gostaria de saber outras opções!!
vlw

M

entao mas dai se eu usar o nextLine() volta o problema que tinha antes onde apos criar a conta com o nome do titula, se eu for criar outra ja pula direto para o numero , ou seja o titular sempre vai ser o mesmo…

MarcioCasteloBranco

E so fazer cast como o vini falou

System.out.println("Informe o nome do Titular");
                               setNomeTitular(entrada.nextLine());
                               System.out.println("Informe o numero da Conta");
                               setNumero(Integer.parseInt(entrada.nextLine()));//cast de string para int ok
                               System.out.println("\n\nConta criada com sucesso!!!");

Outra coisa vc não ta usando os get e set que vc criou!!!
Assim vai funcionat eu testei aqui!!!

MarcioCasteloBranco

Outra coisa o seu metodo setNomeTtular esta errado!!!

public void setNomeTitular(String nomeTitular) {
        this.nomeTitular = nomeTitular;
    }

O certo seria assim!!!
Vlw

M

cannot find symbol method setNomeTitular(java.lang.String)

com aquela entrada que vc fez ficou esse erro.

MarcioCasteloBranco

Não da erro não compilei aqui rodou certinho posta te algoritimo de novo por favor!!!

MarcioCasteloBranco

Melhor vou postar o que eu fiz!!!

MarcioCasteloBranco
//Class main
public static void main(String[] args) {
        
        Conta ct1 = new Conta();
        Scanner entrada = new Scanner(System.in);
        int opcao = 0;

        do {

            System.out.println("1-Criar conta");
            System.out.println("2-Depositar");
            System.out.println("3-Sacar");
            System.out.println("4-Imprimir estado");
            System.out.println("5-Sair");
            System.out.printf("Qual sua opcao: ");
            opcao = entrada.nextInt();

            if (opcao == 1) {
                ct1.entradaDados();
                ct1.imprimirEstado();
            }
            if (opcao == 2) {
                ct1.depositar(56);
                ct1.imprimirEstado();
            }
            if (opcao == 3) {
                ct1.sacar(52652);
                ct1.imprimirEstado();
            }
            if (opcao == 4) {
                ct1.imprimirEstado();
                ct1.imprimirEstado();
            }

        } while (opcao < 5);
    }
//Class Conta
private int numero;
    String nomeTitular;
    private double saldo;
    Scanner entrada = new Scanner(System.in);

    public void entradaDados() {

        System.out.println("Informe o nome do Titular");
        setNomeTitular(entrada.nextLine());
        System.out.println("Informe o numero da Conta");
        setNumero(Integer.parseInt(entrada.nextLine()));
        System.out.println("\n\nConta criada com sucesso!!!");

    }
    public int getNumero() {
        return (numero);
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public String getNomeTitular() {   //apenas retorna o nome do tituar
        return nomeTitular;
    }

    public void setNomeTitular(String nomeTitular) {
        this.nomeTitular = nomeTitular;
    }

    public double getSaldo() {
        return (saldo);
    }
    // metodos da classe

    public void sacar(double valor) {
        System.out.println("Qual o valor que deseja sacar ?");
        valor = entrada.nextDouble();
        if (saldo > valor) {
            saldo -= valor;

        } else {
            System.out.println("O saque excede o seu limite");
        }
    }

    public void depositar(double valor) {
        System.out.println("Qual o valor que deseja despositar ?");
        valor = entrada.nextDouble();
        saldo += valor;
    }

    public void imprimirEstado() {
        System.out.printf("Numero.: %d", numero);
        System.out.printf("\nNome...: %s", nomeTitular);
        System.out.printf("\nSaldo .: R$%.2f\n\n", saldo);
    }

Vlw!!!!

M

valew…tirei muitas duvidas no seu código!

M

--------------------Configuration: --------------------
1-Criar conta
2-Depositar
3-Sacar
4-Imprimir estado
5-Sair
Qual sua opcao: 1
Informe o nome do Titular
Bruno
Informe o numero da Conta
500

Conta criada com sucesso!!!
Numero.: 500
Nome…: Bruno
Saldo .: R$0,00

1-Criar conta
2-Depositar
3-Sacar
4-Imprimir estado
5-Sair
Qual sua opcao: 2
Qual o valor que deseja despositar ?
300,00
Numero.: 500
Nome…: Bruno
Saldo .: R$300,00

1-Criar conta
2-Depositar
3-Sacar
4-Imprimir estado
5-Sair
Qual sua opcao: 1
Informe o nome do Titular
Informe o numero da Conta

Observe que no seu codigo, tipow vc executa a opção 1, depois a 2 ou outra…

quando o menu aparece denovo, voce vai criar uma nova conta ja não pede o nome do titular,pede somente o numero da conta!

porque sera isso?

M

Outra duvida, vc uso o metodo entrada de dados dentro da classa Conta…

O que fazer caso tenha outra classe que tenha o metodo entradadedados, como faria para essa nova classe acessar os atributos dessa classe, eh essa minha duvidaa

MarcioCasteloBranco

Se vc entendeu estamos todos felizes!!!
fui!!

M

olha so as duas duvidas que eu postei depois xDD

MarcioCasteloBranco

Neste seu caso vc criou os metodos gets sets e não estava usando o correto seria vc fazer a entrada de dados na main , o que vc não pode fazer e tentar criar um objeto dentro da classe dele!!
vlw!

ViniGodoy

Na verdade, apesar dos problemas, o Scanner é o melhor método de leitura do teclado.

Você só tem que entender como ele funciona. Primeiro de tudo, o Scanner não é uma classe de interface com o console. Ele é um parser.

Ele analisa um InputStream qualquer, em busca de um separador. Quando acha esse separador, ele retorna tudo o que encontrou até aquele separador. Esse separador não é um caracter, e sim uma expressão regular. Por isso, você pode usar o Scanner não só para ler do console, mas para ler arquivos também.

Ele tem alguns métodos para fazer cast automático do que foi encontrado. Entretanto, todos os métodos usam o separador padrão, que é o espaço. O método nextLine() usa o separador da quebra de linha. Por isso, combinar as duas coisas nem sempre é uma boa opção (você pode digitar um número e pressionar enter, mas como o separador do nextInt() não é o enter, o scanner continua esperando do teclado).

É por isso também que você evita muitas dores de cabeça lendo do console só com nextLine(). Você também pode usar o Scanner para fazer parse de arquivos ou ler de um socket.

Foxlol

lina:
MarcioCasteloBranco:
Michelato na minha opinião voce deveria criar uma classe só para fazer os getts e setters, com todas variáveis de instancia private, como Fox havia falado você não esta respeitando o paradigma O.O você poderia criar uma classe Dados que seria irmã da classe contas(vc criaria metodos para manipular o estado do objeto Conta ex: setConta, sacar e fazer toda entrada de dados so na main para melhor encapsulamento).
Obrigado!!!

Oi,

Na realidade… se você observar direito, ele não está utilizando uma inner class ou “classe irmã”.

Ele colocou 2 classe dentro de apenas 1 só tag [CODE]. Sendo assim, o encapsulamento dele está correto.

Vou editar o post dele e deixar separado as tags [CODE]

Tchauzin!

OO não é só encapsulamento.

Além do mais a classe dele encapsula responsabiidades erradas.

Veja pelo lado MVC da coisa :lol:

ViniGodoy

Foxlol:
OO não é só encapsulamento.

Além do mais a classe dele encapsula responsabiidades erradas.

Veja pelo lado MVC da coisa :lol:

Eu achei que essa resposta mais atrapalhou do que ajudou.

Pode não ser só encapsulamento, mas definitivamente esse é um dos conceitos mais importantes da OO. A classe dele encapsula bem a conta, já que tem os métodos “Sacar” e “Depositar”, ao invés de um “setSaldo”.

Depois, acho que não tem muito cabimento em falar de MVC aqui… Mas claro, eu também retiraria métodos como “entradaDados()” e “imprimirEstado()” da classe conta.

Foxlol

ViniGodoy:
Foxlol:
OO não é só encapsulamento.

Além do mais a classe dele encapsula responsabiidades erradas.

Veja pelo lado MVC da coisa :lol:

Eu achei que essa resposta mais atrapalhou do que ajudou.

Pode não ser só encapsulamento, mas definitivamente esse é um dos conceitos mais importantes da OO. A classe dele encapsula bem a conta, já que tem os métodos “Sacar” e “Depositar”, ao invés de um “setSaldo”.

Depois, acho que não tem muito cabimento em falar de MVC aqui… Mas claro, eu também retiraria métodos como “entradaDados()” e “imprimirEstado()” da classe conta.

Vini.

Creio que o assunto tenha perfeitamente a necessidade de estar aqui.

É melhor mostrar para a pessoa como ela mesma pode resolver o problema do que resolver o problema por ela.

Onde eu disse que encapsulamente não é importante?

A classe dele encapsula além das responsabilidades da conta, a responsabilidade de exibição de dados da mesma. Como vc mesmo disse vc não faria, e eh o que eu estou tentando falar para ele.

E vc acha q isso eh atrapalhar?

Nem comento.

[]'s

[]'s

ViniGodoy

Acho que atrapalha quando você solta um comentário genérico do tipo “Veja pelo lado MVC da coisa”, para uma pessoa que claramente está iniciando no estudo da linguagem.

É mais ou menos como você chegar para um aluno de segundo grau, que está aprendendo a calcular o ponto máximo da parábola e dizer “talvez fique melhor com uma derivada aqui”. Está certo e é real, mas o aluno te olhara com cara de perdido e, se ainda tiver o interesse, dificilmente vai conseguir entender o que é uma derivada só lendo um livro de matemática avançada.

Não estou dizendo que você está errado. Você disse:
"Além do mais a classe dele encapsula responsabiidades erradas. "

Mas não disse que responsabilidades erradas são essas. E depois falou de um padrão, que não só é muitíssimo provável que um iniciante não só não vá conhecer, como se tentar ler sobre ele, também não vá entender.

Então diga, onde o seu comentário ajudou o criador original do tópico?

Foxlol

ViniGodoy:
Acho que atrapalha quando você solta um comentário genérico do tipo “Veja pelo lado MVC da coisa”, para uma pessoa que claramente está iniciando no estudo da linguagem.

É mais ou menos como você chegar para um aluno de segundo grau, que está aprendendo a calcular o ponto máximo da parábola e dizer “talvez fique melhor com uma derivada aqui”. Está certo e é real, mas o aluno te olhara com cara de perdido e, se ainda tiver o interesse, dificilmente vai conseguir entender o que é uma derivada só lendo um livro de matemática avançada.

Não estou dizendo que você está errado. Você disse:
"Além do mais a classe dele encapsula responsabiidades erradas. "

Mas não disse que responsabilidades erradas são essas. E depois falou de um padrão, que não só é muitíssimo provável que um iniciante não só não vá conhecer, como se tentar ler sobre ele, também não vá entender.

Então diga, onde o seu comentário ajudou o criador original do tópico?

Vc está supondo que o cara é uma ANTA é isso?

Não sei vc, mas eu pelo menos, qnd ouvi falar de MVC fui saber o que era, e graças a isso sei o que é hj.

No exemplo da derivada que vc disse, faria o mesmo.

Não vou privar o kra de uma informação real e que o ajudará.

Se ele não puder absorver o conhecimento agora, mal não fará e poderá absorver isso depois.

Olhe o meu segundo post neste tópico e veja se acha complicado dele entender…nos próximos só defini mais as coisas para lhe dar diretivas.

Vc tah fazendo tempestade em copo d’água e está atrapalhando o tópico.

Sugiro que pare de criticar os posts alheios e foque no que é importante aqui.

E informação sempre é.

Flw

PS: Só um adendo. Qnd disse “Veja pelo lado MVC da coisa” e as demais coisas, eu me dirigia à LINA, que creio, parece saber o que é isso, e msm que não saiba, como eu disse, pode procurar saber :slight_smile:

jgbt

MVC tem a ver com responsablidades?

[]´s

Foxlol

jgbt:
Foxlol:

OO não é só encapsulamento.

Além do mais a classe dele encapsula responsabiidades erradas.

Veja pelo lado MVC da coisa :lol:

MVC tem a ver com responsablidades?

[]´s

Imagina.

Vc pode me dizer.

Qual a responsabilidade da View?

Qual a responsabilidade da Controller?

E qual a responsabilidade do Model?

:roll:

jgbt

Foxlol:
jgbt:
Foxlol:

OO não é só encapsulamento.

Além do mais a classe dele encapsula responsabiidades erradas.

Veja pelo lado MVC da coisa :lol:

MVC tem a ver com responsablidades?

[]´s

Imagina.

Vc pode me dizer.

Qual a responsabilidade da View?

Qual a responsabilidade da Controller?

E qual a responsabilidade do Model?

:roll:

E onde isso se aplica no problema da thread?
Onde uma simples ajustada na logica resolveria o problema.

Não adianta querer ensinar o cara a correr se ele anda nem sabe caminhar.

Vc saberia responder essas questoes? fiquei curioso agora.

[]´s

ViniGodoy

Foxlol:
Vc está supondo que o cara é uma ANTA é isso?
Não sei vc, mas eu pelo menos, qnd ouvi falar de MVC fui saber o que era, e graças a isso sei o que é hj.
No exemplo da derivada que vc disse, faria o mesmo.
Não vou privar o kra de uma informação real e que o ajudará.
Se ele não puder absorver o conhecimento agora, mal não fará e poderá absorver isso depois.
Olhe o meu segundo post neste tópico e veja se acha complicado dele entender…nos próximos só defini mais as coisas para lhe dar diretivas.
Vc tah fazendo tempestade em copo d’água e está atrapalhando o tópico.
Sugiro que pare de criticar os posts alheios e foque no que é importante aqui.
E informação sempre é.
Flw
PS: Só um adendo. Qnd disse “Veja pelo lado MVC da coisa” e as demais coisas, eu me dirigia à LINA, que creio, parece saber o que é isso, e msm que não saiba, como eu disse, pode procurar saber :)

Eu tenho bastante experiência como professor. Achei importante ressaltar que seu comentário foi genérico, porque é o tipo de comentário que deixa uma pessoa completamente perdida, ou desesperada. Você criticou diretamente o código do colega, disse que estava “errado”, mas não explicou o porque.

E depois soltou a informação genérica de ele olhar um padrão, que aos olhos do leigo parecerá demasiado complexo. Das duas uma, ou a pessoa nem sequer vai entender o que você falou, ou vai se confundir no problema dele, que para um trabalho escolar, já está mais do que bom.

Em momento nenhum sugeri que o cara é uma anta, ou que ele não será capaz de aprender esse padrão um dia. Mas a curva de aprendizado existe, é longa, e ele ainda está nos primeiros degraus dessa escalada. Vomitar um conteúdo mais avançado não só é perda de tempo, como também pode confundir quem está aprendendo.

jgbt

Exatamente. Tambem sou instrutor java a algum tempo e vejo como essa “sopa de letrinhas” do mundo java atrapalha quem esta inciando.

O cara ate tava indo bem no exercicio, e esbarrou em um problema de “mal” uso da API por falta de conhecimento. Um simples ajuste como foi sugerido resolveria e ele pode continua a quebrar a cabeça na logica.

[]´s

Foxlol

Nossa, vcs são hilários!

HUIOAEhuioAHEuiohAUIOEhUIOAHEuioHAUIOEhuioAE

Com certeza o kra não vai dormir hj por ter visto as letrinhas MVC hEOAIuhUIOAEhuiHAUeiohuioAHEuioAE

Creio que quem tah atrapalhando mais o tópico aqui não sou eu, mas vcs querendo dar uma de professores.

Comédia.

Eh nessa de “simples ajustes” que vamos criando programadores cada vez melhores, certo professores?

Abraço pra vcs, me despeço pq essa thread nem vale mais meu tempo.

Espero que alguém que saiba das capacidades de nosso “humilde” cérebro aproveite algo daqui.

Flw

ViniGodoy

Acho que aqui cabe uma comparação.

O Bjarne Stroustrup, criador do C++, escreveu um livro no passado, chamado The C++ Programming Language, que ele achou que ia servir para quem quisesse aprender C++.

Ele dava detalhes do compilador, e dicas quentes da linguagem. Abordava exemplo complexos, meandros que todo programador C++ deveria conhecer.

Resultado: O livro só foi utilizado por programadores avançados. Eu mesmo, penei para ler.

Anos mais tarde, o Stroustrup resolveu trabalhar como professor, e percebeu a gafe. O que ele fez? Ele reescreveu todo material, com a ajuda de um educador. E surgiu o livro Programming: Principles and Practice using C++.

Achei engraçado que o foxlol riu, leu, ironizou, mas não explicou as próprias perguntas. Quando foi convidado a fazer isso, abandonou o tópico. Interessante, não?

MarcioCasteloBranco

Concordo inteiramente com o Vini! Fox vc falou como um gerente de projetos para uma iniciante na arte de Javar, seus comentarios são validos , contudo vc não mostrou nenhuma solução pratica para o problema, eu tentei abstrair o minimo para não confudi-lo e resolver o problema mas agradeço pelas critica e vou analizar!!
Vlw

MarcioCasteloBranco

Fox em relação a criar classes Dados e Conta era so para abstrair a questão do objeto, e o encapsulamento, afinal ele estava criando metodos get e set e não estava utilizando!!
Vlw

lina

Oi,


PS: Só um adendo. Qnd disse “Veja pelo lado MVC da coisa” e as demais coisas, eu me dirigia à LINA, que creio, parece saber o que é isso, e msm que não saiba, como eu disse, pode procurar saber

Não sei pq o meu nome está nesse seu comentário. Apenas disse que a forma como ele postou as classes estava errada, pois ele colocou 2 classes diferentes na mesma tag , dificultando a visão de seu encapsulamento.

Estou trabalhando com JAVA (Apenas JAVA) a muito tempo, inclusive, Sou professora da faculdade Unisul e dou aula nos sabados . Você acha que não sei o que é MVC? :wink:

Bom, durante todo o meu estudo sobre java, sempre procurei estudar e pesquisar! Por tanto, a sua ideia de “procurar saber” é válida.

Segue seus post:

Entrar no tópico apenas para dizer isso? :wink:

Se ele estivesse utilizando uma programação MTO estruturada, seu programa ficaria facil de entender. Ou não? :wink:

Perfeito isso que você falou.

Você não está apressando as coisas??? olhe para a dúvida dele…

Alguem disse isso?

Tchauzin!

MarcioCasteloBranco

Lina ,quero deixar bem claro que quando me referi a vc nenhum momento fui rude, o seria rude, mas sim com curiosidade e humildade pela sua resposta para aprender algo diferente!!!

Penso que a grande valia desta e outras comunidades, e o intercambio de experiencia e pratica para um maior base na linguagem , e não exibição de algo que não e mensurável (CONHECIMENTO),então Amigos bola frente!!

M

import java.util.Scanner; public class BancoDados{ Scanner entrada = new Scanner(System.in); Banco obj = new Banco(); public void criarConta(){ System.out.println("Informe o nome do Titular: "); obj.setNomeTitular(entrada.nextLine()); System.out.println("Informe o numero da conta: "); obj.setNumero(entrada.nextInt()); System.out.println("Conta criada com sucesso!!!"); } public void Sacar(){ System.out.println("Qual é o valor que deseja sacar"); obj.setValor(entrada.nextInt()); if(obj.getValor()
public class Banco{
	
	private int numero;
	private double saldo;
	private double valor;
    private String nomeTitular;
    
    public void Banco(){
    }
    
    public String getNomeTitular(){
    	return(nomeTitular);
    }
    public void setNomeTitular(String nomeTitular){
    	this.nomeTitular=nomeTitular;
    }
    public int getNumero(){
    	return(numero);
    }
    public void setNumero(int numero){
    	this.numero=numero;
    }
    public double getValor(){
    	return(valor);
    }
    public void setValor(double valor){
    	this.valor=valor;
    }
    public double getSaldo(){
    	return(saldo);
    }
    public void setSaldo(double saldo){
    	this.saldo=0;
    }
    
    
    
}

gostaria de saber tambem se estou usando o get e set certo em meu programa
\\como faço aumentar o saldo, porque nao esta dando certo, tenho q usar o get ou o set

MarcioCasteloBranco

michelato percebi que vc esta zerando o saldo no metodo setSaldo então pra qualquer valor que vc coloque este sempre vai ser o ok!

1. public class Banco{  
   2.       
   3.     private int numero;  
   4.     private double saldo =  0; //vc pode zerar o variavel de instancia sem problema 
   5.     private double valor;  
   6.     private String nomeTitular;  
   7.       
   8.     public void Banco(){  
   9.     }  
  10.       
  11.     public String getNomeTitular(){  
  12.         return(nomeTitular);  
  13.     }  
  14.     public void setNomeTitular(String nomeTitular){  
  15.         this.nomeTitular=nomeTitular;  
  16.     }  
  17.     public int getNumero(){  
  18.         return(numero);  
  19.     }  
  20.     public void setNumero(int numero){  
  21.         this.numero=numero;  
  22.     }  
  23.     public double getValor(){  
  24.         return(valor);  
  25.     }  
  26.     public void setValor(double valor){  
  27.         this.valor=valor;  
  28.     }  
  29.     public double getSaldo(){  
  30.         return(saldo);  
  31.     }  
  32.     public void setSaldo(double saldo){  
  33.         this.saldo = saldo;  // aqui estava a incoscistencia
  34.     }  
  35.       
  36.       
  37.       
  38. }

tenta este

M
import java.util.Scanner;

public class BancoDados{
	Scanner entrada = new Scanner(System.in);
	Banco obj = new Banco();
	
	public void criarConta(){
		System.out.println("Informe o nome do Titular: ");
		obj.setNomeTitular(entrada.nextLine());
		System.out.println("Informe o numero da conta: ");
		obj.setNumero(entrada.nextInt());
		System.out.println("Conta criada com sucesso!!!");
	}
	
	public void Sacar(){
		System.out.println("Qual é o valor que deseja sacar");
		obj.setValor(entrada.nextInt());
	    if(obj.getValor()<obj.getSaldo()){
	    	System.out.println("Saque realizado com sucesso!!");
	    }else{
	    	System.out.println("O valor do saque excede o seu saldo");
	    }
    }
    public void Depositar(){
		System.out.println("Qual é o valor que deseja depositar");
		obj.setValor(entrada.nextInt());
		obj.setSaldo()+=obj.getValor();   //gostaria de saber como faço o saldo aumentar apos o deposito, mas entrando com os dados aki 
	   
    }
    
}

tenta executar ele da um erro

MarcioCasteloBranco

michelato vou analizar e lá para o final da tarde eu post ok!
Obrigado

MarcioCasteloBranco

O seu metodo de Depositar eta com uma inconsistencia!!

public void Depositar(){  
         System.out.println("Qual é o valor que deseja depositar");  
         obj.setValor(entrada.nextInt());  
         obj.setSaldo(obj.getSaldo()+obj.getValor());//tenta assim
          
     }

Vlw!!

M

emtao assim ele ainda da erro fala que nao existe a variavel getSaldo e nem getValor, e eu compilei a classe com o metodo get e set!!!

M
import java.util.Scanner;

public class BancoDados{
	Scanner entrada = new Scanner(System.in);
	Banco obj = new Banco();
	
	public void criarConta(){
		System.out.println("Informe o nome do Titular: ");
		obj.setNomeTitular(entrada.nextLine());
		System.out.println("Informe o numero da conta: ");
		obj.setNumero(entrada.nextInt());
		System.out.println("Conta criada com sucesso!!!");
		
	}
	
	public void imprimirConta(){
		System.out.println("Titular........: "+obj.getNomeTitular());  
		System.out.println("Numero da Conta: "+obj.getNumero());
		System.out.println("Saldo da Conta.: "+obj.getSaldo());
	}
	
	
	
	public void tSacar(){
		System.out.println("Qual é o valor que deseja sacar");
		obj.setValor(entrada.nextInt());
	    	obj.setSaldo(obj.getSaldo()-obj.getValor()); //assim resolve o problema?
	}
	

}
public class Banco{
	
	private int numero;
	private double saldo;
	private double valor;
    private String nomeTitular;
    
    public void Banco(){
    }
    
    public String getNomeTitular(){
    	return(nomeTitular);
    }
    public void setNomeTitular(String nomeTitular){
    	this.nomeTitular=nomeTitular;
    }
    public int getNumero(){
    	return(numero);
    }
    public void setNumero(int numero){
    	this.numero=numero;
    }
    public double getValor(){
    	return(valor);
    }
    public void setValor(double valor){
    	this.valor=valor;
    }
    
    public double getSaldo(){
    	return(saldo);
    }
    
    public void setSaldo(double saldo){
    	this.saldo=saldo;
    }
  
    
    
    
}
import java.util.Scanner;

public class executaBanco{
	public static void main(String[] args){
		Scanner entrada = new Scanner(System.in);
		BancoDados obj = new BancoDados();
		
		obj.criarConta();
		obj.imprimirConta();
		obj.tSacar();
		obj.imprimirConta();
		
	    
	    
	}
}

//essas chamadas eh so para testar nao são fixas!!!

Pessoal valeu pela a ajuda que estão dando, vocês estão sendo verdadeiros professores

*Fiz dessa maneira, esta certo?
*Usei os metodos gets e sets da maneira certa?
*Posso usar a variavel obj de chamada nas duas classes para chamar meus objetos? isso causa algum problema?

M
public class Banco{      
          
    private int numero;      
    private double saldo;      
    private double valor;      
    private String nomeTitular;      
          
    public void Banco(){      
    }      
    public String getNomeTitular(){      
        return(nomeTitular);      
    }      
    public void setNomeTitular(String nomeTitular){      
        this.nomeTitular=nomeTitular;      
    }      
    public int getNumero(){      
        return(numero);      
    }      
    public void setNumero(int numero){      
        this.numero=numero;      
    }      
    public double getValor(){      
        return(valor);      
    }      
    public void setValor(double valor){      
        this.valor=valor;      
    }      
    public double getSaldo(){      
        return(saldo);      
    }      
    public void setSaldo(double saldo){      
        this.saldo=saldo;      
    }           
}
public class Banco{   
       
    private int numero;   
    private double saldo;   
    private double valor;   
    private String nomeTitular;   
       
    public void Banco(){   
    }   
    public String getNomeTitular(){   
        return(nomeTitular);   
    }   
    public void setNomeTitular(String nomeTitular){   
        this.nomeTitular=nomeTitular;   
    }   
    public int getNumero(){   
        return(numero);   
    }   
    public void setNumero(int numero){   
        this.numero=numero;   
    }   
    public double getValor(){   
        return(valor);   
    }   
    public void setValor(double valor){   
        this.valor=valor;   
    }   
    public double getSaldo(){   
        return(saldo);   
    }   
    public void setSaldo(double saldo){   
        this.saldo=saldo;   
    }        
}
import java.util.Scanner;      
     
public class executaBanco{      
    public static void main(String[] args){      
        Scanner entrada = new Scanner(System.in);      
        BancoDados obj = new BancoDados();    
        int opcao=0;      
           
        do{   
        System.out.println("\n\n");        
        System.out.println("********************");   
        System.out.println("*1-Criar conta     *");   
        System.out.println("*2-Depositar       *");   
        System.out.println("*3-Sacar           *");   
        System.out.println("*4-Ver Saldo       *");   
        System.out.println("*5-Sair            *");   
        System.out.println("********************");   
        System.out.println("\nEscolha uma opção: ");   
        opcao=entrada.nextInt();   
           
        switch(opcao){   
              
           case 1:obj.criarConta();   
           break;   
           case 2:obj.Depositar();   
           break;   
           case 3:obj.Sacar();   
           break;   
           case 4:obj.imprimirConta();   
           break;   
        }   
        }while(opcao<=5);   
    }   
}

*Olhem meu programa irão ver o problema, quando uso o nextLine no meu metodo entradaDados eu executo o menu tudo certinho, mas dai tipow quando vou criar uma segunda conta(por cima da primeira mesmo) aparece INFOME O NOME DO TITULAR mas nao aparece para vc dar a entrada, e se eu usar somente o next() (onde so retorna uma String sem paragrafos ele da certo, mas tipo eu queria mesmo eh usar com titular com nome inteiro onde esse desse para colocar na segunda vez tambem...

*Qual o problema do meu nextLine nao executar da segunda vezz
*Queria saber se estou usando os metodos gets e sets da mandeira correta, qual a diferença se nao usase o this dentro dos gets;

MarcioCasteloBranco

Tenta este método para setSaldo
O seu metodo de Depositar eta com uma inconsistencia!!

public void Depositar(){  
         System.out.println("Qual é o valor que deseja depositar");  
         obj.setValor(entrada.nextInt());  
         obj.setSaldo(obj.getSaldo()+obj.getValor());//tenta assim
          
     }

Vlw!!

MarcioCasteloBranco

Sim, vc esta usando respeitando o contrato, public void setValor(double valor)//variavel de parâmetro this.valor = valor;//esta variavel de instancia diferente da variavel de parâmetro) { }
ok

MarcioCasteloBranco

Pra você saber o problema leia o que o Vini falou no começo do post, o que eu vou fazer e te ensinar como usa o nextLine quando vc usar o nextLine para primeira pergunta
terá que usar para segunda contudo o nextLine so ler String então como sua segunda pergunta requer int como resposta vc terá que fazer um CASTING mudar String para int esta
é uma das grandes flexibilidades do Java ao meu ver!

MarcioCasteloBranco

Você como fazer cast ?
se Não souber cria um novo post cast!!

MarcioCasteloBranco
Seu programa!!
public class BancoDados {

    Scanner entrada = new Scanner(System.in);
    Banco obj = new Banco();

    public void criarConta() {
        System.out.println("Informe o nome do Titular: ");
        obj.setNomeTitular(entrada.nextLine());
        System.out.println("Informe o numero da conta: ");
        obj.setNumero(Integer.parseInt(entrada.nextLine()));//cast de string para int
        System.out.println("Conta criada com sucesso!!!");
    }

    public void Sacar() {
        System.out.println("Qual é o valor que deseja sacar");
        obj.setValor(Integer.parseInt(entrada.nextLine()));//cast de string para int
        if (obj.getValor() <= obj.getSaldo()) {
            obj.setSaldo(obj.getSaldo() - obj.getValor());
            System.out.println("Saque realizado com sucesso!!");
        } else {
            System.out.println("O valor do saque excede o seu saldo");
        }
    }

    public void Depositar() {
        System.out.println("Qual é o valor que deseja depositar");
        obj.setValor(Integer.parseInt(entrada.nextLine()));//cast de string para int
        obj.setSaldo(obj.getSaldo() + obj.getValor());   

    }

    public void imprimirConta() {
        System.out.println("Titular........: " + obj.getNomeTitular());
        System.out.println("Numero da Conta: " + obj.getNumero());
        System.out.println("Saldo da Conta.: " + obj.getSaldo());
    }
}
MarcioCasteloBranco
Ok tudo certo parabéns pelo uso correto dos gets e sets!!!
public class Banco {

    private int numero;
    private double saldo;
    private double valor;
    private String nomeTitular;

    public void Banco() {
    }

    public String getNomeTitular() {
        return (nomeTitular);
    }

    public void setNomeTitular(String nomeTitular) {
        this.nomeTitular = nomeTitular;
    }

    public int getNumero() {
        return (numero);
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public double getValor() {
        return (valor);
    }

    public void setValor(double valor) {
        this.valor = valor;
    }

    public double getSaldo() {
        return (saldo);
    }

    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }
}
MarcioCasteloBranco
public class Main {

    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        BancoDados obj = new BancoDados();
        int opcao = 0;

        do {
            System.out.println("\n\n");
            System.out.println("********************");
            System.out.println("*1-Criar conta     *");
            System.out.println("*2-Depositar       *");
            System.out.println("*3-Sacar           *");
            System.out.println("*4-Ver Saldo       *");
            System.out.println("*5-Sair            *");
            System.out.println("********************");
            System.out.println("\nEscolha uma opção: ");
            opcao = entrada.nextInt();

            switch (opcao) {

                case 1:
                    obj.criarConta();
                    break;
                case 2:
                    obj.Depositar();
                    break;
                case 3:
                    obj.Sacar();
                    break;
                case 4:
                    obj.imprimirConta();
                    break;
            }
        } while (opcao < 5);// tinha uma inconsistência, opção tem que ser < 5, se for <= 5 fica em loop!!
    }
}
ViniGodoy

Que operações são mais naturais na conta?
depositar(double valor);

sacar(double valor);

Ou, definir um saldo específico?

A menos que você seja um político com muito poder sobre a economia, sua resposta vai ser o primeiro.
Nesse caso, métodos como setSaldo e setValor não devem existir. :wink:

MarcioCasteloBranco

Boa dica Vini, e mais objetivo, como vc falou é natural, valeu pela Dica!
Obrigado!!!

Criado 22 de outubro de 2009
Ultima resposta 25 de out. de 2009
Respostas 62
Participantes 7