Cadastrar palavra em um array específico

11 respostas
M

Boa noite, eu tenho que criar um método para cadastrar Palavras Simples e Compostas (deve receber os dados da palavra e o seu tipo e instanciar um objeto do tipo Palavra ou PalavraComposta e armazenar no array de Palavras). Senão há mais lugar, o método deve retornar false. Senão, retorna true.

Mas não tá funcionando, meu código tá assim:
public boolean cadastraPalavra(String palavra, String tipo){
            if("simples".equals(tipo))
            Palavra word = new Palavra(palavra);
            else if("composto".equals(tipo))
            PalavraComposta pc = new PalavraComposta(palavra);
            
        
        }
Alguém pode dar uma mão?

11 Respostas

fabiocortolan

Informe o seu problema, o q “não está funcionando”? Outra coisa, onde está o array d palavras?

Rodrigo_Sasaki

Você instancia a palavra mas não faz nada com ela, talvez por isso pareça que “não está funcionando”, pois o objeto é instanciado, e logo após o fim da execução desse método ele se torna elegível para o Garbage Collector.

M

O meu array de palavras é esse:

private static final Palavra[]d = { new Palavra("PAPEL", "Sem dica"), new Palavra("RATO", "Sem dica"), new Palavra("TIGRE", "animal"), new Palavra("OLEO", "Sem dica"), new PalavraComposta("JOAO-DE-BARRO", "pássaro",3), new Palavra("QUEM", "Sem dica"), new PalavraComposta("ARCO-IRIS", "Sem dica",2), new Palavra("QUALQUER", "Sem dica"), new Palavra("CROCODILO", "animal"), new Palavra("IRA", "O mesmo que raiva"), new Palavra("OLHAR", "Sem dica") } ;

O não está funcionando é, quando eu vou testar esse método, ele não cadastra palavra alguma em nenhum lugar…

M

Então eu deveria fazer como, Rodrigo? Depois que eu instancio ela, eu tenho que guardar ela no array, não to sabendo fazer isso…

Rodrigo_Sasaki

Eu recomendo que use alguma coleção como ArrayList ou HashSet.

Senão você vai ter que ficar copiando o array pra aumentar o tamanho. Coisa que as coleções já fazem internamente.

fabiocortolan

O meu array de palavras é esse:

private static final Palavra[]d = { new Palavra("PAPEL", "Sem dica"), new Palavra("RATO", "Sem dica"), new Palavra("TIGRE", "animal"), new Palavra("OLEO", "Sem dica"), new PalavraComposta("JOAO-DE-BARRO", "pássaro",3), new Palavra("QUEM", "Sem dica"), new PalavraComposta("ARCO-IRIS", "Sem dica",2), new Palavra("QUALQUER", "Sem dica"), new Palavra("CROCODILO", "animal"), new Palavra("IRA", "O mesmo que raiva"), new Palavra("OLHAR", "Sem dica") } ;

O não está funcionando é, quando eu vou testar esse método, ele não cadastra palavra alguma em nenhum lugar…

Vc está setando a variável como “final”, nesse caso vc não conseguirá fazer nenhuma modificação nela. Remova esse identificador, outra coisa, vc instancia Palavra e PalavraComposta em duas variáveis diferentes, p/ facilitar vc pode instanciar apenas uma variável, e depois d instanciar a classe e atribuir a palavra desejada, adicione ao array conforme abaixo:

public boolean cadastraPalavra(String palavra, String tipo) {
    // Crie apenas uma variável de Palavra, facilita na hora de atribuir ao vetor
    Palavra word;

    // Verifica o tipo de palavra e instancia a classe correta
    if ("simples".equals(tipo)) {
        word = new Palavra(palavra);
    } else if ("composto".equals(tipo)) {  
        word = new PalavraComposta(palavra);  
    }
 
    // Atribui ao vetor
    d[x] = word;
}

Obs.: fique atento a identação do código, ajuda muito na manutenção.

M

Pois é, já me disseram pra fazer com ArrayList, mas não fiz porque eu não aprendi ainda (to no inicio da faculdade)! ¬¬
Daí eu teria que fazer do jeito mais trabalhoso mesmo…

Rodrigo_Sasaki
M

O meu array de palavras é esse:

private static final Palavra[]d = { new Palavra("PAPEL", "Sem dica"), new Palavra("RATO", "Sem dica"), new Palavra("TIGRE", "animal"), new Palavra("OLEO", "Sem dica"), new PalavraComposta("JOAO-DE-BARRO", "pássaro",3), new Palavra("QUEM", "Sem dica"), new PalavraComposta("ARCO-IRIS", "Sem dica",2), new Palavra("QUALQUER", "Sem dica"), new Palavra("CROCODILO", "animal"), new Palavra("IRA", "O mesmo que raiva"), new Palavra("OLHAR", "Sem dica") } ;

O não está funcionando é, quando eu vou testar esse método, ele não cadastra palavra alguma em nenhum lugar…

Vc está setando a variável como “final”, nesse caso vc não conseguirá fazer nenhuma modificação nela. Remova esse identificador, outra coisa, vc instancia Palavra e PalavraComposta em duas variáveis diferentes, p/ facilitar vc pode instanciar apenas uma variável, e depois d instanciar a classe e atribuir a palavra desejada, adicione ao array conforme abaixo:

public boolean cadastraPalavra(String palavra, String tipo) {
    // Crie apenas uma variável de Palavra, facilita na hora de atribuir ao vetor
    Palavra word;

    // Verifica o tipo de palavra e instancia a classe correta
    if ("simples".equals(tipo)) {
        word = new Palavra(palavra);
    } else if ("composto".equals(tipo)) {  
        word = new PalavraComposta(palavra);  
    }
 
    // Atribui ao vetor
    d[x] = word;
}

Obs.: fique atento a identação do código, ajuda muito na manutenção.

Cara, beleza, entendi o que tu quis dizer, mas veja, o meu método é boolean. Se não há mais lugar, o método deve retornar false. Senão, retorna true, como fica?

fabiocortolan

Deixa eu ver se entendi, vc quer verificar se existe espaço no vetor e se não existir retorna false? Nesse caso vc teria q fazer um for verificando qual ponto do vetor está vazio e add a palavra neste ponto, se nenhum estiver vazio retorna false, segue um exemplo (coloque esse código no lugar de "d[x] = word;":

// Percorre o vetor
for (int i = 0; i < d.length(); i++) {
    if (d[i] == null) { // neste ponto não tenho certeza do retorno, teria q testar mas agora não posso
        d[i] = word;
        return true; // se conseguiu inserir a palavra retorna true
    }
}

return false; // se o vetor está cheio retorna false
K
maxcanoas:
fabiocortolan:
maxcanoas:
fabiocortolan:
Informe o seu problema, o q "não está funcionando"? Outra coisa, onde está o array d palavras?
O meu array de palavras é esse:
private static final Palavra[]d = { 
            new Palavra("PAPEL", "Sem dica"), 
            new Palavra("RATO", "Sem dica"), new Palavra("TIGRE", "animal"), 
            new Palavra("OLEO", "Sem dica"), new PalavraComposta("JOAO-DE-BARRO", "pássaro",3), 
            new Palavra("QUEM", "Sem dica"), new PalavraComposta("ARCO-IRIS", "Sem dica",2), 
            new Palavra("QUALQUER", "Sem dica"), new Palavra("CROCODILO", "animal"), 
            new Palavra("IRA", "O mesmo que raiva"), new Palavra("OLHAR", "Sem dica") } ;

O não está funcionando é, quando eu vou testar esse método, ele não cadastra palavra alguma em nenhum lugar..

Vc está setando a variável como "final", nesse caso vc não conseguirá fazer nenhuma modificação nela. Remova esse identificador, outra coisa, vc instancia Palavra e PalavraComposta em duas variáveis diferentes, p/ facilitar vc pode instanciar apenas uma variável, e depois d instanciar a classe e atribuir a palavra desejada, adicione ao array conforme abaixo:
public boolean cadastraPalavra(String palavra, String tipo) {
    // Crie apenas uma variável de Palavra, facilita na hora de atribuir ao vetor
    Palavra word;

    // Verifica o tipo de palavra e instancia a classe correta
    if ("simples".equals(tipo)) {
        word = new Palavra(palavra);
    } else if ("composto".equals(tipo)) {  
        word = new PalavraComposta(palavra);  
    }
 
    // Atribui ao vetor
    d[x] = word;
}
Obs.: fique atento a identação do código, ajuda muito na manutenção.

Cara, beleza, entendi o que tu quis dizer, mas veja, o meu método é boolean. Se não há mais lugar, o método deve retornar false. Senão, retorna true, como fica?

public class Palavra {
 
 
static boolean verificaArray(String[] words, String adicionar){
	adicionar = "5";
	 for(int i = 0 ; i < words.length;i++){
		 if(words[i]==null){
			 words[i] = adicionar;
			 return true;
		 }
	 }return false;
	 }
 
	
	public static void main(String[] args) {
	 String [] word = new String[4];
	 word[0] = "1";
	 word[1] = "2";
	 word[2] = "3";
	 word[3] = "6"; 
	 System.out.println(verificaArray(word,"5"));
	 

	}
Se você retirar a linha word[3] = "6" o método inclui o 5 no array e retorna true, caso contrario o array não tem espaço não inclui o 5 e retorna false.
Criado 19 de junho de 2013
Ultima resposta 20 de jun. de 2013
Respostas 11
Participantes 4