• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

joaorosa

[RESOLVIDO] chamar função

11 mensagens neste tópico

boas malta

eu estou a iniciar-me no java, e tenho um exercício proposto...

o drama está em iniciar um função...

aqui vai o trecho de código... se alguém detectar o erro...

import p1.*;

public class NotasHistograma extends P1App {

    public static void main(String[] args) {
        int[] arrayEnt = new int[21];
        entradaDados(arrayEnt);
    }

    //vai ver a entrada de dados
    public static String entradaDados (int[] arrayEnt) {
        int i;
        String nomeDisciplina;

        //lê o nome da disciplina
        do {
            println("Qual é o nome da disciplina?");
            nomeDisciplina = readLine();
        }while(nomeDisciplina == "");

        //lê o nº de alunos que faltaram
        do {
            println("Quantos alunos faltaram?");
            arrayEnt[21] = readInt();
        }while(arrayEnt[21] < 0);

        for(i=1;i<=20;i++) {
            do {
                printf("Quantos alunos tiveram %d valores?",i);
                arrayEnt[i] = readInt();
            }while(arrayEnt[i] < 0);
        }

        return nomeDisciplina;
   }

queria chamar a função entradaDados

cps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

para chamar a função é exactamente como fizeste.. posta aqui a mensagem de erro se possível

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a variável nomeDisciplina está a ser usada antes de ser iniciada, substitui:

String nomeDisciplina;

por

String nomeDisciplina = "";

Se isso não resolver o problema posta aqui a mensagem de erro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

continua a não entrar... dáme o erro:

Welcome to DrJava.  Working directory is D:\Documents and Settings\João\My Documents\UA\programacao_e_algoritmos_II\teoricas\12_2_2007

> java NotasHistograma

ArrayIndexOutOfBoundsException: 21

  at NotasHistograma.entradaDados(NotasHistograma.java:23)

  at NotasHistograma.main(NotasHistograma.java:5)

  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

  at java.lang.reflect.Method.invoke(Unknown Source)

>

cps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o erro está aqui!

at NotasHistograma.entradaDados(NotasHistograma.java:23)

acedes a posições fora do array.

tentas aceder à posição 21 do array quando só tens as posições [0,20].

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ArrayIndexOutOfBoundsException: 21

  at NotasHistograma.entradaDados(NotasHistograma.java:23)

a mensagem de erro é ArrayIndexOutOfBounds o que significa que tentaste aceder a uma posição do array que não existe.

at NotasHistograma.entradaDados(NotasHistograma.java:23) significa que a linha em que o erro deu é a 23.

do {
      println("Quantos alunos faltaram?");
      arrayEnt[21] = readInt();                             <-- esta é a linha 23
}while(arrayEnt[21] < 0);

o array tem 21 posições, sabendo que a primeira é arrayEnt[0], a última é arrayEnt[20]

para corrigir este erro bastava usar o código:

do {
      println("Quantos alunos faltaram?");
      arrayEnt[20] = readInt();                             
}while(arrayEnt[20] < 0);

no entanto, embora assim o erro esteja corrigido, este bloco de código não vai fazer o que queres.

estás a ler um número e atribuir à posição 20 do array, penso que o que queres é ler um valor para cada posição do array, logo o código correcto será algo do género:

for(i=0; i<20; i++){
      println("Quantos alunos faltaram?");
      arrayEnt = readInt();
}

agora acrescentando a protecção contra números negativos fica:

for(i=0; i<20; i++){
      do{
            println("Quantos alunos faltaram?");
            arrayEnt = readInt();
      }while(arrayEnt[i]<0);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a ideia não é bem essa...

a ideia do exercício é fazer um histograma com notas de um aluno a uma disciplina...

então pede o nome da disciplina, o nº de alunos que faltaram, e depois o nº de alunos com nota 0,1,2,...20...

então acumula na posição 21 da array o nº de alunos que faltou, e depois desde a posição 0 à 20 as notas...

é isso que se pretende!

cps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

então alteras os tamanho do array.

Se forem 20 alunos não é preciso. Só é preciso, como já foi dito usar a posição 0 a 19 para as notas (repara que de 0 a 19 são 20 posições...) e a 20 para acumular as faltas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se forem 20 alunos não é preciso. Só é preciso, como já foi dito usar a posição 0 a 19 para as notas (repara que de 0 a 19 são 20 posições...) e a 20 para acumular as faltas.

acho que o array é para representar o número de alunos que tiveram uma determinada nota (5 alunos tiveram 10, 4 tiveram 13, 2 tiveram 20, 1 teve 0, etc.). nesse caso precisa das posições [0,20]. é claro que a melhor solução seria ter outra variável para os alunos que faltaram e não misturar tudo num array.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

acho que o array é para representar o número de alunos que tiveram uma determinada nota (5 alunos tiveram 10, 4 tiveram 13, 2 tiveram 20, 1 teve 0, etc.). nesse caso precisa das posições [0,20]. é claro que a melhor solução seria ter outra variável para os alunos que faltaram e não misturar tudo num array.

Ah! Não tinha percebido bem. Nesse caso é mesmo isso, aumentar o tamanho do array para 22 :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora