Pular para o conteúdo

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á.

Uma função é um bloco de código com nome, que resolve uma tarefa e pode ser chamado várias vezes.

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();

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:

  • int antes do nome indica o tipo do valor devolvido;
  • (int a, int b) são os parâmetros;
  • return devolve 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.

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 encontrado for -1, o item não está no vetor;
  • se for outro valor, ele indica a posição onde o item foi encontrado.

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 buscarItem recebe 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.

  • Esquecer o static nos métodos e não conseguir chamá-los do main.
  • Declarar o tipo de retorno errado (ex.: devolver um texto em uma função declarada como int).
  • Esquecer o return em 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(...).