Switch - dúvida em sua execução

Veja o seguindo código:


//GradeBook.java
//Classe GradeBook utiliza instrução switch para contas as nota A, B, C, D, E, F.

import java.util.Scanner; //importa a classe Scanner
public class GradeBook {
	
	private String courseName; //nome do curso que essa GradeBook representa
	private int total; //soma das notas
	private int gradeCounter; //número de notas inseridas
	private int aCount; //contagem de notas A
	private int bCount; //contagem de notas B
	private int cCount; //contagem de notas C
	private int dCount; //contagem de notas D
	private int fCount; //contagem de notas F
	
	//construtor inicializa courseName
	public GradeBook(String name)
	{
		courseName = name;
	}
	
	//método para configurar o nome do curso
	public void setCourseName(String name)
	{
		courseName = name;
	}
	
	//método para recuperar o nome do curso
	public String getCourseName()
	{
		return courseName;
	}
	
	//exibe uma mensagem de boas-vindas para o usuário GradeBook
	public void displayMessage()
	{
		System.out.printf("Bem vindo(a) a classe GradeBook! %s\n",getCourseName());
	}
	
	//insere número arbitrário de notas do usuário
	public void inputGrades()
	{
		//cria Scanner para obter dados a partir da janela de comando
		Scanner input = new Scanner(System.in);
		
		int grade; //nota inserida pelo usuário
		
		System.out.printf("Digite a nota ou <ctrl> d para sair.\n");
		
		//faz o loop até o usuário inserir o indicador de fim do arquivo
		
		while(input.hasNext())
		{
			grade = input.nextInt(); //lê a nota
			total += grade; //adciona grade a total
			++gradeCounter; //incrementa o número de notas
			
			//chama o método para incrementar o contador adequado
			incrementLetterGradeCounter(grade);
			
		}
		
	}

	
	//adciona 1 ao contador adequado da nota especificada
	public void incrementLetterGradeCounter(int grade)
	{
		//determina a nota que foi inserida
		switch(grade / 10)
		{
		case 9: //nota estava entre 90
		case 10: //e 100
			++aCount; //incrementa aCount
			break; //necessário para sair do switch
		case 8: //nota estava entre 80 e 89
			++bCount; //incrementa bCount
			break; //sair do switch
		case 7: //nota estava entre 70 e 79
			++cCount; //incrementa cCount
			break; //sai do switch
		case 6: //nota estava entre 60 e 69
			++dCount;
			break;
		default: //nota era menor que 60
			++fCount;
			break;
		
		
		}
		
	}

	public void displayGradeReport()
	{
		System.out.println("\nVotação de relatório: ");
		
		//se o usuário inseriu pelo menos uma nota
		if(gradeCounter != 0)
		{
			double average = (double) total / gradeCounter;
			
			System.out.printf("Total %d e graus: %d",gradeCounter, total);
			System.out.printf("Classe média: %.2f\n",average);
			System.out.printf("%s\n%s%d\n%s%d\n%s%d\n%s%d\n%s%d\n",
					          "Número de alunos que receberam cada grau: \n",
					          "A: ",aCount,
					          "B: ",bCount,
					          "C: ",cCount,
					          "D: ",dCount,
					          "F: ",fCount);
		}
		else
			System.out.println("Nenhuma nota foi inserida");
	}
}

Poderiam me explicar como funciona o método inputGrades e ncrementLetterGradeCounter ?

Obrigado!

Kra o método inputGrades serve para o usuário entrar com um número inderteminado de notas até a combinação das teclas ctrl+z for digitada . Isso por causa do while (input.hasNext) e dentro dele a variável grade recebe o valor. A variável total soma todas as notas recebidas e incrementa a gradeCounter.
No momento que o método inputGrades chama o método incrementLetterGradeCounter em:

incrementLetterGradeCounter (grade);

O switch divide grade por 10 e qual resultado ele adiciona 1 ao contador do case equivalente exemplo:

switch ( 70 / 10) = 7

case 7: adiciona 1 a cCount que vai ser usada para exibir quantas notas c ele teve e assim com cada case.

Entendeu?

Desculpe, mas ainda não entendi a questão do switch e case.

O switch ali serve para saber qual a variável deve incrementar:

Se a variável grade naquele momento vale 80, no switch grade vai dividir por 10 o que vai dar 8.

[code]private void incrementLetterGradeCounter (int grade)
{
switch ( grade / 10 )
{
case 9:
case 10:
++aCount;
break;

	case 8: // vai entrar nesse case por q o resultado é 8
		++bCount; // vai incrementar 1 para ser exibido quantas notas b o usuário teve.
		break;
		
	case 7:
		++cCount;
		break;
		
	case 6:
		++dCount;
		break;
		
		default:
			++fCount;
			break;
	}[/code]

E o switch a cada loop vai verificando em que " opção" se encaixa se for 95 por exemplo vai entrar no 9 então aCount é incrementada ou se fosse 100 entra no case 10 que também incrementa a aCount.

Agora ficou mais claro?