Problema com non-static

1 resposta
M

Blz galera! Estou iniciando no java (vindo do C++) e hoje treinando um pequeno codigo me deparei com um problema:

import java.util.*;

public class Frase

{

private Scanner teclado=new Scanner(System.in);
static public void main(String args[])
{
	int rand1,rand2,rand3;
	int cont=0;
	String words1[]={"Hello ","Good Bye "};
	String words2[]={"World","Boy","Girl"};
	String words3[]={" !"," ?", " :)"};
	String comando="continue",frase;
	int size1= words1.length;
	int size2= words2.length;
	int size3= words3.length;
	GetDados key;
	RandomNumero randomizer;
	int numero;

	key=new GetDados(); //AQUI ESTA O ERRO
	randomizer=new RandomNumero();

	while(comando!="sair")
	{
		comando=key.getnome();
		if(comando!="sair")
		{
			rand1= (int) (Math.random()*size1);
			rand2= (int) (Math.random()*size2);
			rand3= (int) (Math.random()*size3);
			
			frase=(words1[rand1]+ " " + words2[rand2] + " "+ words3[rand3]);
			numero=randomizer.rand();
			System.out.println(frase);
		}
	}
}

private class GetDados
{
	
	String getnome()
	{
		String nome;
		nome=teclado.next();
	}
}

private class RandomNumero
{
	private int[] numeros={1,2,3,4,5};
	private int randomizer,tamanho;
	
	int rand()
	{
		tamanho=numeros.length;
		randomizer=(int) Math.random() * tamanho;
		return(numeros[randomizer]);
	}
}

}

Na hora da compilacao o compilador anuncia o seguinte erro:

non-static variable this cannot be referenced from a static context

key=new GetDados();

o mesmo acontece com o randomizer.

Tenho o mesmo problema todas as vezes que tento utilizar objetos de classes definidas fora da main.

PS.: como o codigo foi feito apenas para me familiarizar com a sintaxe do java nao o organizei como deveria.

Agradeco desde ja pela atencao!

Valeu

1 Resposta

ViniGodoy

Sempre que postar códigos, use a tag code. Se ainda não sabe fazer isso, leia aqui:
http://www.guj.com.br/posts/list/50115.java

O problema é o mesmo que vc tem no C++. Você está dentro de um método estático de uma classe, no caso, o método main.
De dentro de um método estático, somente variáveis estáticas são acessíveis. Variáveis membro não.

Então, vc tem duas saídas:
1. Colocar a palavra static na declaração do Scanner:
private static Scanner teclado = new Scanner();

2. Criar um método não estático, e colocar seu código dentro. Então, criar no main um novo objeto da sua classe e chamar esse método:
public void sayHello() {
 //Seu código aqui
}

public void main() {
   new Frase().sayHello();
}
Criado 20 de agosto de 2008
Ultima resposta 20 de ago. de 2008
Respostas 1
Participantes 2