Duvida com o livro como programar 6 ediçao

8 respostas
leandro-maanaim

Alguem me explica os argumentos por favor pq nao entendi nada nada nada.
vlw pessoal

import java.util.Scanner;
import javax.swing.JOptionPane;
public class MeuLivro 
{
	private String nomeDoCurso;
	private double totalDeNotas = 0;
	private double notasInseridas = 0;
	private double media = 0;
	private double contadorDeNotas = 0;
	private double notaA;
	private double notaB;
	private double notaC;
	private double notaD;
	private double notaE;
	
	
	//Construtor!
	MeuLivro(String nome)
	{
		this.nomeDoCurso = nome;
	}
	public void setConfiguraNomeDoCurso(String nome)
	{
		this.nomeDoCurso = nome;
	}
	public String getRecuperaNomeDoCurso()
	{
		return this.nomeDoCurso;
	}
	
	public void obterNotas()
	{
		Scanner ler = new Scanner(System.in);
		
		System.out.println("Entre com a nota!");
		
		while(ler.hasNext())
		{
			notasInseridas = ler.nextInt();
			totalDeNotas += notasInseridas;
			contadorDeNotas += 1;
			
			incrementaLetraContadorDeNotas(notasInseridas);//QUI ESSE ARGUMENTO NÃO ENTENDI OQUE ELE QUE DIZER
		}
	}
	
	public void incrementaLetraContadorDeNotas(notasInseridas)//AQUI TB NAO ENTENDI ESSE ARGUMENTO 	{
		switch(notasInseridas / 10)//DA ERRO AKI
		{
		case 9:
		case 10:
		++notaA;
		break;
		case 8:
			++notaB;
			break;
		case 7:
			++notaC;
			break;
		case 6:
			++notaD;
			break;
			default:
				++notaE;
			break;
		}
	}
	
	public void indicaRelatorioDeNotas()
	{
		JOptionPane.showMessageDialog(null,"Indicador de Relatório de Notas!","Informação do Sistema!",JOptionPane.INFORMATION_MESSAGE);
		
		if(contadorDeNotas != 0)
		{
			media = totalDeNotas / contadorDeNotas;
			
			System.out.println("Total de notas inseridas : "+contadorDeNotas+"\nTotal de notas: "+totalDeNotas+"");
			System.out.println("Nota A: "+notaA);
			System.out.println("Nota B: "+notaB);
			System.out.println("Nota C: "+notaC);
			System.out.println("Nota D: "+notaD);
			System.out.println("Nota E: "+notaE);
		}
	}
	public static void main(String[] args) 
	{
		MeuLivro livro = new MeuLivro("Java:");
		livro.obterNotas();
		livro.indicaRelatorioDeNotas();
		
	}
	
}

8 Respostas

lina

Oi,

Então… está passando um argumento double ao chamar o método incrementaLetraContadorDeNotas();
Está dando erro de sintax pq na assinatura do método não foi definido o tipo da variavel.

O método está assim.:

public void incrementaLetraContadorDeNotas(notasInseridas) {}

e deveria estar.:

public void incrementaLetraContadorDeNotas(double notasInseridas) {}

Tchauzin!

leandro-maanaim

eu acerteio o tipo da variavel mais o erro continua :S

lina

Oi,

Arrumando como eu falei, irá apresentar uma exceção no switch.:

Cannot switch on a value of type double. Only int values or enum constants are permitted

Ou seja, o switch não aceita valores do tipo double.

O que você pode fazer é isso.:

switch((int)(notasInseridas / 10))//DA ERRO AKI

Tchauzin!

leandro-maanaim

lina entendi agora, mais e se a nota for do tipo 8.5?

lina

Oi,

Você pode arredondar ou então não utilizar o switch :lol:

Não entendi uma coisa… porque a divisão por 10 ? (Será que estou tão mal assim em matematica :wink:)

Tchauzin!

lina

Oi,

apenas complementando o meu post, você pode arredondar sem utilizar um método especifico assim.:

int arredondado = numeroDouble + 0.5D;

Tchauzin!

leandro-maanaim

Lina nao sei se vou explicar certo pq estou aprendendo agora mais vou fala oque entendi tabom.
bom a divisao é feita por 10 por causa das variaveis de instancia que foram criadas pra armazenar os valores nas variaveis notaA, notaB …notaE. de acordo com o valor da nota…me corrige por favor se eu estiver errado.

CrOnNoS

Well, vamos ver se consigo tirar sua dúvida:

import java.util.Scanner;
import javax.swing.JOptionPane;

public class MeuLivro {
	private String nomeDoCurso;
	private double totalDeNotas = 0;
	private int notasInseridas = 0;
	private double media = 0;
	private double contadorDeNotas = 0;
	private double notaA;
	private double notaB;
	private double notaC;
	private double notaD;
	private double notaE;

	// Construtor!
	MeuLivro(String nome) {
		this.nomeDoCurso = nome;
	}

	public void setConfiguraNomeDoCurso(String nome) {
		this.nomeDoCurso = nome;
	}

	public String getRecuperaNomeDoCurso() {
		return this.nomeDoCurso;
	}

	public void obterNotas() {
		Scanner ler = new Scanner(System.in);

		System.out.println("Entre com a nota!");

		while (ler.hasNext()) {
			notasInseridas = ler.nextInt();
			totalDeNotas += notasInseridas;
			contadorDeNotas += 1;

			incrementaLetraContadorDeNotas(notasInseridas);
			// Esse argumento é uma nota qualquer que vai variar de 0 a 100
			// (inteiro, se fosse para ser double, como está, não haveria o
			// porque da divisão por 10 no switch) (e também, é usado o método
			// "nextInt" do objeto scanner para ler o valor. Ou seja, com
			// certeza a intenção era ler um int)
		}
	}

	public void incrementaLetraContadorDeNotas(int notasInseridas)
	// Considerando o que falei em cima, esse argumento deveria ser um inteiro
	// (e não um double).
	// Esse argumento é a nota de um aluno qualquer onde esse método vai
	// analiza-la para ver se é referente a um "E" (5 ou -, referente ao caso
	// default do switch), "D" (caso 6 do switch) e assim por diante.

	// Após determinar a que nota esse valor refere, o método incrementa o valor
	// que conta quantas dessa nota foram computadas. Se for lido dois "9" e um
	// "10", esse método será chamado três vezes e a variável "notaA" será
	// incrementada três vezes (pois o case 9: não tem break;, portanto o case
	// 10: é executado no case 9 também.)
	{
		switch (notasInseridas / 10)// DA ERRO AKI
		// como a lina especificou, switch não funciona com double. Caso você
		// altere para int a variável, esse parâmetro vai retornar o valor
		// inteiro da nota / 10, ou seja, caso seja 100, retorna 10, caso seja
		// 96, retorna 9, caso seja 53, retorna 5 e assim por diante
		// Caso você queira usar o valor double mesmo, subistitua esse parâmetro
		// por ((int) notasInseridas)
		// Isso converteria o valor double em um inteiro, simplismente jogando fora
		// o que vem depois da vírgula
		{
		case 9:
		case 10:
			++notaA;
			break;
		case 8:
			++notaB;
			break;
		case 7:
			++notaC;
			break;
		case 6:
			++notaD;
			break;
		default:
			++notaE;
			break;
		}
	}

	public void indicaRelatorioDeNotas() {
		JOptionPane.showMessageDialog(null, "Indicador de Relatório de Notas!",
				"Informação do Sistema!", JOptionPane.INFORMATION_MESSAGE);

		if (contadorDeNotas != 0) {
			media = totalDeNotas / contadorDeNotas;

			System.out.println("Total de notas inseridas : " + contadorDeNotas
					+ "\nTotal de notas: " + totalDeNotas + "");
			System.out.println("Nota A: " + notaA);
			System.out.println("Nota B: " + notaB);
			System.out.println("Nota C: " + notaC);
			System.out.println("Nota D: " + notaD);
			System.out.println("Nota E: " + notaE);
		}
	}

	public static void main(String[] args) {
		MeuLivro livro = new MeuLivro("Java:");
		livro.obterNotas();
		livro.indicaRelatorioDeNotas();

	}

Edit: Só uma dica rápida, para métodos get e set, use apenas “setNomeDaVariável” e “getNomeDaVariável” ex: “setNomeDoCurso” e “getNomeDoCurso”. Esse é o padrão e pode ser exigido em alguns lugares como no framework spring.

Criado 11 de agosto de 2009
Ultima resposta 11 de ago. de 2009
Respostas 8
Participantes 3