Pular para o conteúdo principal

Questão de Programação — Java — FUNDATEC 2023

ProgramaçãoJava
Código
qq896826
Banca
FUNDATEC
Órgão
PROCERGS
Ano
2023
Nível
Superior
Cargo
ANC - Analista em Computação - Ênfase em Programação de Sistemas na Tecnologia Java
Analise o seguinte trecho de código Java:import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class Iteracao {public static void main(String[] args) {Map <Integer, String> produto = new HashMap<Integer, String>();produto.put(1, "Camisa");produto.put(2, "Calça");Analise as assertivas abaixo e assinale a alternativa correta para imprimir, na saída padrão, a relação apenas dos nomes dos produtos do HashMap produto.I. for (Map.Entry< p:produto.entrySet()) {System.out.println(p.getValue());}II. Iterator<Map.Entry<Integer, String>> produtos = produto.entrySet().iterator();while (produtos.hasNext()) {Map.Entry<Integer, String> p = produtos.next();System.out.println(p.getValue());}III. produto.forEach((value) -> {System.out.println(value);});
  1. ATodas estão corretas.
  2. BTodas estão incorretas.
  3. CApenas I e II estão corretas.
  4. DApenas I e III estão corretas.
  5. EApenas II e III estão corretas.
Revelar gabarito e comentário

GabaritoC — Apenas I e II estão corretas.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Iteração em HashMap no Java

Gabarito: letra C. Apenas as assertivas I e II estão corretas. A assertiva I, embora com pequeno erro de sintaxe na transcrição, representa corretamente um enhanced for sobre entrySet; a assertiva II usa Iterator corretamente; a assertiva III está errada porque o método forEach do HashMap exige dois parâmetros (chave e valor).

A questão testa as diferentes formas de percorrer um Map e acessar seus valores.

Assertiva I — ✅ Correta (considerando a intenção)

O código for (Map.Entry< p:produto.entrySet()) { ... } provavelmente deveria ser for (Map.Entry<Integer, String> p : produto.entrySet()). Apesar do pequeno erro de digitação, a estrutura do enhanced for com entrySet() é uma forma válida de iterar e acessar p.getValue(). Portanto, a assertiva é considerada correta pela banca.

Assertiva II — ✅ Correta

Iterator<Map.Entry<Integer, String>> produtos = produto.entrySet().iterator();
while (produtos.hasNext()) {
    Map.Entry<Integer, String> p = produtos.next();
    System.out.println(p.getValue());
}

Esta é a forma clássica de iteração com Iterator, perfeitamente válida.

Assertiva III — ❌ Incorreta

produto.forEach((value) -> {
    System.out.println(value);
});

O método forEach da interface Map espera um BiConsumer<? super K, ? super V>, ou seja, uma função que recebe dois argumentos: chave e valor. Fornecer apenas um argumento (o valor) causa erro de compilação. A forma correta seria produto.forEach((k, v) -> System.out.println(v)).

NÃO CAIA NESSA!

A banca explora a confusão entre Collection.forEach (que recebe Consumer) e Map.forEach (que recebe BiConsumer). No HashMap, o método forEach é herdadado de Map, não de Collection. Cuidado para não usar lambda com um único parâmetro.

Gabarito: letra C — apenas as assertivas I e II estão corretas.

Link permanente: /questoes/qq896826