1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Problema com JAVA e AWT

Discussão em 'Programação' iniciada por [knap], 8 de Dezembro de 2007. (Respostas: 7; Visualizações: 777)

  1. [knap]

    [knap] Power Member

    Olá.

    Estou a tentar compilar este código mas dá-me um erro, porque é que ele não encontra a variável?

    Código:

    Código:
    import java.awt.*;
    
    public class Teste extends Frame {
    
        public void main(String args[]) {
    
    	createPanel();
    	removePanel();
        }
    
        public void createPanel() {
    
    	Panel teste = new Panel();
    	add(teste);
        }
    
        public void removePanel() {
    
    	remove(teste);
        }
    }
    Ouput do compilador:

    Código:
    Teste.java:19: cannot find symbol
    symbol  : variable teste
    location: class Teste
            remove(teste);
                   ^
    1 error
    
    Obrigado.
     
  2. HecKel

    HecKel The WORM

    Porque a variável teste é local, apenas existe na função createPanel().

    Terás de a definir como global para poderes usar a mesma variável em várias funções diferentes, ou então passas-a por parâmetro.
     
  3. [knap]

    [knap] Power Member

    Pensei que era possível partilhar variáveis entre métodos na mesma class.

    Mas vou fazer como disseste, obrigado. ;)
     
    Última edição: 8 de Dezembro de 2007
  4. MadOnion

    MadOnion Folding Member

    Heckel, não queria induzir ninguém em erro, mas penso que em Java é impossível de fazer isso, tanto quanto sei, apenas tentando fazer wrapping, e mesmo assim tenho dúvidas.
    Já agora alguém podia esclarecer, acho interessante o assunto(aproveitando o tema do tópico).
     
  5. HecKel

    HecKel The WORM

    Falas da parte de passar por parâmetro, certo?

    Fui mesmo eu que me expliquei mal :P O que queria dizer era passar o valor, não a variável ;)
     
  6. MadOnion

    MadOnion Folding Member

    Exacto, eu pensava que estavas a falar em apontar a variável, ou seja, o vulgo & em C/C++ e as demais linguagens. :cool:
     
  7. saunde

    saunde Power Member

    Exacto, tanto quanto eu conheço o java não permite a passagem por referência, já o C# possui essa capacidade , palavra reservada ref ou out , sendo que esta segunda permite que o parâmetro vá sem qualquer valor sendo preenchido no interior do método.
     
  8. malato

    malato Power Member

    O problema específico que o [knap] aqui põe não tem a ver com passagem de argumentos a funções/métodos. Ele está a usar uma variável que não está definida no âmbito onde a tenta usar. Quando queremos partilhar variáveis entre métodos de uma classe temos sempre 2 opções típicas: ou criamos uma variável de instância* ou de classe* (as conhecidas variáveis globais); ou a variável é local a um método e vai sendo passada a outros método na invocação.
    Aqui é preciso termos cuidado. O java passa os parâmetros por valor: se tentarem alterar a variável dentro do método quando este termina a referência para ela perde-se e por consequência o seu valor alterado não passa para fora da função. Para tal o método tem de retornar a variável a alterar ou um Object[] caso se pretendam alterar várias variáveis.

    No entanto a boa programação não trás destes problemas: tudo são objectos que encapsulam vários valores. Os métodos retornam objectos e não múltiplos valores.
    Em C# sim temos a possibilidade de passar por referência. O que vos digo é que o C# é uma linguagem mais flexível e expressiva que o Java. Mas não admira: surgiu depois :D



    * as variáveis de instância pertencem às instâncias da classe; as da classe pertencem à classe. Isto é:

    Código:
    Class Cao {
        public static int numero_caes = 0;  // variavel de classe (é global ao tipo Cao)
        public string _nomeCao;               // variavel de instancia (é global à instância do tipo Cao)
    
        public Cao(string nome){
             _nomeCao = nome;
             numero_caes++;
        }
    
    
        public static void main(String[] args){
            Cao canito = new Cao("boby");
            System.out.println("numero caes "
                                     + Cao.numero_caes
                                     + " nome do 1o cao "
                                     + canito._nomeCao);
        }
    }
    
     

Partilhar esta Página