Compilador reclama de uma variável "cannot be resolved to a variable"

8 respostas
eclipsejavaprogramação
V

Compilador reclama de uma variável quando se utiliza o predicado, utilizando função lambda. como esta: listaTeste.removeIf(x -> x.charAt(0) == ‘M’);

segue o código:

import java.util.ArrayList;
import java.util.List;

public class ListTesting{

public static void main(String[] args) {

List listaTeste=new ArrayList<>();
listaTeste.add("Vitor");
	listaTeste.add("Mariane");
	listaTeste.add("Alexandre");
	listaTeste.add("Julia");
	listaTeste.add("Matheus");
	listaTeste.add(2, "Gabriel");
	
	System.out.println(listaTeste.size());
	
	for (int i=0; i<listaTeste.size();i=i+1){
		String aux = listaTeste.get(i);
		System.out.println(aux);
	}
	
	System.out.println("---------------------");
	
	
	listaTeste.removeIf(x -> x.charAt(0) == 'M'); // erro nesta linha
	for (String x : listaTeste) {
	System.out.println(x);
	}

	
}

}

8 Respostas

G

Boa Tarde @vitorlimavsc, o tipo da sua variável de lista é List, logo ela é uma lista de objetos. Desta forma você não pode chamar o método charAt oriundo da classe String nesta linha diretamente da variável, pois a variável x é declarada como Object pelo compilador.

Faça um toString() antes de chamar o método charAt.

Isto resolverá seu problema.

V

Boa tarde, @gelsongilmar ! Ainda assim continua dando erro, por exemplo nesse código abaixo o compilador persiste em dar erros nessas linhas que irei comentar :

segue o código:

System.out.println(list.size());
	
	for (String x : list) {
	System.out.println(x);
	}
	
	System.out.println("---------------------");
	list.removeIf(x -> x.charAt(0) == 'M'); //ERRO
	
	for (String x : list) {
	System.out.println(x);
	}
	
	System.out.println("---------------------");
	System.out.println("Index of Bob: " + list.indexOf("Bob"));
	System.out.println("Index of Marco: " + list.indexOf("Marco"));
	System.out.println("---------------------");
	List<String> result = list.stream().filter(x -> x.charAt(0) == 'A').collect(Collectors.toList()); //ERRO
	for (String x : result) {
	System.out.println(x);
	}
	System.out.println("---------------------");
	String name = list.stream().filter(x -> x.charAt(0) == 'J').findFirst().orElse(null); //ERRO
	System.out.println(name);
	}
	}

G

Em todas as linhas é o mesmo erro, você está tentando acessar o charAt diretamente da variável x que é do tipo Object.

Colocando o toString() em todas, conforme a solução da primeira ocorrência que você apresentou, resolverá o probleme.

V

@gelsongilmar, ainda continua a dar erro… Você acha que pode ser a JRE do eclipse? Pois esse mesmo código que lhe mandei foi testado em uma aula que assisti e funcionou…

G

@vitorlimavsc qual a mensagem de erro agora?
Continua a mesma ou mudou?

V

Essa daqui:

Multiple markers at this line
- x cannot be resolved to a
variable
- x cannot be resolved
- Syntax error on token “-”, –
expected

D

Acho que pode ser o “-” ou “–”, observe que são caracteres diferentes.

Se não for isso, pode ser o IDE ou o JDK desatualizados. Tente rodar num compilador online.

G

@vitorlimavsc é isso que o @DlEGO disse.

Tenta reescrever a linha de código, você deve ter copiado ela de algum editor, ou página da web que veio com o caractere distorcido.

Criado 8 de maio de 2020
Ultima resposta 11 de mai. de 2020
Respostas 8
Participantes 3