waldeck/curso/java

38
Inteligência Artificial Reinaldo Bianchi FEI - Elétrica 2000

description

http://www.dm.ufscar.br/~waldeck/curso/java/

Transcript of waldeck/curso/java

Page 1: waldeck/curso/java

Inteligência Artificial

Reinaldo Bianchi

FEI - Elétrica

2000

Page 2: waldeck/curso/java

7a. Aula

Arrays (vetores e matrizes),

Entrada e Saída de Dados, Arquivos

Page 3: waldeck/curso/java

Vimos na aula passada

Applets Gráficos

Page 4: waldeck/curso/java

Nesta aula veremos:

Arrays:– Vetores – Matrizes

Entrada e saída de dados Arquivos

Page 5: waldeck/curso/java

Arrays (ou Vetores)

Um array permite o agrupamento de um conjunto de informações em uma única variável.

Também conhecido como vetor ou variável indexada.

Tem um tamanho definido. Sempre iniciado no valor ‘0’:

a b d nceh kvet

0 1 2 3 4 5 6 7

Page 6: waldeck/curso/java

Arrays: Declaração

Sintaxe:<tipo>[] <nome> = new <tipo>[<tamanho>];

Declarando: int[] meuArray = new int[10];

String[] fala = new String[20]; Uso:

meuArray[7] = 345;

Page 7: waldeck/curso/java

Arrays: inicialização, etc.

Inicializando um array:

int[] A = {10, 2, 3, 44, 55}; Tamanho de um array:

A.length = guarda o tamanho

Ver exemplo Array.java

Page 8: waldeck/curso/java

Exercício Arrays

Multiplique 2 vetores guardados em array de tamanho 3.

O primeiro array se chama A, o segundo B.

Result =0;

For (int i =0;i<3;i++)

Result = Result + A[i]* B[i];

Page 9: waldeck/curso/java

Arrays de duas dimensões: Matrizes Matrizes são arrays com DUAS dimensões:

– Podem ser vistos como tabelas que são guardadas na memória

– Imagens Sintaxe:

– <tipo> <nome>[][] = new <tipo> [<linhas>][<colunas>];

Existem arrays com mais dimensões...

Page 10: waldeck/curso/java

Matriz - Exemplo

int matriz[][] = new int [10][5];

0 0 0 1 0 2 0 3 0 41 02 03 04 05 06 07 08 09 0 9 4

Page 11: waldeck/curso/java

Inicializando matrizes

int minhamatriz[][] =

{ {1, 2, 3, 4},

{5, 6, 7, 8},

{9, 10, 11, 12},

{13, 14, 15, 16} };

Page 12: waldeck/curso/java

Programa Exemplo

Ver programa ImprimeMatriz.java Insira dados nas posições:

– linha = 7, coluna = 3– linha = 3, coluna = 0– linha = 5, coluna = 4

Modifique o programa para imprimir a matriz “bonitinha” (isto é, cada linha na sua)

Page 13: waldeck/curso/java

Exercício

Faça um programa que multiplique duas matrizes quadradas de tamanho 3

Page 14: waldeck/curso/java

Entrada e Saída de Dados

Em Java toda entrada e saída de dados é realizada através de Streams:

trabalha com diversos dispositivos:– teclado:

• BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));

– arquivos– páginas web, ...

Page 15: waldeck/curso/java

Classes básicas para tratamento de entrada e saída em Java File:

– É uma classe para guardar informações sobre os arquivos

InputStream:– Classe para a leitura dos dados.

OutputStream:– Classe para escrita de dados.

RandomAccessFile:– Classe para arquivos de acesso aleatório.

Page 16: waldeck/curso/java

Arquivos

Usados para guardar dados permanentes em disco (óbvio).

Existem diversos tipos de arquivos:– Arquivos seqüenciais (Stream based).– Arquivos de acesso aleatório.

Em Java, Streams são usadas para tratar os arquivos seqüenciais:– Streams são usados como buffers de entrada e

saída para os arquivos.

Page 17: waldeck/curso/java

Hierarquia de classes java.io

class java.io.File class java.io.InputStream

– class java.io.ByteArrayInputStream– class java.io.FileInputStream– class java.io.FilterInputStream– class java.io.BufferedInputStream– class java.io.DataInputStream – class java.io.ObjectInputStream

Page 18: waldeck/curso/java

Hierarquia de classes java.io (continuação) class java.io.OutputStream

– class java.io.ByteArrayOutputStream– class java.io.FileOutputStream– class java.io.FilterOutputStream– class java.io.BufferedOutputStream– class java.io.DataOutputStream (implements

java.io.DataOutput)– class java.io.PrintStream– class java.io.ObjectOutputStream

class java.io.RandomAccessFile

Page 19: waldeck/curso/java

Classe File

Representação abstrata e independente de plataforma de um arquivo.

Guarda informações sobre os arquivos:– nome– localização do arquivo

Manipula arquivos:– cria, deleta, copia, compara, verifica existência

de um arquivo, cria diretórios, lista diretórios, ...

Page 20: waldeck/curso/java

Classe InputStream

Classe abstrata da qual derivam todas as classes para leitura de dados

Classe FileInputStream:– Sub-classe de InputStream que dá acesso

aos arquivos.– Implementa InputStream.

Todo tratamento de entrada e saída é feito entre um try ... catch

Page 21: waldeck/curso/java

Métodos básicos do InputStream

read ():– Lê um inteiro. Retorna -1 quando chega ao final da stream

de entrada (que pode ser o arquivo). read(byte b[]):

– Lê múltiplos bytes e os guarda em um array. available():

– Retorna a quantidade de dados ainda existentes skip(long):

– Salta n bytes da entrada e os descarta close():

– Fecha o arquivo (chamado automaticamente)

Page 22: waldeck/curso/java

Exemplo

Para abrir um arquivo:InputStream is = new FileInputStream("bytedata.dat");

– Cria-se um Stream de entrada que usa o FileInputStream para abrir o arquivo.

Para ler um dado:b = is.read();

Exemplos LeByte.java e LeTexto.java

Page 23: waldeck/curso/java

Classe DataInputStream

Sub-Classe de InputStream para ler dados genéricos.

Possui métodos que lêem e convertem automaticamente diversos tipos de dados.

Usado em conjunto com InputStream:InputStream is = new FileInputStream("textfile.txt");

DataInputStream ds = new DataInputStream(is);

Ver LeLinha.java

Page 24: waldeck/curso/java

Métodos do DataInputStream

boolean readBoolean(); byte readByte(); char readChar(); int readInt(); float readFloat(); Stream readLine(); ...

Page 25: waldeck/curso/java

Classe OutputStream

Classe básica para saída de dados. Contraparte da classe InputStream. FileOutputStream:

– Sub-classe de OutputStream que dá acesso aos arquivos.

DataOutputStream:– Idem da DataInputStream para saída de

dados.

Page 26: waldeck/curso/java

Métodos do OutputStream

write(b):– Escreve um inteiro.

write(byte b[]):– Escreve múltiplos bytes de um array.

flush():– Força a escrita de dados que podem estar em

buffers. close():

– Fecha o arquivo (deve ser chamado manualmente, se não pode-se perder dados)

Page 27: waldeck/curso/java

Exemplo

Para abrir um arquivo:FileOutputStream os = new FileOutputStream("bytedata.dat”);

– Cria-se um Stream de saída que usa o FileOutputStream para abrir o arquivo.

Para escrever um dado:os.write(dado);

Exemplos EscreveBytes.java e EscreveDataStream

Page 28: waldeck/curso/java

Buffered Streams

Usados para entrada e saída de dados bufferizadas:– Buffer significa que os dados são guardados

na memória até que se tenha uma certa quantidade, quando então os dados são escritos ou lidos

Classes:– BufferedInputStream– BufferedOutputStream

Page 29: waldeck/curso/java

Arquivos de Acesso Aleatório

Arquivos que permitem o acesso de um dado específico do arquivo

Funciona como um array em disco: – define-se um índice e se pode ler ou escrever

naquele lugar. Usados para implementar qualquer base de

dados decente. Implementado com a classe

RandomAccessFile

Page 30: waldeck/curso/java

Classe RandomAccessFile

Implementa os arquivos de acesso aleatório em Java.

Sub classe direta de Object. Mais poderosa que as classes

FileInputStream e FileOutputStream. Implementa métodos de leitura, escrita e

posicionamento para todos os tipos primitivos.

Page 31: waldeck/curso/java

Abrindo um arquivo aleatóreo

Esta classe possui 2 construtores:– RandomAccessFile(String nome, String

modo)– RandomAccessFile(File file, String modo).

O parâmetro modo indica como o arquivo poderá ser utilizado:– se for "r": arquivo só de leitura.– "rw”: arquivo de leitura e escrita.

Page 32: waldeck/curso/java

Métodos mais importantes

seek():– move um ponteiro que define onde será

realizada a leitura ou a escrita para um novo ponto no arquivo

lenght():– retorna o tamanho do arquivo em bytes.

getFilePointer():– descobre onde está o ponteiro no arquivo.

close()

Page 33: waldeck/curso/java

Métodos de Leitura

read()– método básico de leitura de bytes

readFloat(float v):– Lê um float de 4 bytes no arquivo

readInt(int v):– lê um inteiro de 4 bytes no arquivo

readLong(long v)– lê um inteiro de 8 bytes no arquivo

readShort(int v): lê inteiro de 2 bytes

Page 34: waldeck/curso/java

Métodos de Escrita

write():– método básico de escrita de bytes.

writeFloat(float v):– Guarda um float de 4 bytes no arquivo usando a

função floatToIntBitsmethod writeInt(int v):

– escreve um inteiro de 4 bytes no arquivo writeLong(long v)

– escreve um inteiro de 8 bytes no arquivo

Page 35: waldeck/curso/java

Leitura e escrita de Strings

String readLine():– lê uma linha do arquivo (terminada com “\n” e

retorna para uma String. String readUTF():

– lê uma string do tipo UFT. writeChars(String s)

– escreve a string s no arquivo. writeUTF(String str):

– escreve a String como UFT.

Page 36: waldeck/curso/java

Exemplo

RandomFile.java:– Escreve e Lê números inteiros de um

arquivo.

Page 37: waldeck/curso/java

Bancos de dados complexos

Para aplicações de bancos de dados mais complexos, em Java se utiliza:– JDBC: permite ligar o programa Java a um

banco de dados SQL, DB2, ...– Java DataExpress– dbSwing– etc...

Opção meio porca:serialização de objetos.

Page 38: waldeck/curso/java

Conclusão

Arrays:– Vetores– Matrizes

Arquivos:– FileInputStream– FileOutputStream– RandomAccessFile