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

nakuro

problema com array

24 mensagens neste tópico

Boas

Estou com um problema:

tenho uma classe com este metodo que pretendo invocar:

Classe restaurante:

public void iniRestaurante (String gerente, int n_lugares, int n_mesas, boolean drive)
{
    this.gerente=gerente;
    this.n_lugares=n_lugares;
    this.n_mesas=n_mesas;
    drive_in=drive;
}

e tenho o seguinte na classe evocadora:

Restaurante res[]=new Restaurante[6];

        res[0].iniRestaurante ("bruno", 24,12,true);
res[1].iniRestaurante ("pedro",31,15,false);
res[2].iniRestaurante ("joao",55,25,true);
res[4].iniRestaurante ("luis",43,20,false);
res[5].iniRestaurante ("miguel",34,16,false);

ou seja pretendo iniciar cada posição do array mas estame a dar um erro, é assim que posso inicializar um vector?

cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenta em vez de

Restaurante res[]=new Restaurante[6];

meter

Restaurante res[]=new Restaurante();

ou

 Restaurante res[6]=new Restaurante();

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Men... Quando se diz que dá um erro, logo de seguida devia vir a descrição do erro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ambas as formas da o erro:']' expected (que era o erro que dava antes) ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ambas as formas da o erro:']' expected

Restaurante[] res=new Restaurante[6];

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nesta linha:

Restaurante res[]=new Restaurante[6];

apenas dizes que estás a usar um vector de objectos do tipo Restaurante, não estás reservar espaço para os objectos em si.

Agora precisarias de ter algo como:

for(int z = 0; z < res.lenght; z++) {
    res[z] = new Restaurante();
}

Depois já podes aceder às posições do vector e usar os métodos.

Repara que estás a dizer quantos objectos e de que tipo vão existir no vector mas não estás a colocar nessas posições objecto nenhum. Espero ter-me feito entender.

Isto claro, assumindo que o erro que te está a dar é java.lang.NullPointerException ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

(...)

Restaurante res[]=new Restaurante();

ou

 Restaurante res[6]=new Restaurante();

Reparem que qualquer uma das formas está errada no que toca ao Java. Na primeira não se está a dizer de que tamanho é o vector isso em Java não pode acontecer. Na segunda está a tentar-se colocar um objecto do tipo Restaurante num objecto do tipo Tabela.

Edit:

ambas as formas da o erro:']' expected (que era o erro que dava antes)

Era esse o erro? Copiei o teu código para confirmar e esse erro não aparece...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Reparem que qualquer uma das formas está errada no que toca ao Java. Na primeira não se está a dizer de que tamanho é o vector isso em Java não pode acontecer. Na segunda está a tentar-se colocar um objecto do tipo Restaurante num objecto do tipo Tabela.

Eu enganei-me, e também meti duma maneira que em C# acho que dá. Foi daí o engano.. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hum... eu não vejo erro nenhum....  estranho...

Sinceramente não sei o que te dizer... esse editor não te dá mais informação nenhuma? É que isso é um erro identificado pelo editor....

Estou completamente a atirar barro à parede mas declara a variável i dentro do ciclo for... mas sinceramente não vejo nada de errado...

Já agora, é mais simples copiares o código e colares aqui, sempre se pode identificar um qualquer erro... ah e com tanto editor bom por aí que raio de IDE estás a usar? ;)

Só mais uma nota, a identação que estás a usar é a de Pascal, em Java, as regras de codificação dizem que se coloca a chaveta a abrir à frente do método ou nome da classe. Não que sejas obrigado a segui-las, mas elas existem para uniformizar a programação...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

classe cadeiaABC

public class CadeiaABC
{  
    int i;
    Restaurante res[]=new Restaurante[6];
    for(i=0; i<res.lenght; i++) {
        res[i] = new Restaurante();
    }
    res[0].iniRestaurante ("bruno", 24,12,true);
res[1].iniRestaurante ("pedro",31,15,false);
res[2].iniRestaurante ("joao",55,25,true);
res[4].iniRestaurante ("luis",43,20,false);
res[5].iniRestaurante ("miguel",34,16,false);


}

o metodo da classe restaurante que pretende evocar:

public void iniRestaurante (String gerente, int n_lugares, int n_mesas, boolean drive)
{
    this.gerente=gerente;
    this.n_lugares=n_lugares;
    this.n_mesas=n_mesas;
    drive_in=drive;
}

tou a usar o BLUEJ, é o unico que ainda sei mexer :-[

ja agora obrigado pelos concelhos :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então, já podias ter corrigido essa linha:

Restaurante[] res=new Restaurante[6];

Isso pode fazer com que outros erros parareçam.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Então, já podias ter corrigido essa linha:

Restaurante[] res=new Restaurante[6];

Isso pode fazer com que outros erros parareçam.

Essa linha não tem nada de errado... o que é que querias dizer?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A que coloquei não, mas a que ele mostra no compilador sim. Continua na mesma.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

OK, eu é que fiz mal o quote, a dele também não.

Object[] vector = new Object[5]

é tão válido como 

Object vector[] = new Object[5]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Onde tens

for(i=0; i<res.lenght; i++) {

é:

for(i=0; i<res.lenght(); i++) {

Faltavam os ().

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Errado, não faltam parêntesis nenhuns ;), lenght é um atributo das tabelas não é um método, não confundir com o método lenght() das Strings :P

Tem de estar aí a passar-se qualquer coisa estranha, para estar a dar erro... sinceramente já dei voltas e voltas a esse código e não vejo erro, tenho o código copiado no meu IDE e está a compilar correctamente, ou o erro está fora do que colocaste ou então o IDE está a precisar de ser desligado e atirado pela janela :D.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mete aqui o projecto em anexo, eu pelo menos tenho o BlueJ instalado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu podia estar aqui a noite toda!!!!!

public class CadeiaABC
{  
    int i;
    Restaurante res[]=new Restaurante[6];
    for(i=0; i<res.length; i++) {
        res[i] = new Restaurante();
    }
    res[0].iniRestaurante ("bruno", 24,12,true);
res[1].iniRestaurante ("pedro",31,15,false);
res[2].iniRestaurante ("joao",55,25,true);
res[4].iniRestaurante ("luis",43,20,false);
res[5].iniRestaurante ("miguel",34,16,false);	
}

É claro que isso é um erro, o código tem de estar dentro de um método! Não podes ter esse tipo de código assim solto.

Muda isso para:

package org.sergiolopes.ficha6;
/**
* Write a description of class CadeiaABC here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class CadeiaABC {
    
    public void umMetodo() {
        
        int i;
        Restaurante res[]=new Restaurante[6];
        for(i=0; i<res.length; i++) {
            res[i] = new Restaurante();
        }
        
        res[0].iniRestaurante("bruno", 24,12,true);
        res[1].iniRestaurante("pedro",31,15,false);
        res[2].iniRestaurante("joao",55,25,true);
        res[4].iniRestaurante("luis",43,20,false);
        res[5].iniRestaurante("miguel",34,16,false);
        
    }
}

E o mais triste é que isso estava no screenshot... eu quando transcrevi o código fiz tudo inconscientemente e nem reparei, agarrei-me à linha onde o IDE mostrava o erro, que nada tinha a ver, e nem reparei no erro que estava mesmo ao cimo dos olhos ;)

Bem ficou identificado :P

Uma classe é composta por atributos, por métodos e blocos estáticos de código, não pode ter código solto dentro da sua declaração.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pensei que como tava a declarar variaveis o podia fazer sem estar dentro do metodo :wallbash:

agora já funcou, muito obrigado pela ajuda e peço desculpa pelo tempo que vos fiz perder ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes declarar mas o código que está a iniciar e a aceder aos elementos do vector tem de estar dentro um método, ou em último caso, dentro de um bloco estático de código, mas isso já é outra história ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

LOL, eu também podia estar toda a noite que não dava por uma coisa tão simples! :S

Olha também tinhas um erro na classe TestarRestaurante, tinhas um "2" num método que não recebe nada. Eu corrigi e metí a comentário.

Está em anexo. ;)

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