Fala pessoal, usando o exemplo do Deitel (7.18/7.19) digitei o seguinte código, e na execução IllegalFormatConversionException
códigos:
/*
* GradeBook.java
* Fig 7.18
* Created on 15 de Maio de 2006, 22:36
* >> utilizando um array para armazenar notas das provas
*/
package GradeBook7;
public class GradeBook {
// declara variáveis
private String courseName;
private int grades[][]; // array bidimensional de notas de estudante
// construtor de dois argumentos
public GradeBook( String name, int gradesArray[][]) {
courseName = name; // inicializa coursename
grades = gradesArray; // inicializa niveis de armazenamento em grades
} //fim do construtor
/** Metodo para recuperar o nome do curso */
public void setCourseName( String name ) {
courseName = name; // armazena o nome do curso em courseName
}// fim do setCourseName
/** Método para recuperar o nome do curso */
public String getCourseName() {
return courseName;
}
/** Exibe mensagem de boas vindas */
public void displayMessage() {
System.out.printf("Welcome to the grade book for %ns!\n\n", getCourseName() );
} // fim do displayMessage
/** Realiza várias operações nos dados */
public void processGrades() {
//gera saída de array de notas
outputGrades();
//chama métodos getMinimum e getMaximum
System.out.printf("\n%s %d\n$s %d\n\n", "Lowest grade in the gradebook is:", getMinimum(),
"Highest grade in the gradebook is:", getMaximum() );
// gera a saida de grafico de distribuiçao de notas de tpdas as notas em todos os tester
outputBarChart();
} // fim do método processGrades
/** Localiza a nota mínima */
public int getMinimum() {
// assume q o primeiro elemento de array de notas é o menor
int lowGrade = grades[0][0];
// faz um loop pelas linhas do array de notas
for (int studentGrades[] : grades){
// faz um loop pelas colunas da linha ATUAL
for (int grade : studentGrades) {
// se a nota for menor que lowGrade, atribui a nota a lowGrade
if ( grade < lowGrade )
lowGrade = grade;
} // fim do 2o for
} //fim do for pai
return lowGrade;
} // fim do getMinimum
public int getMaximum() {
// assume que o primeiro elemento do array de notas é o maior
int highGrade = grades[0][0];
// faz loop pelas linhas do array
for (int studentGrades[] : grades) {
// loop pelas colunas da mesma linha
for (int grade : studentGrades) {
//se a nota maior que highgrade, atribui
if (grade > highGrade) {
highGrade = grade;
} // fim do if
} // fim do for 2
} // fim do for pai
return highGrade;
} // fim de getMaximum
/** Determina a média do conjunto de particular de notas */
public double getAverage( int setOfGrades[] ) {
int total = 0;
// soma notas de um aluno
for (int grade : setOfGrades)
total += grade;
// retorna média de notas
return (double)total / setOfGrades.length;
} // fim do método getAverage
/** Gera a saída do gráfico de barras para exibir distribuição total de notas */
public void outputBarChart() {
System.out.println("Overall grade distribution: ");
// armazena frequencia de notas em cada intervalo de 10 notas
int frequency[] = new int[ 11 ];
// para cada nota em GradeBook, incrementa a frequencia apropriada
for (int studentGrades[] : grades) {
for (int grade : studentGrades) {
++frequency[ grade / 10];
} // fim do for interno
} // fim do for externo
// para cada frequencia de nota, imprime a barra no gráfico
for (int count = 0; count < frequency.length; count++) {
// gera saida do rotulo de barra (00-09, 10-19... 100)
if (count == 10) {
System.out.printf("%5d ", 100);
} // fim do if
else {
System.out.printf("%02d-%02d: ", count*10, count*10+9);
} // fim do else
// imprime a barra de asteriscos
for( int stars = 0; stars < frequency[count]; stars++ )
System.out.print( "*" );
System.out.println(); // nova linha
} // fim do for externo
} // fim do método outputBarChart
/** Gera a saída do conteudo de array de notas */
public void outputGrades() {
System.out.println("The grades are:\n");
System.out.print(" "); // alinhas titulos de coluna
// cria um titulo de coluna para cada um dos testes
for (int test = 0; test<grades[0].length; test++)
System.out.printf("Test %d ", test + 1 );
System.out.println("Average"); // titulo da coluna de média do estudante
// cria linhas/colunas de texto que representam notas de array
for (int student = 0; student<grades.length; student++) {
System.out.printf("Student %2d", student + 1);
for (int test : grades[student])
System.out.printf("%8d", test);
// chama métodos getAverage
double average = getAverage( grades[ student ]);
System.out.println("Average" + average);
} // fim do for externo
} // fim do outputGrades
} // fim da classe
package GradeBook7;
public class GradeBookTest {
// main inicia a exec
public static void main( String args[] ) {
// array bidimensional de ntoas de estudante
int gradesArray[][]= { { 87, 96, 70},
{68,87,90 },
{94,100,90}, {100,81,82}, {83,65,85}, {78,87,65},{85,75,83},
{91,94,100},{76,72,84},{87,93,73} };
GradeBook myGradeBook = new GradeBook("Aprendendo Java", gradesArray);
myGradeBook.displayMessage();
myGradeBook.processGrades();
} // fim de main
} // fim da classe
quando executo, acontece o seguinte:
-----------------------
Welcome to the grade book for
s!
The grades are:
Test 1 Test 2 Test 3 Average
Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.Double
at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:3978)
at java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2705)
at java.util.Formatter$FormatSpecifier.print(Formatter.java:2658)
at java.util.Formatter.format(Formatter.java:2430)
at java.io.PrintStream.format(PrintStream.java:899)
at java.io.PrintStream.printf(PrintStream.java:800)
at GradeBook7.GradeBook.outputGrades(GradeBook.java:148)
at GradeBook7.GradeBook.processGrades(GradeBook.java:39)
at GradeBook7.GradeBookTest.main(GradeBookTest.java:21)
Student 1 87 96 70
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)
-----------------------------
alguém me salva?
thanks!