Erro ao tentar compilar - É básico mas eu não sei como resolver!

Pessoal, preciso da ajuda de vcs. Não faço idéia do erro que pode estar acotecendo, só sei que não compila de jeito nenhum.
O que quero fazer é atribuir a variável novavenda para a classe Venda. Abaixo vai o código e o erro que aparece ao tentar compilar o código.

public class mundo
{
public static void main(String[] args) 
{

class Casa {
String cor;
Venda novavenda;
}

class Venda {
int ab;
}

Casa a1 = new Casa();
a1.cor = "azul";
Venda venda = new Venda();
venda.ab = 1;
a1.novavenda = venda;
System.out.println(a1.novavenda.ab);

}
}

Erro ao compilar:


user@user-desktop:~/Área de Trabalho$ javac mundo.java
mundo.java:8: cannot find symbol
symbol  : class Venda
location: class Casa
Venda novavenda;
^
1 error

alguém sabe?

Obrigado

cria as classes separadas
e metodos gets e sets para acessar seus atributos

Bem vindo ao GUJ :smiley:

cara, não está compilando por um motivo simples, você está declarando a classe Casa e a classe Venda dentro de um método, que é o main. E isso não pode ser feito.
apenas reorganizei seu código, de uma olhada…

public class Mundo{
  public static void main(String[] args) {

     Casa a1 = new Casa();
     a1.cor = "azul";
     Venda venda = new Venda();
     venda.ab = 1;
     a1.novavenda = venda;
     System.out.println(a1.novavenda.ab);

   }
}
class Casa {
  String cor;
  Venda novavenda;
}

class Venda {
  int ab;
}

tenha um pouquinho mais de atenção com as chaves “{}” que delimitam um método ou uma classe :wink:

espero que tenha ajudado… :smiley:
[]'s

Cara cria classes separadas, não é boa pratica vc usar varia classes dentro de outra classe, pois isso, não fica Orientado a Objetos.

Faz uma Classe para casa.
Depois, cria outra classe para Venda.

… Depois cria a Classe Mundo e ai vc istancia as classes anteriones.

Altere a ordem de declaração da classe Casa e Venda… pois quando vc cria a Casa… a classe Venda tem que existir

[code] public static void main(String[] args) {

	class Venda {     <<<<< PRIMEIRO DECLARE A CLASSE VENDA
		int ab;   
	}  
	
	class Casa {   
		String cor;   
		Venda novavenda;   
	}   

	Casa a1 = new Casa();   <<<<< DEPOIS DECLARE A CLASSE CASA
	a1.cor = "azul";   
	Venda venda = new Venda();   
	venda.ab = 1;   
	a1.novavenda = venda;   
	System.out.println(a1.novavenda.ab);   
}  [/code]

Isto vai resolver o seu problema, porém o seu código precisa ser melhorado e muitoooooo…

Dicas

  • Utilize o padrão definido pela Sun no seu código (nomenclatura de classes Mundo e não mundo, etc)
  • Separe em arquivos diferentes as classes
  • Crie metodos get’s e set’s (encapsulamento, etc)
  • Tome cuidado com classes internas a métodos !!!
    Entre outras coisas…

não tem nada a ver com isso que estão falando…

ele pode criar classes dentro de classes SIM…e classes dentro de metodos TAMBÉM… (não q isso seja uma coisa boa…)

pagina 366 do livro da kathy, classes internas de metodo…

o seu problema é com o escopo ao que me parece… dentro da classe interna do metodo, ele tem acesso ao objeto padrão dela (tipo o this dela) e o objeto da classe externa…tipo o this da classe externa… o problema é que a classe venda não esta como objeto da instancia da classe externa mais sim de dentro do método… e ai não encontra…

agora…quanto a ser uma boa pratica eu concordo com o elton_csantana

editando… o astork tem razão…o problema é esse mesmo… e não o escopo como eu tinha imaginado…

bã Astork, fiz o que vc disse e deu certinho. Valeu, não tinha me dado conta da ordem das classes. (bem que o Eclipse podia arruma isso também :smiley: )

Em relação as dicas: eu sigo os padrões, o problema é que eu estou trabalhando num código grande. Como seria difícil explicar aquele outro, resolví fazer um rapidinho aqui no gdit e nem cuidei esses detalhes.
Agora, em relação a dividir em arquivos diferentes: Isso eu ainda não aprendi :smiley:

Mas… vlw msmo kra, ajudou bastante.