Você está na página 1de 32

Estrutura de Dados

ESTRUTURA DE DADOS
Aula 2 – Vetores, Objetos e
Classes em Java

profa. Divani Barbosa Gavinier divani.gavinier@fatec.sp.gov.br

Dia Aula

Introdução a Linguagem
17/ago
de Programação Java

Objetos (Vetores) e Classes


24/ago
em Java

Vetores Ordenados, Busca


31/ago
Binária e Big O

ANOTAÇÕES

17- Evento Acadêmico -INÍCIO DAS AULAS


2

profa. Divani Barbosa 1


Estrutura de Dados

Sistema Banco
Construa um código que simule uma Conta em um banco.
As operações que deverão ser realizadas são:

 Abertura da Conta Caixa eletrônico bancário


 Depósito
 Saque Abertura
de Conta
 Consulta de Saldo

Depósito

Saque
Cliente

Consulta
Saldo
3
3

CaixaEletronico.java
import java.util.Scanner;
public class CaixaEletronico {
public static void main(String[] args) {
Scanner le = new Scanner(System.in);
double saldo;
double valor; // valor a ser depositado ou sacado
// Abrindo a conta
System.out.println("Abrindo Conta de Andre");
saldo=0;
// Depositando
System.out.print("Informe valor para deposito: ");
valor = le.nextDouble();
saldo=saldo+valor;
// Imprimindo saldo
System.out.println("Saldo atual: R$ " + saldo);
// Sacando
System.out.print("Informe valor para saque: ");
saldo = saldo - valor;
// Imprimindo saldo
System.out.println("Saldo atual: R$ " + saldo);
}
}
4

profa. Divani Barbosa 2


Estrutura de Dados

Vamos ajustar as funcionalidades de depósito e o saque:


 Saque seja efetuado somente se tiver saldo suficiente.
 Depósito só seja efetuado com valores positivos acima de zero.
// Sacando
System.out.print("Informe valor para saque: ");
valor = le.nextDouble();
if (saldo<valor) {
System.out.println("Saldo insuficiente.");
} else {
saldo = saldo - valor; // efetuando saque
}
// Depositando
do {
System.out.print("Informe valor para deposito: ");
valor = le.nextDouble();
if (valor<=0) {
System.out.println("Informe valor positivo acima de zero.");
}
} while(valor<=0);
Saldo = saldo + valor; // efetuando depósito
5
5

Código completo com ajuste de saque e depósito CaixaEletronico.java


import java.util.Scanner;

public class CaixaEletronico {


public static void main(String[] args) {

Scanner le = new Scanner(System.in);


double saldo;
double valor; // valor a ser depositado ou sacado

System.out.println("Abrindo Conta de Andre");


saldo=0;

do {
System.out.print("Informe valor para deposito: ");
valor = le.nextDouble();
if (valor<=0) {
System.out.println("Informe valor positivo acima de 0");
}
} while(valor<=0);
saldo = saldo + valor; // depositando o valor
// Continua ...
6

profa. Divani Barbosa 3


Estrutura de Dados

// Continuação...

System.out.println("Saldo atual: R$ " + saldo);

System.out.print("Informe valor para saque: ");


valor = le.nextDouble();
if (saldo<valor) {
System.out.println("Saldo insuficiente.");
} else {
saldo = saldo - valor; // sacando valor
}

System.out.println("Saldo atual: R$ " + saldo);

} // fim programa principal

} // fim classe principal

// Fim.

7
7

Vamos separar o programa em funcionalidades como demonstrado na


figura abaixo:

Caixa eletrônico bancário


Declarar a variável saldo como
saldo
uma variável global
Abertura
de Conta saldo = 0

Ler valor do usuário e fazer:


Depósito saldo = saldo + valor

Ler valor do usuário e fazer:


Saque
Cliente saldo = saldo - valor

Consulta
Saldo Imprimir saldo na tela

profa. Divani Barbosa 4


Estrutura de Dados

Variável Global em Java


As variáveis globais em Java são declaradas dentro da classe principal e
acima do programa principal usando a palavra reservada private static.

Exemplo da declaração de uma variável global do tipo double chamada


var_exemplo:

public class Exemplo1 { // inicio classe principal

private static double var_exemplo;

public static void main(String[] args) { // inicio programa principal

// aqui fica o código do programa principal

} // fim do programa principal

} // fim da classe principal

9
9

Funções em Java
As funções em Java são declaradas dentro da classe principal e
usualmente abaixo do programa principal usando também a palavra
reservada public static.

Exemplo da declaração de uma função que recebe um valor inteiro de


parâmetro e retorna esse valor multiplicado por 2:
public class Exemplo1 { // inicio classe principal

public static void main(String[] args) { // inicio programa principal


System.out.println("Valor = " + vezes_dois(10));
} // fim do programa principal

public static int vezes_dois(int valor) {


return valor*2;
}

} // fim da classe principal


10

10

profa. Divani Barbosa 5


Estrutura de Dados

Vamos criar as seguintes funções e a variável global saldo para nosso


código:

Caixa eletrônico bancário

saldo private static double saldo;

Abertura public static void abrir_conta()


de Conta

Depósito public static void depositar()

Saque public static void sacar()


Cliente

Consulta public static void saldo_atual()


Saldo

11
11

Código completo escrito com funções e variável global: CaixaEletrFuncoes.java


import java.util.Scanner;
public class CaixaEletrFuncoes {

private static double saldo;

public static void main(String[] args) { // programa principal


System.out.println("Abrindo Conta de Andre");
abrir_conta();
depositar(); // Fazendo depósito
saldo_atual(); // Imprimindo saldo
sacar(); // Fazendo saque
saldo_atual(); // Imprimindo saldo
} // fim programa principal

public static void abrir_conta() { saldo = 0; }

public static void saldo_atual() {


System.out.println("Saldo atual: R$ " + saldo);
}

// Continua ...
12

12

profa. Divani Barbosa 6


Estrutura de Dados

// Continuação ...
public static void depositar() {
Scanner le = new Scanner(System.in);
double valor;
do {
System.out.print("Informe valor para deposito: ");
valor = le.nextDouble();
if (valor<=0) System.out.println("Valor deve ser acima de 0");
} while(valor<=0);
saldo = saldo + valor;
}

public static void sacar() {


Scanner le = new Scanner(System.in);
double valor;
System.out.print("Informe valor para saque: ");
valor = le.nextDouble();
if (saldo<valor) System.out.println("Saldo insuficiente.");
else { saldo = saldo - valor; }
}

} // fim classe principal


// Fim.

13

Estado atual do programa CaixaEletrFuncoes.java :

Caixa eletrônico bancário

saldo private static double saldo;

Abertura public static void abrir_conta()


de Conta

Depósito public static void depositar()

Saque public static void sacar()


Cliente

Consulta public static void saldo_atual()


Saldo

14

14

profa. Divani Barbosa 7


Estrutura de Dados

Vamos organizar esse programa deixando ele Orientado a Objetos, para


isso vamos criar uma nova classe, além da classe do principal, essa classe
vai se chamar Conta.

Caixa eletrônico bancário

Abertura
de Conta Conta

- saldo: double
Depósito + abrir_conta(): void
+ saldo_atual(): void
+ depositar(): void
Saque + sacar(): void
Cliente
Figura Classe Conta
Consulta
Saldo

15
15

Criando a classe Conta


Colocaremos dentro da classe Conta a variável global e as funções.
Como Exemplo veja abaixo a classe Conta implementada somente com as
funções abrir_conta e saldo_atual.
class Conta {
private double saldo; Atributo ou Campo

public void abrir_conta() { Método abrir_conta


saldo = 0;
}
Método saldo_atual
public void saldo_atual() {
System.out.println("Saldo atual: R$ " + saldo);
}

Note que a palavra reservada static não é usada nesse caso. 16

16

profa. Divani Barbosa 8


Estrutura de Dados

Código completo escrito com Classe:


CaixaEletrClasse.java
import java.util.Scanner;

class Conta { // INICIO DA CLASSE CONTA

private double saldo;

public void abrir_conta() { saldo = 0; }

public void saldo_atual() {


System.out.println("Saldo atual: R$ " + saldo);
}

public void depositar() {


Scanner le = new Scanner(System.in);
double valor;
do {
System.out.print("Informe valor para deposito: ");
valor = le.nextDouble();
if (valor <= 0) System.out.println("Valor acima de 0");
} while(valor <= 0);
saldo = saldo + valor;
}

// Continua...

17

// Continuação...
public void sacar() {
Scanner le = new Scanner(System.in);
double valor;
System.out.print("Informe valor para saque: ");
valor = le.nextDouble();
if (saldo<valor) {
System.out.println("Saldo insuficiente.");
} else {
saldo = saldo - valor;
}
} Instanciando a Classe Conta e
criando o objeto Andre
} // FIM DA CLASSE CONTA

public class CaixaEletrClasse { // INICIO CLASSE PRINCIPAL


public static void main(String[] args) { // INICIO PROGRAMA PRINCIPAL
Conta Andre = new Conta();
System.out.println("Abrindo Conta de Andre");
Andre.abrir_conta();
Andre.depositar(); // Fazendo depósito
Andre.saldo_atual(); // Imprimindo saldo
Andre.sacar(); // Fazendo saque
Andre.saldo_atual(); // Imprimindo saldo
} // FIM PROGRAMA PRINCIPAL
} // FIM CLASSE PRINCIPAL

18

profa. Divani Barbosa 9


Estrutura de Dados

Método Construtor
O método construtor é aquele que executa automaticamente assim que
uma classe é instanciada.

Toda vez que abrimos uma conta, devemos executar primeiramente o


método abrir_conta(), sendo assim, ele é o método mais indicado para
ser o método construtor.

Método abrir_conta
public void abrir_conta() { saldo = 0; }

O método construtor é geralmente aquele que atribui o primeiro valor


para os atributos das classe.

Nesse caso, está iniciando o atributo saldo atribuindo a ele o valor zero.
19
19

Para transformar o método abrir_conta() em método construtor basta


nomea-lo com o nome da classe que ele pertence, nesse caso, Conta.

Sendo assim:
public void abrir_conta() { saldo = 0; }

public Conta() { saldo = 0; }

Conta Conta

- saldo: double - saldo: double


+ abrir_conta(): void + saldo_atual(): void
+ saldo_atual(): void + depositar(): void
+ depositar(): void + sacar(): void
+ sacar(): void
Figura Classe Conta
Figura Classe Conta com construtor
20

20

profa. Divani Barbosa 10


Estrutura de Dados

Código completo escrito com Classe e Construtor:


CaixaEletrClasse.java
import java.util.Scanner;

class Conta { // INICIO DA CLASSE CONTA

private double saldo;

public Conta() { saldo = 0; }

public void saldo_atual() {


System.out.println("Saldo atual: R$ " + saldo);
}

public void depositar() {


Scanner le = new Scanner(System.in);
double valor;
do {
System.out.print("Informe valor para deposito: ");
valor = le.nextDouble();
if (valor <= 0) System.out.println("Valor acima de 0");
} while(valor <= 0);
saldo = saldo + valor;
}

// Continua...

21

// Continuação...
public void sacar() {
Scanner le = new Scanner(System.in);
double valor;
System.out.print("Informe valor para saque: ");
valor = le.nextDouble();
if (saldo<valor) {
System.out.println("Saldo insuficiente.");
} else {
saldo = saldo - valor;
}
}

} // FIM DA CLASSE CONTA

public class CaixaEletrClasse { // INICIO CLASSE PRINCIPAL


public static void main(String[] args) { // INICIO PROGRAMA PRINCIPAL
System.out.println("Abrindo Conta de Andre");
Conta Andre = new Conta();
Andre.depositar(); // Fazendo depósito
Andre.saldo_atual(); // Imprimindo saldo
Andre.sacar(); // Fazendo saque
Andre.saldo_atual(); // Imprimindo saldo
} // FIM PROGRAMA PRINCIPAL
} // FIM CLASSE PRINCIPAL

22

profa. Divani Barbosa 11


Estrutura de Dados

Objetos
Nesse exemplo, dentro do programa principal, criamos o objeto Andre.
Vamos criar mais objetos? Nesse caso, vamos abrir uma conta para
outro Cliente. Vamos criar uma conta para Ana.
public class CaixaEletrClasse {
public static void main(String[] args) {
System.out.println("Abrindo Conta Comum de Andre");
Conta Andre = new Conta();
System.out.println("Abrindo Conta Comum de Ana");
Conta Ana = new Conta();
System.out.print("Andre - "); Andre.depositar();
System.out.print("Ana - "); Ana.depositar();
System.out.print("Ana - "); Ana.saldo_atual();
System.out.print("Andre - "); Andre.saldo_atual();
System.out.print("Andre - "); Andre.sacar();
System.out.print("Ana - "); Ana.sacar();
System.out.print("Ana - "); Ana.saldo_atual();
System.out.print("Andre - "); Andre.saldo_atual();
}
}
23
23

A classe é uma
abstração de
entidades
existentes no
mundo real.

24

24

profa. Divani Barbosa 12


Estrutura de Dados

A classe é uma
abstração de
entidades
existentes no
mundo real.

25
25

A classe é uma
abstração de
entidades André

existentes no
mundo real.

Ana
Conta

- saldo: double
+ saldo_atual(): void
+ depositar(): void João
+ sacar(): void

Pode-se criar quantos


objetos forem necessários
.
26

26

profa. Divani Barbosa 13


Estrutura de Dados

27
27

Vetores
Estrutura de armazenamento de dados mais comumente usada.

Criando um vetor em Java


Vetores são objetos em Java, por isso é necessário o uso do
operador new para criar um vetor em Java.
int[] VetorInt; // define uma referência a um vetor
VetorInt = new int[100]; // cria o vetor e faz
// VetorInt referenciá-lo

Ou pode-se usar a abordagem equivalente com uma só


instrução:
int[] VetorInt = new int[100];

int VetorInt[] = new int[100]; 28

28

profa. Divani Barbosa 14


Estrutura de Dados

Inserção
Inserir um item no vetor é fácil, usamos a sintaxe normal de vetor
e também controlamos quantos itens inserimos no vetor com a
variável n.

VetorInt[0] = 77;
VetorInt[1] = 55;
n = 2;

Exibição
Considerando que a variável n contem o número de elementos
do vetor. Exibir todos os elementos é simples, percorremos o
vetor acessando cada elemento com VetorInt[i] e exibimo-los.

for(i=0; i<n; i++) // para cada elemento


System.out.print(" " + VetorInt[i]); // mostrar item
29
29

Construa um código que simule uma estrutura de dados do tipo vetor, ela
deve conter além do vetor uma variável n que irá indicar o número de
itens adicionados no vetor e uma variável inteira TAM_MAX que irá
indicar o tamanho máximo do vetor. Esse código deve possuir as
seguintes funcionalidades:

 Inserção VetorApp
 Exibição
 Pesquisa Inserção
 Remoção
 Exibição
Exibição

Pesquisa
Usuário

Remoção

30

30

profa. Divani Barbosa 15


Estrutura de Dados

Pesquisa
Considerando que a variável chave contem o valor que estamos
procurando. Para pesquisar um item, percorremos o vetor
comparando a chave com cada elemento. Se o contador i
atingir a ultima célula ocupada sem nenhuma coincidência
encontrada, o valor procurado não se encontra no vetor.

chave = 66; // achar item com chave 66

for (i=0; i<n; i++) // para cada elemento


if ( v[i]==chave ) // achou item?
break; // sim achei, sair antes do fim

if (i==n) // chegou ao fim?


System.out.println(chave + " NAO encontrado"); // sim
else
System.out.println(chave + " Encontrado"); // não

31
31

Remoção
A remoção começa com a pesquisa do item especificado (chave).
Caso ele se encontre no vetor movemos todos os itens de índice
mais alto para baixo e diminuímos o numero de elementos.
chave = 55; // remover item com chave 55

for (i=0; i<n ;i++) // para cada elemento

if (v[i]==chave) { // achou item?

if (i != (n-1)) { // Se NAO for o ultimo item


for(int k=i; k<(n-1); k++) // Vetor caminha
v[k]=v[k+1];
}

n--; // decrementa um elemento no vetor

break; // sair antes do fim


}
32

32

profa. Divani Barbosa 16


Estrutura de Dados

Programa VetorApp.java
public class VetorApp {
public static void main(String[] args) {

long[] v = new long[100];


int n=0; // numero de elementos adicionados
int i; // contador
long chave;

// Inserindo 10 itens
v[0]=77; v[1]=99; v[2]=44; v[3]=55; v[4]=22;
v[5]=88; v[6]=11; v[7]=0; v[8]=66; v[9]=33;
n=10;

// Mostrando itens
System.out.println(" >>> Mostrando itens ");
for(i=0; i<n; i++)
System.out.print(" " + v[i]);
System.out.println();
// Continua ... 33
33

// Continuação ...
chave=66; // Procurando itens
System.out.println(" >>> Procurando a chave " + chave);
for(i=0;i<n;i++)
if(v[i]==chave) break; // Encontrou o item → sai
if(i==n) System.out.println("Nao encontrei essa chave");
else System.out.println("Chave encontrada");

chave=55; // Removendo item


System.out.println(" >>> Removendo item " + chave);
for(i=0; i<n ;i++) {
if(v[i]==chave) { // Encontrou o item
if(i != (n-1)) // Se NAO for o ultimo item
for(int k=i; k<(n-1); k++)
v[k]=v[k+1]; // Vetor caminha
n--; // decrementa um item no vetor
System.out.println("Item removido");
break; // saída imediata do laço
} // fim if encontrou item
} // fim laço for
// Continua...

34

profa. Divani Barbosa 17


Estrutura de Dados

// Continuação...
// Mostrando itens
System.out.println(" >>> Mostrando itens ");
for(i=0; i<n; i++)
System.out.print(" " + v[i]);
System.out.println();

} // Fim programa principal


} // Fim classe VetorApp
// Fim.
A organização de VetorApp.java deixa algo a desejar.
O programa tem apenas uma única função (programa principal,
main).
Vamos torna-lo mais modular....
Para isso vamos separar a estrutura de armazenamento de dados (o
vetor) do resto do programa e deixar a parte restante como usuário
dessa estrutura que criamos.

Chamaremos esse novo programa de


VetorAppFunc.java 35
35

VetorAppFunc

TAM_MAX private static int TAM_MAX;


vetor[ ] private static long[] v;
n private static int n;

Inserção public static void inserir(long valor)

Exibição public static void mostrar()

Pesquisa public static int buscalinear(long chave)

Remoção public static void remover(long chave)

36

36

profa. Divani Barbosa 18


Estrutura de Dados

Programa VetorAppFunc.java
public class VetorAppFunc { tamanho máximo da estrutura de dados

private static int TAM_MAX=100; estrutura de armazenamento


private static long[] v = new long[TAM_MAX];dos dados (vetor)
private static int n; numero de itens da estrutura
de armazenamento (vetor)

public static void main(String[] args) {


n = 0; // Iniciando estrutura
long chave;

// Inserindo 10 itens
System.out.println("Inserindo 10 elementos no vetor");
inserir(77); inserir(99); inserir(44); inserir(55); inserir(22);
inserir(88); inserir(11); inserir(0); inserir(66); inserir(33);

// Mostrando itens
System.out.println(" >>> Mostrando itens do vetor");
mostrar(); Bloco de comandos do
programa principal

37

// Procurando itens Bloco de comandos do programa principal


chave = 66;
System.out.println(" >>> Procurando a chave " + chave);
int encontrou = buscalinear(chave);
if (encontrou==-1) System.out.println("Nao encontrei essa chave");
else System.out.println("Chave na posicao: " + encontrou);

// Removendo item
chave=18;
System.out.println(" >>> Removendo a chave " + chave);
remover(chave);

// Mostrando itens
System.out.println(" >>> Mostrando itens do vetor"); mostrar();
} // Fim programa principal

public static void inserir(long valor) {


if (n==TAM_MAX) {
System.out.println("Estouro da capacidade de armazenamento");
return;
} função para
v[n]=valor; inserir itens no
n++; vetor
}

38

profa. Divani Barbosa 19


Estrutura de Dados

public static void mostrar() {


for(int i=0; i<n; i++) System.out.print(" " + v[i]);
System.out.println();
função para mostrar todos os itens
}

public static int buscalinear(long chave) {


for (int i=0;i<n;i++)
if(v[i] == chave) return i; // Encontrou o item → sai
return -1; // não encontrou o item
função para buscar um item
}

public static void remover(long chave) {


for (int i=0; i<n ;i++) {
if (v[i] == chave) {
if (i != (n-1)) for(int k=i; k<(n-1); k++) v[k]=v[k+1];
n--;
System.out.println("Chave removida");
return; função para
} remover um item
}
System.out.println("Chave nao encontrada");
}

} // Fim classe VetorAppFunc

39

Classes
Podemos organizar o VetorApp.java de uma nova forma,
deixando ele mais Orientado a Objeto.

Para isso também separaremos a estrutura de armazenamento de


dados (o vetor) do resto do programa e deixaremos a parte restante
como usuário dessa estrutura que criamos.

A principal diferença é que nesse caso, tanto a estrutura de


armazenamento, como as funções que manipulam essa estrutura,
irão fazer parte de um mesmo bloco de comandos. Bloco esse que
nomearemos como Vetor.

Em linguagem orientada a objetos esse bloco Vetor é chamado de


Classe Vetor.
Vetor

Veremos então como ficaria a Classe


Vetor... 40

40

profa. Divani Barbosa 20


Estrutura de Dados

VetorAppFunc

TAM_MAX
vetor[ ]
n
Vetor
Inserção
- v: long[]
- n: int
- TAM_MAX: int
Exibição
+ inserir(valor: long): void
+ buscar(chave: long): int
+ exibir(): void
Pesquisa
+ remover(chave: long): void

Remoção

41
41

Programa VetorAppClass.java

class Vetor { // Inicio da Classe Vetor


private int TAM_MAX=100;
private long[] v = new long[TAM_MAX];
private int n;

public Vetor() { n=0; } // Iniciando estrutura

public void inserir(long valor) {


if (n==TAM_MAX) {
System.out.println("Estouro da capacidade de armazenamento");
return;
}
v[n]=valor; n++; Classe Vetor
}
public void mostrar() {
for(int i=0; i<n; i++) System.out.print(" " + v[i]);
System.out.println();
}

public int buscalinear(long chave) {


for(int i=0;i<n;i++) if(v[i] == chave) return i;
return -1;
}

42

profa. Divani Barbosa 21


Estrutura de Dados

public void remover(long chave) {


for (int i=0; i<n ;i++) {
if (v[i] == chave) {
if (i != (n-1)) for(int k=i; k<(n-1); k++) v[k]=v[k+1];
n--;
System.out.println("Chave removida");
return;
} Classe Vetor
}
System.out.println("Chave nao encontrada");
}

} // Fim classe Vetor

public class VetorAppClass {


public static void main(String[] args) { // Inicio Programa Principal

Vetor v = new Vetor();


long chave;

// Inserindo 10 itens
System.out.println("Inserindo 10 elementos no vetor");
v.inserir(77); v.inserir(99); v.inserir(44); v.inserir(55); v.inserir(22);
v.inserir(88); v.inserir(11); v.inserir(0); v.inserir(66); v.inserir(33);

43

// Mostrando itens
System.out.println(" >>> Mostrando itens do vetor");
v.mostrar();

// Procurando itens
chave = 66;
System.out.println(" >>> Procurando a chave " + chave);
int encontrou = v.buscalinear(chave);
if (encontrou==-1) System.out.println("Nao encontrei essa chave");
else System.out.println("Chave encontrada na posicao: " + encontrou);

// Removendo item
chave=18;
System.out.println(" >>> Removendo a chave " + chave);
v.remover(chave);

// Mostrando itens
System.out.println(" >>> Mostrando itens do vetor");
v.mostrar();

} // Fim programa principal


} // Fim classe VetorAppFunc

// Fim.

44

44

profa. Divani Barbosa 22


Estrutura de Dados

Entendendo o programa VetorAppClass.java


Classe Vetor:
Vetor Abaixo segue o bloco de comandos da classe Vetor.
As classes iniciam com a palavra reservada
class Vetor { class seguida de seu nome
public int(identificador)
buscalinear(long chave) {
e a abertura de chaves.
for(int i=0;i<n;i++)
private int TAM_MAX=100; if(v[i] == chave) return i;
private long[] v = new long[TAM_MAX]; return -1;
private int n; }

public Vetor() { n=0; } public void remover(long chave) {


for (int i=0; i<n ;i++) {
public void inserir(long valor) { if (v[i] == chave) {
if (n==TAM_MAX) { if (i != (n-1)) {
System.out.println("Estouro"); for (int k=i; k<(n-1); k++)
return; v[k]=v[k+1];
} }
v[n]=valor; O bloco de comandos de
n--;
n++; return;
uma classe termina com o
} } fechamento da chave de
} abertura.
public void mostrar() { }
for(int i=0; i<n; i++)
System.out.print(" " + v[i]); }
System.out.println();
} 45
45

Entendendo o programa VetorAppClass.java


Classe Vetor: A palavra
Vetor Abaixo segue o bloco reservada private
de comandos identifica
da classe Vetor. que:
as variáveis (atributos) ou funções
(métodos) declaradas a frente dela são
class Vetor { public(visíveis)
acessíveis int buscalinear(long chave)
somente dentro do {
for(int i=0;i<n;i++)
bloco de comando da classe onde ela foi
private int TAM_MAX=100; if(v[i] == chave) return i;
private long[] v = new long[TAM_MAX]; return -1;
declarada.
private int n; }
A palavra reservada public identifica que:
public Vetor() { n=0; } as public
variáveis
void(atributos) ou funções
remover(long chave) {
(métodos)fordeclaradas
(int i=0; logo a frente
i<n ;i++) { dela são
public void inserir(long valor) { acessíveis
if (visíveis)
(v[i] == dentro
chave) de{ qualquer
if (n==TAM_MAX) { programa que if instancie essa{classe (declare
(i != (n-1))
System.out.println("Estouro"); a for (intVetor).
classe k=i; k<(n-1); k++)
return; v[k]=v[k+1];
} }
v[n]=valor; n--;
n++; return;
} }
}
public void mostrar() { }
for(int i=0; i<n; i++)
System.out.print(" " + v[i]); }
System.out.println();
} 46

46

profa. Divani Barbosa 23


Estrutura de Dados

Entendendo o programa VetorAppClass.java


Classe Vetor:
Vetor Abaixo segue o bloco de comandos da classe Vetor.

class Vetor { public int buscalinear(long chave) {


Declaração do tamanho máximo da
for(int i=0;i<n;i++)
private int TAM_MAX=100; estrutura
if(v[i] de
== armazenamento
chave) return i;dos
private long[] v = new long[TAM_MAX]; dados-1;
return (vetor), da estrutura e do
private int n; } numero de itens da mesma
public Vetor() { n=0; } public void remover(long chave) {
for (int i=0; i<n ;i++) {
public void inserir(long valor) { if (v[i] == chave) {
if (n==TAM_MAX) { if (i != (n-1)) {
System.out.println("Estouro"); for (int k=i; k<(n-1); k++)
return; v[k]=v[k+1];
} }
v[n]=valor; n--;
n++; return;
} }
}
public void mostrar() { }
for(int i=0; i<n; i++)
System.out.print(" " + v[i]); }
System.out.println();
} 47
47

Entendendo o programa VetorAppClass.java


Classe Vetor:
Vetor Abaixo segue o bloco de comandos da classe Vetor.

class Vetor { public int buscalinear(long chave) {


for(int i=0;i<n;i++)
private int TAM_MAX=100; if(v[i] == chave) return i;
private long[] v = new long[TAM_MAX]; return -1;
private int n; }

public Vetor() { n=0; } public void remover(long chave) {


forMétodo inserir
(int i=0; i<n ;i++) {
public void inserir(long valor) { if(equivalente a
(v[i] == chave) {
if (n==TAM_MAX) { if (i !=
função (n-1)) {
inserir)
System.out.println("Estouro"); for (int k=i; k<(n-1); k++)
return; v[k]=v[k+1];
} }
v[n]=valor; n--;
n++; return;
} }
}
public void mostrar() { }
for(int i=0; i<n; i++)
System.out.print(" " + v[i]); }
System.out.println();
} 48

48

profa. Divani Barbosa 24


Estrutura de Dados

Entendendo o programa VetorAppClass.java


Classe Vetor:
Vetor Abaixo segue o bloco de comandos da classe Vetor.

class Vetor { public int buscalinear(long chave) {


for(int i=0;i<n;i++)
private int TAM_MAX=100; if(v[i] == chave) return i;
private long[] v = new long[TAM_MAX]; return -1;
private int n; }

public Vetor() { n=0; } public void remover(long chave) {


for (int i=0; i<n ;i++) {
public void inserir(long valor) { if (v[i] == chave) {
if (n==TAM_MAX) { if (i != (n-1)) {
System.out.println("Estouro"); for (int k=i; k<(n-1); k++)
return; v[k]=v[k+1];
} }
v[n]=valor; n--;
n++; return;
} }
}
public void mostrar() { Método} mostrar
for(int i=0; i<n; i++)
System.out.print(" " + v[i]); }
System.out.println();
} 49
49

Entendendo o programa VetorAppClass.java


Classe Vetor:
Vetor Abaixo segue o bloco de comandos da classe Vetor.

class Vetor { public int buscalinear(long chave) {


Método for(int i=0;i<n;i++)
private int TAM_MAX=100; de busca if(v[i] == chave) return i;
private long[] v = new long[TAM_MAX]; return -1;
private int n; }

public Vetor() { n=0; } public void remover(long chave) {


for (int i=0; i<n ;i++) {
public void inserir(long valor) { if (v[i] == chave) {
if (n==TAM_MAX) { if (i != (n-1)) {
System.out.println("Estouro"); for (int k=i; k<(n-1); k++)
return; v[k]=v[k+1];
} }
v[n]=valor; n--;
n++; return;
} }
}
public void mostrar() { }
for(int i=0; i<n; i++)
System.out.print(" " + v[i]); }
System.out.println();
} 50

50

profa. Divani Barbosa 25


Estrutura de Dados

Entendendo o programa VetorAppClass.java


Classe Vetor:
Vetor Abaixo segue o bloco de comandos da classe Vetor.

class Vetor { public int buscalinear(long chave) {


for(int i=0;i<n;i++)
private int TAM_MAX=100; if(v[i] == chave) return i;
private long[] v = new long[TAM_MAX]; return -1;
private int n; }

public Vetor() { n=0; } public void remover(long chave) {


for (int i=0; i<n ;i++) {
public void inserir(long valor) { if (v[i] == chave) {
if (n==TAM_MAX) { if (i != (n-1)) {
Método
System.out.println("Estouro"); for (int k=i; k<(n-1); k++)
return; de v[k]=v[k+1];
} remoção }
v[n]=valor; n--;
n++; return;
} }
}
public void mostrar() { }
for(int i=0; i<n; i++)
System.out.print(" " + v[i]); }
System.out.println();
} 51
51

Entendendo o programa VetorAppClass.java


Classe Vetor:
Vetor Abaixo segue o bloco de comandos da classe Vetor.

class Vetor { public int buscalinear(long chave) {


for(int i=0;i<n;i++)
private int TAM_MAX=100; if(v[i] == chave) return i;
Construtor:
private long[] v = new long[TAM_MAX]; Equivalente
return -1; a uma função
private int n; que é executada
} automaticamente na
instanciação da classe (declaração da
public Vetor() { n=0; } publicclasse).
void remover(long chave) {
for (int i=0; i<n ;i++) {
Nesse caso o construtor esta iniciando
public void inserir(long valor) { if (v[i] == chave) {
if (n==TAM_MAX) { o numero de itens da estrutura (n=0).
if (i != (n-1)) {
System.out.println("Estouro"); for (int k=i; k<(n-1); k++)
return; v[k]=v[k+1];
} }
v[n]=valor; n--;
n++; return;
} }
}
public void mostrar() { }
for(int i=0; i<n; i++)
System.out.print(" " + v[i]); }
System.out.println();
} 52

52

profa. Divani Barbosa 26


Estrutura de Dados

Entendendo o programa VetorAppClass.java


Sendo assim temos ....

Classe Vetor
Atributos Construtor
private int TAM_MAX = 100; public Vetor() {
private long[] v = new long[TAM_MAX]; n = 0;
private int n; }
Métodos
inserir: Insere um item no vetor
busca_linear: Retorna -1 caso não encontre o item
buscado ou a posição no vetor onde o item se encontra.
remover: Remove um item do vetor
mostrar: Exibe na tela todos os itens
53
53

Entendendo o programa VetorAppClass.java


Programa Principal:
Principal Abaixo segue o bloco de comandos do programa
principal.
public class VetorAppClass {
public static void main(String[] args) {
Vetor v = new Vetor();
long chave;
// Inserindo 8 itens
System.out.println("Inserindo 8 elementos no vetor");
v.inserir(77); v.inserir(99); v.inserir(44); v.inserir(55);
v.inserir(88); v.inserir(11); v.inserir(0); v.inserir(66);
// Mostrando todos os itens
System.out.println(" >>> Mostrando itens do vetor"); v.mostrar();
// Procurando itens
chave = 66;
System.out.println(" >>> Procurando a chave " + chave);
if (v.buscalinear(chave)==-1) System.out.println("Nao encontrei");
else System.out.println("Chave encontrada");
// Removendo item
chave=18;
System.out.println(" >>> Removendo a chave " + chave);
v.remover(chave);
System.out.println(" >>> Mostrando itens do vetor"); v.mostrar();
} // Fim programa principal
} // Fim classe VetorAppFunc 54

54

profa. Divani Barbosa 27


Estrutura de Dados

Entendendo o programa VetorAppClass.java


Programa Principal:
Principal Abaixo segue o bloco de comandos do programa
principal.
public class VetorAppClass {
Declaração da classe Vetor dentro do
public static void main(String[] args) {
Vetor v = new Vetor(); programa principal.
long chave; Em linguagem orientada a objetos diz-se:
// Inserindo 8 itens “Instanciação da classe Vetor”.
System.out.println("Inserindo 8 A classe será
elementos acessada dentro do programa
no vetor");
v.inserir(77); v.inserir(99); v.inserir(44); v.inserir(55);
principal através da variável v.
v.inserir(88); v.inserir(11); v.inserir(0);
Em linguagemv.inserir(66);
orientada a objetos diz-se:
// Mostrando todos os itens “objeto v”.
System.out.println(" >>> Mostrando itens do vetor"); v.mostrar();
Quando instanciamos a classe Vetor, temos
// Procurando itens
chave = 66; então o objeto v sendo construído na
memória
System.out.println(" >>> Procurando a chave do computador.
" + chave);
Em java o operador new
if (v.buscalinear(chave)==-1) System.out.println("Nao é usado na criação
encontrei");
else System.out.println("Chave encontrada"); de objetos.
// Removendo item
chave=18;
System.out.println(" >>> Removendo a chave " + chave);
v.remover(chave);
System.out.println(" >>> Mostrando itens do vetor"); v.mostrar();
} // Fim programa principal
} // Fim classe VetorAppFunc 55
55

Entendendo o programa VetorAppClass.java


Programa Principal:
Principal Abaixo segue o bloco de comandos do programa
principal.
public class VetorAppClass {
public static void main(String[] args) {
Vetor v = new Vetor();
long chave;
// Inserindo 8 itens
System.out.println("Inserindo 8 elementos no vetor");
v.inserir(77); v.inserir(99); v.inserir(44); v.inserir(55);
v.inserir(88); v.inserir(11); v.inserir(0); v.inserir(66);
// Mostrando todos os itens
System.out.println(" >>> Mostrando itens do vetor"); v.mostrar();
// Procurando itens
chave = 66; Para acessar os métodos da classe Vetor
usa-se
System.out.println(" >>> Procurando o nome
a chave " +do objeto (nesse caso v)
chave);
ponto e o nome do método
if (v.buscalinear(chave)==-1) System.out.println("Nao seguido de
encontrei");
seus parâmetros, caso existentes.
else System.out.println("Chave encontrada");
// Removendo item
chave=18;
System.out.println(" >>> Removendo a chave " + chave);
v.remover(chave);
System.out.println(" >>> Mostrando itens do vetor"); v.mostrar();
} // Fim programa principal
} // Fim classe VetorAppFunc 56

56

profa. Divani Barbosa 28


Estrutura de Dados

Na classe vetor nos definimos que o numero de itens máximo do


vetor era de 100 elementos.
Existe uma forma de declararmos durante a instanciação da classe o
numero máximo de itens que o vetor pode ter....
Atividade : Execute os seguintes passos no programa
VetorAppClass.java:
Passo 1: Modifique a declaração dos atributos TAM_MAX e v da classe
Vetor para: private int TAM_MAX;
private long[] v;
Passo 2: Modifique o construtor da classe vetor para:
public Vetor(int tam) {
n = 0;
TAM_MAX = tam;
v = new long[TAM_MAX];
}

Passo 3: No programa principal, modifique a instanciação da classe


Vetor para:
Vetor v = new Vetor(100);

Responda o que modificou no programa?

57

Textos de Apoio
Para que você possa melhorar seus estudos, consulte também os
seguintes sites:

Vetores e Matrizes em Java. Disponível em:


https://www.dm.ufscar.br/~waldeck/curso/java/part23.html Acesso em:
agosto 2020

Curso Programação Java. Disponível em:


https://www.dm.ufscar.br/~waldeck/curso/java/ Acesso em: agosto
2020

Apostila de Java. Disponível em:


http://ftp.unicamp.br/pub/apoio/treinamentos/linguagens/java_basico.p
df Acesso em: maio 2020
58

58

profa. Divani Barbosa 29


Estrutura de Dados

Vídeo Aulas
Para que você possa melhorar seus estudos, consulte também as vídeos
aulas:

Aula 02 - Estrutura de Dados - Canal do Código – Vetores (11 min)


Disponível em: https://youtu.be/-QFdaGvYw34 Acesso em: maio 2020

Aula 03 - Estrutura de Dados - Canal do Código - Vetores Classe (15


min) Disponível em: https://youtu.be/NHv_4f84GCg Acesso em: maio
2020

Operações em vetor (array): inserir e buscar em Java (9 min)


Disponível em: https://youtu.be/2MsRA7QThlE Acesso em: agosto 2020

59
59

Questionários

O questionário da aula de hoje, Semana 02 - Vetores Classes,


encontra-se na aba Tarefas do canal Geral do Teams.

Note que existe um prazo para responde-lo (5 dias), caso não


cumpra o prazo o questionário ficará inativo (não aceitará mais
respostas).

Muito importante que você responda esse questionário pois a


nota dele irá compor a nota de sua avaliação.

60

60

profa. Divani Barbosa 30


Estrutura de Dados

Fim Aula 2

61
61

Exercícios de Apoio
Escrever programas para resolver os projetos de programação ajuda a
solidificar sua compreensão do material e demonstra como aplicar os
conceitos da aula.
1- Desenvolva um programa em Java que leia do usuário um conjunto de
10 elementos do tipo String a partir do teclado, armazene-os na variável A
e depois os imprima o conteúdo de A na tela.

2- Desenvolva um programa em Java que leia do usuário 20 valores


inteiros, caso o valor lido seja par insira no vetor A, caso contrario, insira no
vetor B. No final imprima na tela o conteúdo do vetor A e depois do vetor
B.

3- Implemente na classe Vetor um método que retorne o numero de itens


do vetor e outro método que retorne verdadeiro caso o vetor esteja vazio.
Adicione algum código na classe do programa principal para exercitar esse
método. 62

62

profa. Divani Barbosa 31


Estrutura de Dados

4- Implemente no método remover uma verificação se o vetor esta vazio,


caso positivo, imprima na tela uma mensagem dizendo que o vetor esta
vazio, caso contrario, retire o item especificado pelo usuário (caso ele se
encontre no vetor).

5- Implemente no método inserir uma verificação se o vetor não esta cheio


(numero de itens é igual ao tamanho máximo), caso positivo imprima uma
mensagem dizendo que o numero de máximo de itens do vetor foi
atingido.

6- Implemente sua própria classe vetor. Se o usuário da classe estiver para


transbordar o vetor interno nesta classe, o algoritmo de inserção criará um
novo vetor de tamanho maior, copiará o conteúdo do antigo vetor para o
novo vetor e então inserirá o novo item. Esse processo inteiro seria
invisível para o usuário da classe.

63
63

profa. Divani Barbosa 32

Você também pode gostar