Funções e Busca
Neste tópico, vamos reforçar as funções (métodos) em Java e aprender a fazer uma busca dentro de um vetor. A busca é um ótimo exemplo de função: ela recebe um vetor e um valor, e devolve onde esse valor está.
Parte 1: Reforçando funções
Seção intitulada “Parte 1: Reforçando funções”Uma função é um bloco de código com nome, que resolve uma tarefa e pode ser chamado várias vezes.
Função sem retorno (void)
Seção intitulada “Função sem retorno (void)”Quando a função apenas executa uma ação, usamos void:
static void saudacao() { System.out.println("Bem-vindo, herói!");}Ela é chamada pelo nome:
saudacao();Função com parâmetros e retorno
Seção intitulada “Função com parâmetros e retorno”Quando a função precisa receber valores e devolver um resultado, indicamos os parâmetros e o tipo de retorno:
static int somar(int a, int b) { return a + b;}int resultado = somar(5, 3);Nesse caso:
intantes do nome indica o tipo do valor devolvido;(int a, int b)são os parâmetros;returndevolve o resultado.
Variáveis criadas dentro de uma função existem apenas ali dentro. Isso se chama escopo. Se precisarmos de um valor em outra função, devemos passá-lo como parâmetro ou devolvê-lo com return.
Parte 2: Busca linear
Seção intitulada “Parte 2: Busca linear”Buscar é procurar um valor dentro de um vetor. A forma mais simples é a busca linear: comparar o valor procurado com cada posição, uma por uma.
String[] itens = {"espada", "poção", "escudo", "mapa"};String procurado = "escudo";
int encontrado = -1;
for (int i = 0; i < itens.length; i++) { if (itens[i].equalsIgnoreCase(procurado)) { encontrado = i; }}Ao final:
- se
encontradofor-1, o item não está no vetor; - se for outro valor, ele indica a posição onde o item foi encontrado.
Parte 3: Juntando os dois
Seção intitulada “Parte 3: Juntando os dois”A busca linear fica ainda melhor dentro de uma função. A função recebe o vetor e o valor procurado, e devolve a posição.
import java.util.Scanner;
public class Main { static int buscarItem(String[] itens, String procurado) { for (int i = 0; i < itens.length; i++) { if (itens[i].equalsIgnoreCase(procurado)) { return i; } } return -1; }
public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
String[] inventario = {"espada", "poção", "escudo", "mapa"};
System.out.print("Qual item você procura? "); String procurado = scanner.next();
int posicao = buscarItem(inventario, procurado);
if (posicao != -1) { System.out.println("Item encontrado na posição " + posicao + "!"); } else { System.out.println("Item não encontrado no inventário."); }
scanner.close(); }}Repare que:
- a função
buscarItemrecebe um vetor como parâmetro; - ela devolve a posição encontrada ou
-1; - quem chamou a função decide o que fazer com o resultado.
Esse mesmo modelo vale para qualquer tipo de vetor, inclusive vetores de números.
Erros comuns
Seção intitulada “Erros comuns”- Esquecer o
staticnos métodos e não conseguir chamá-los domain. - Declarar o tipo de retorno errado (ex.: devolver um texto em uma função declarada como
int). - Esquecer o
returnem uma função que promete devolver um valor. - Na busca, esquecer de iniciar a variável de resultado com
-1. - Usar
==para comparar textos em vez de.equalsIgnoreCase(...).