Duvida basica no Scanner

10 respostas
BinhoAraujo

Ola como faço pra receber o valor usando o Scanner, com OO nao consigo fazer, sei
que é uma coisa bem basica mas alguem me da uma ajuda por favor...

public class Soma {

	private int a ;
	private int b;
	private int soma;
	
	
	public Soma(){
		
	}
	
	public void Soma(int pA, int pB, int pSoma){
		setA(pA);
		setB(pB);
		setSoma(pSoma);
	}

	public int getA() {
		return a;
	}

	public void setA(int a) {
		this.a = a;
	}

	public int getB() {
		return b;
	}

	public void setB(int b) {
		this.b = b;
	}

	public int getSoma() {
		return soma;
	}

	public void setSoma(int soma) {
		this.soma = soma;
	}
	
	public void Somando(){
		
		soma = a + b;
	}
	
	public void Imprimir(){
		
		System.out.println("A soma é: "+ soma);
	}
	
}
import java.util.*;
public class Execucao {

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

		Scanner sc = new Scanner(System.in);
		
		
		Soma objSoma = new Soma();
		
		
		System.out.println("Informe o valor de A: ");
		objSoma.a = sc.nextInt();  //a variavel "a"  me retorna um erro " the field Soma.a is not visible "

		System.out.println("Informe o valor de B: ");
		objSoma.b = sc.nextInt();  //a variavel  "b" me retorna um erro " the field Soma.a is not visible "
		
		objSoma.Somando();
		objSoma.Imprimir();
	}

}

desde já agradeço!

10 Respostas

ViniGodoy
Use seu método setter:
Scanner sc = new Scanner(System.in);
			
Soma objSoma = new Soma();
		
System.out.println("Informe o valor de A: ");
objSoma.setA(sc.nextInt());

System.out.println("Informe o valor de B: ");
objSoma.setB(sc.nextInt());
		
objSoma.Somando();
objSoma.Imprimir();
Frantic_Avenger

Use:

objSoma.setA = sc.nextInt();
objSoma.setB = sc.nextInt();

ou use o construtor que você colocou.

int primeiroNum, segundoNum;

System.out.println("Informe o valor de A: ");   
        primeiroNum = sc.nextInt();
System.out.println("Informe o valor de B: ");   
        segundoNum = sc.nextInt();

Soma objSoma = new Soma(primeiroNum, segundoNum);   //Retire o 3º parâmetro

Não esqueça de tratar as exceções.

Flw

Frantic_Avenger

Pow demorei 4 segundos a mais que o Vini para resonder. :lol:

BinhoAraujo

ViniGodoy,
muito obrigado deu certo =)
coisinha basica e eu sem conseguir ein? :oops:

Frantic Avenger,
cara valeu por ajudar, mas nao consegui do jeito que tu falou nao.
e do jeito do ViniGodoy ficou mais facil.
Abraaxx

ViniGodoy

Outra coisa. Fazer a soma é um serviço da classe. Então, não faz sentido um método chamado "setSoma". O usuário só deve se preocupar em setar a e b, pois a classe é quem sabe como somar. Nem faz sentido o método somando, pois quem tem que fazer a soma é o getSoma.

Também não deveria ser uma tarefa da soma imprimir os dados. Via de regra, classes de negócio nunca solicitam dados, nem imprimem coisas na tela. Deixamos isso para as classes de visão (no caso o seu main). Assim fica mais fácil caso você queira transformar essa aplicação de soma numa aplicação swing, por exemplo.

Veja:

public class Soma {
	private int a = 0;
	private int b = 0;
	
	public Soma(){		
	}
	
	public void Soma(int pA, int pB){
		setA(pA);
		setB(pB);
	}

	public int getA() {
		return a;
	}

	public void setA(int a) {
		this.a = a;
	}

	public int getB() {
		return b;
	}

	public void setB(int b) {
		this.b = b;
	}

	public int getSoma() {
		return a + b;
	}
}
O main ficaria assim:
import java.util.*;
public class Execucao {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		Soma objSoma = new Soma();
				
		System.out.println("Informe o valor de A: ");
		objSoma.setA(sc.nextInt()); 

		System.out.println("Informe o valor de B: ");
		objSoma.setB(sc.nextInt()); 

		System.out.println("A soma é: "+ objSoma.getSoma());
	}
}
Frantic_Avenger

Tem razão acabei copiando seu código e aí escrevi errado.

O certo seria:

objSoma.setA(sc.nextInt()); objSoma.setB(sc.nextInt());
Como o Vine falou e não

objSoma.setA = sc.nextInt(); objSoma.setB = sc.nextInt();
Como eu escrevi.

Desculpa aí. Flw

BinhoAraujo

Ah entendido, valeu pela dica :wink:

I

Olá BinhoAraujo, acredito que o ViniGodoy já tenha matado a charada mas gostaria de reforças algums pontos!!!

objSoma.a = sc.nextInt();  //a variavel "a"  me retorna um erro " the field Soma.a is not visible "

no momento que você tem um objeto da classe soma chamado objSoma, a partir do operador (.) você terá acesso somente aos campos públicos
portanto no momento que você tenta acessar a variável a ( objSoma.a ) é gerado essa excessão ( the field Soma.a is not visible ). por esse motívo que você utiliza o encapsulamento, para ter acesso aos campos private. e sendo assim é necessário usar o setA().
OK?

BinhoAraujo

Frantic Avenger, tudo bem =)

Itopaulo,
Ok, Thanks… xD

BinhoAraujo

Aproveitando o mesmo Topico,
pq estou recebendo esse erro?

Informe o seu Peso:
80
Informe a sua Altura:
1.76
[color=red]Exception in thread "main"[/color] [color=darkblue]java.util.InputMismatchException[/color]
[color=red]at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextDouble(Unknown Source)
at Execucao.main[/color]([color=darkblue]Execucao.java:19[/color])

segue o codigo:

public class Imc {

	double massa = 0;
	double altura = 0;
	
	public Imc(){
		
	}
	
	public Imc(double pMassa, double pAltura){
		setMassa(pMassa);
		setAltura(pAltura);
	}
	
	public void setMassa(double massa){
		this.massa = massa;
	}
	
	public void setAltura(double altura){
		this.altura = altura;
	}
	
	public double getMassa(){
		return massa;
	}
	
	public double getAltura(){
		return altura;
	}
	
	public double getIMC(){
		return (massa /(altura*altura));
	
	}
	
}
import java.util.Scanner;
public class Execucao {

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

		Scanner sc = new Scanner(System.in);
		
		Imc objImc = new Imc();
		
		System.out.println("Informe o seu Peso: ");
		objImc.setMassa(sc.nextDouble());
		
		System.out.println("Informe a sua Altura: ");
		objImc.setAltura(sc.nextDouble());
		
		System.out.println("Seu IMC é: "+ objImc.getIMC());
		
	}

}
Criado 14 de abril de 2010
Ultima resposta 14 de abr. de 2010
Respostas 10
Participantes 4