Problemas exibindo arrays BIDIMENSIONAIS - Help please

1 resposta
H

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
e o executavel:
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!

1 Resposta

T

Foi um erro de digitação nesta função. Você consegue encontrar o erro?
(Dica: este método já está corrigido, mas quero que você encontre o erro de digitação. Pode ser que o erro não seja seu, mas de digitação do livro)

/** 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
Criado 22 de maio de 2006
Ultima resposta 23 de mai. de 2006
Respostas 1
Participantes 2