javaluz

Upload: thiago-alvarenga

Post on 19-Jul-2015

93 views

Category:

Documents


0 download

TRANSCRIPT

Java: A Linguagem de Programaopor Prof. Dr. Paulo Roberto Gomes Luzzardi

e-mail /msn/facebook/orkut [email protected] e-mail [email protected] Home Page http://infovis.ucpel.tche.br/luzzardi http://graphs.ucpel.tche.br/luzzardi Grupo de TV Digital Interativa http://www.tvdi.inf.br/site/ Grupo de Computao Grfica http://infovis.ucpel.tche.br

Verso 1.37 14-04-2012

Bibliografia DEITEL, H. M. and DEITEL, P. J. Java, como programar, 4 ed.: Porto Alegre: Bookman, 2003 (ISBN 85-363-0123-6).

Pelotas, segunda-feira, 14 de abril de 2012 (20:56:04 pm)

Sumrio1. Arquitetura de um programa em Java ..................................................................................... 5 1.1 Elementos bsicos de um programa em Java ......................................................... 5 1.2 Elementos bsicos de um mtodo esttico ........................................................... 5 1.3 Como compilar um programa em Java via Terminal ........................................... 5 1.4 Como executar um programa em Java via Terminal ........................................... 5 1.5 Pasta contendo os projetos/arquivos em Java .................................................. 5 2. Estrutura de um programa em Java .......................................................................................... 6 2.1 Identificadores ..................................................................................................................... 6 2.2 Comentrios do programador ........................................................................................... 6 2.3 Regras gerais para escrever um programa em Java ........................................ 7 2.4 Palavras reservadas do Java ........................................................................................ 8 2.5 Declarao de variveis .................................................................................................. 8 2.5.1 Onde as variveis podem ser declaradas ..................................................... 8 2.5.2 Inicializao de variveis ................................................................................ 10 2.6 Constantes ............................................................................................................................... 10 2.6.1 Constantes hexadecimais e octais ................................................................. 10 2.6.2 Constantes Strings ................................................................................................... 11 2.6.3 Constantes especiais .............................................................................................. 11 2.7 Comandos do pr-processador do Java ................................................................... 11 2.7.1 O comando import ........................................................................................................ 11 3. Tipos de dados ................................................................................................................................... 12 3.1 Tipos bsicos ........................................................................................................................ 12 3.2 Escrevendo uma classe em Java ................................................................................. 12 3.2.1 Conceitos bsicos ......................................................................................................... 12 3.2.2 Referncia this .............................................................................................................. 14 3.2.3 Lista de Exerccios sobre Classes ................................................................... 15 3.3 Sobrecarga de mtodos em Java ................................................................................. 27 4. Mtodos de entrada e sada de dados ................................................................................ 29 4.1 Entrada de dados via teclado .................................................................................... 29 4.2 Sada de dados via tela ................................................................................................ 30 5. Operadores ............................................................................................................................................ 32 5.1 Operadores aritmticos .................................................................................................. 32 5.2 Operadores relacionais .................................................................................................. 32 5.3 Operadores lgicos ............................................................................................................ 32 5.4 Incremento e decremento ................................................................................................ 33 5.5 Operador de atribuio .................................................................................................. 33 5.6 Casts ........................................................................................................................................... 34 5.7 Expresses ............................................................................................................................... 35 6. Mtodos para funes matemticas padres .................................................................... 36 6.1 Math.abs .................................................................................................................................... 36 6.2 Math.asin ................................................................................................................................. 36 6.3 Math.acos ................................................................................................................................. 36 6.4 Math.atan ................................................................................................................................. 36 6.5 Math.sin .................................................................................................................................... 36 6.6 Math.cos .................................................................................................................................... 36 6.7 Math.tan .................................................................................................................................... 37 6.8 Math.exp .................................................................................................................................... 37 6.9 Math.pow .................................................................................................................................... 37 6.10 Math.sqrt ............................................................................................................................... 37 6.11 Math.log ................................................................................................................................. 37 6.12 Double.parseDouble ......................................................................................................... 37 6.13 Integer.parseInt .............................................................................................................. 37 6.14 Long.parseLong ................................................................................................................... 37 6.15 Math.log10 ............................................................................................................................. 37

2

6.16 Math.random .......................................................................................................................... 38 6.17 Math.PI .................................................................................................................................... 38 6.18 Converso de graus para radianos ........................................................................ 38 7. Comandos ................................................................................................................................................. 39 7.1 Tipos de comandos .............................................................................................................. 39 7.1.1 Sequncia ......................................................................................................................... 39 7.1.2 Seleo ............................................................................................................................. 39 7.1.3 Repetio ......................................................................................................................... 40 7.2 Comando if ............................................................................................................................... 41 7.2.1 if encadeados ............................................................................................................... 42 7.3 O comando switch ................................................................................................................. 42 7.4 Comando while ........................................................................................................................ 45 7.5 O comando for ........................................................................................................................ 46 7.6 O loop do { } while ......................................................................................................... 48 7.7 Interrupo de loops ....................................................................................................... 48 7.7.1 O comando break .......................................................................................................... 48 7.7.2 O comando continue ................................................................................................... 49 7.8 O mtodo System.exit () ................................................................................................ 49 8. Sada formatada (System.out.printf) ................................................................................ 50 9. Lista de exerccios (comandos) ............................................................................................ 51 10. Vetores, Matrizes e Strings ................................................................................................. 55 10.1 Vetores .................................................................................................................................... 55 10.2 Strings .................................................................................................................................... 55 10.3 Matrizes (Multidimensional) .................................................................................... 56 10.4 Vetor de Strings .............................................................................................................. 57 10.5 Inicializao de matrizes e vetores ................................................................. 58 10.6 Inicializao de um vetor de caracteres ....................................................... 58 10.7 Inicializao de matrizes multidimensionais ............................................. 58 10.8 Inicializao de vetores e matrizes sem tamanho .................................... 58 10.9 Classificao de dados ou ordenao (sort) ................................................ 60 10.10 Lista de exerccios (vetores) ............................................................................. 61 11. Manipulao de Strings ............................................................................................................. 64 11.1 Mtodos para manipular Strings ............................................................................. 64 11.2 Lista de exerccios (Strings) ............................................................................... 68 12. Mtodos estticos definidos pelo programador ........................................................ 70 12.1 Valores de retorno ......................................................................................................... 71 12.2 Passagem de parmetros por valor ........................................................................ 73 12.3 Passagem de parmetros por referncia ............................................................ 74 12.4 Mtodos que devolvem valores no-inteiros .................................................. 74 12.5 Argumentos do main (String [] args) ................................................................. 75 12.6 Recursividade ..................................................................................................................... 76 12.7 Lista de Exerccios (mtodos) ............................................................................... 78 13. Classes (Interface ou Coleo) existentes em Java (Container) ................ 81 14. Entrada e sada em disco (Arquivos) .............................................................................. 95 14.1 Mtodos para manipular arquivos em Java ....................................................... 95 14.2 Abertura de um arquivo texto ................................................................................. 97 14.3 Listar um diretrio ....................................................................................................... 98 14.4 Manipulao de um arquivo de palavras ............................................................ 98 14.5 Arquivo Texto ................................................................................................................... 101 14.6 Lista de exerccios (arquivos) ........................................................................... 104 15. Conceitos diversos em Java .................................................................................................. 108 15.1 Operadores bit a bit ................................................................................................... 108 15.2 Formas abreviadas de Java ....................................................................................... 108 16. Listas Lineares: Pilha, Fila e Fila Circular ...................................................... 109 16.1 Implementao de um lista em vetor ................................................................. 109 16.2 Implementao de uma Pilha .................................................................................... 113

3

16.3 Implementao de uma Fila ....................................................................................... 114 16.4 Implementao de uma Fila Circular ................................................................. 115 17. Tratamento de erros .................................................................................................................. 118 17.1 Tratamento de excees .............................................................................................. 119 17.2 Tratamento de erros: Entrada de nmero inteiro via teclado ....... 119 17.3 Tratamento de erros: Diviso por zero .......................................................... 119 17.4 Tratamento de exceo com Exception ............................................................... 120 17.5 Tratamento de exceo com MyException .......................................................... 121 17.6 Exceo em ArrayList ................................................................................................... 121 17.7 Excees criadas pelo programador ................................................................... 122 18. Herana em Java ............................................................................................................................ 125 18.1 Herana simples ............................................................................................................... 125 18.2 Controle de acesso na definio de uma classe derivada ................. 125 18.3 Tipos de acessos (especificadores de acesso) ......................................... 127 18.4 Lista de exerccios sobre Herana ................................................................... 128 18.4.1 Herana (primeiro) ................................................................................................... 128 18.4.2 Herana (segundo) ..................................................................................................... 129 18.4.3 Herana (terceiro) ................................................................................................... 130 19. Coletor de Lixo (Garbage Collector) ............................................................................ 132 20. Construtor e finalizador em Java ................................................................................... 133 21. Applets em Java ............................................................................................................................ 134 22. Threads em Java ............................................................................................................................ 138 23. Sockets em Java ............................................................................................................................ 139 24. Data e Hora em Java .................................................................................................................. 141 25. Glossrio em Java ....................................................................................................................... 142 26. Curiosidades do Java ................................................................................................................ 145 27. Classe Object ................................................................................................................................. 146 28. Classe ArrayDeque ....................................................................................................................... 148 29. Formatar um double, float ou int ................................................................................... 151 30. Leitura e gravao de objetos (registro) em Arquivos ................................... 152 30.1 Gravao de objetos em um arquivo binrio de objetos ...................... 152 30.2 Leitura objetos em um arquivo binrio de objetos ............................... 153

4

1. Arquitetura de um programa em Java1.1 Elementos bsicos de um programa em Javapackage nome_do_pacote; public class nome_da_classe { // depois de compilado: nome_da_classe.class public static void main(String[] args) { corpo_do_programa; System.exit(0); } } Programa Fonte: nome_da_classe.java Classe Java Compilada: nome_da_classe.class (ByteCode) // mtodo principal

// finalizar o programa definitivamente

1.2 Elementos bsicos de um mtodo estticopublic static tipo_de_retorno nome_do_mtodo(tipo_do_agumento nome_do_argumento, ...) { corpo_do_mtodo; return(valor_de_retorno); }

1.3 Como compilar um programa em Java via Terminal$ javac Teste.java $ // gera um arquivo Teste.class

1.4 Como executar um programa em Java via Terminal$ java Teste $

1.5 Pasta contendo os projetos/arquivos em Java/Users/luzzardi/NetBeansProjects /Users/Luzzardi/Documents/NetBeansProjects /home/luzzardi/NetBeansProjects // MacOsX // Windows // Linux - Ubuntu

5

2. Estrutura de um programa em Java2.1 Identificadores So os nomes criados pelo programador para fazer referncia a variveis, constantes, argumentos, atributos e mtodos. Regras para a criao de identificadores: O primeiro caracter pode ser uma letra, ( $ ) ou sublinha ( _ ); Os caracteres seguintes devem ser letras, nmeros ou sublinhas; No h limite de caracteres; No permitido a utilizao de caracteres em branco (caracter espao); Podem ser letras maisculos e minsculos.

Convenes: Sempre comear um identificador com uma letra e no "$" ou "_". Os caracteres $ e _ nunca devem ser usados. Use nomes completos em vez de abreviaes confusas. Palavras-chaves e palavras reservadas da linguagem no podem ser usadas como identificadores. Se o identificador tiver mais de um nome, o primeiro deve comear com letra minscula e os demais devem comear com letras maisculas (int numeroDentes = 0). int numeroDentes = 32; double inflacao; char a, _a; // _a deve ser evitado

Exemplos em variveis:

Exemplos em constantes: final char letra = A; final int tamanho = 10; final double d = 123.45; Exemplos de argumentos: public int Div(int x, int y) { public boolean strChr(String s, char ch) { Exemplos de atributos: private int numElementos; private int []vetor; private int topo; x = raizQuadrada(y); System.out.println(Valor: + inverso(n));

Exemplos em mtodos:

Observao: o mtodo inverso definido pelo programador (1/n). 2.2 Comentrios do programador Os comentrios do programador so linhas de cdigo que no so compiladas pelo compilador, ou seja, servem apenas como anotaes (documentao) para serem lembradas mais tarde (por exemplo, quando forem feitas manutenes no programa). Em Java os comentrios podem ser feitos de duas formas: /* Assim pode ser usado para comentrio de vrias linhas */ // Isto um comentrio de uma linha apenas

6

Um comentrio, pode ainda, utilizar vrias linhas do programa. Veja o exemplo abaixo:/* ---------------------------------------------------Mtodo: STRING Argumentos de entrada: x, y Argumentos de sada: c[], t[] Retorno: Sem Retorno ------------------------------------------------------- */

2.3 Regras gerais para escrever um programa em Java Um programa em Java constitudo de uma ou mais classes delimitadas por chaves { }, onde uma destas classes, obrigatoriamente possui um mtodo chamada main(). As principais regras so: Letras maisculas e minsculas so tratadas como caracteres diferentes; O formato do texto livre; O mtodo main(){} especifica onde o programa comea e termina de ser executado; Todos os comandos so terminados por ponto e vrgula; Todas as variveis devem ser declaradas; { mtodo comea a ser executado; } mtodo termina de ser executado. (1): Imprimir a data no seguinte formato: [Data:

Programa exemplo dd/mm/aaaa].

// -------------------------------------------- Fonte: Prog1.java package prog1; public class Prog1 { public static void main(String[] args) { int dia, mes, ano; dia = 12; mes = 6; ano = 2006; System.out.printf("Data: %02d/%02d/%04d\n", dia, mes, ano); System.exit(0); } }

ou// -------------------------------------------- Fonte: Prog1.java package prog1; public class Prog1 { public static void main(String[] args) { int dia = 12; int mes = 6; int ano = 2006; System.out.println("Data: " + dia + "/" + mes + "/" + ano); System.exit(0); } }

7

2.4 Palavras reservadas do Java abstract catch do final implements long private static throw void const boolean break char class double else finaly float import instanceof native new protected public super switch throws transient volatile while goto (no usadas) byte continue extends for int null return synchronized true case default false if interface package short this try

Observao: As palavras reservadas no podem ser utilizadas pelo programador como nome de variveis, constantes, argumentos, atributos ou mtodos, ou seja, no servem como identificadores. 2.5 Declarao de variveis Sintaxe: tipo_dado_base lista_de_variveis; tipo_dado_base: deve ser um tipo de dado vlido (boolean, char, int, byte, short, long, float, double ou void) lista_de_variveis: um ou mais identificadores separados por vrgula. Exemplo: int i, j ,k; float a, b; char ch; 2.5.1 Onde as variveis podem ser declaradas Definidas fora de todas os mtodos, incluindo o mtodo main() so chamadas de variveis globais e podem ser acessadas em qualquer parte do programa. Estas variveis so alocadas estaticamente na memria RAM (Random Access Memory Memria de acesso randmico). Quando definidas dentro de um mtodo so chamadas de variveis locais e s podem ser acessadas dentro deste mtodo. Estas variveis so alocadas dinamicamente na memria RAM. Na declarao de parmetros formais (argumentos) de um mtodo. Sendo estas locais e alocadas dinamicamente na memria RAM.

Observao: Memria ROM (Read Only Memory Memria somente de leitura). Alocao de memria: (Reserva de espao de memria (RAM) para alocar uma varivel) Alocao esttica de memria: Tipo de alocao de memria em que uma varivel alocada (tem um espao reservado) na memria RAM durante toda a execuo do programa. Este espao de memria desalocado somente quando o programa acaba. Alocao dinmica de memria: Tipo de alocao de memria em que uma varivel alocada (tem um espao reservado) na memria RAM temporariamente. Este espao de memria desalocado quando o espao no mais necessrio (coleta automtica de lixo garbage collector).

8

Programa exemplo (2): O programa realiza uma operao de potncia Xy.// -------------------------------------------- Fonte: Prog2.java package prog2; import java.util.Scanner; public class Prog2 { static double resultado; public static void main(String[] args) { // definio das variveis locais Scanner entrada = new Scanner (System.in); String s; double base, expoente; // mtodo que permite imprimir na tela em modo texto System.out.print("Base: "); // mtodo que permite entrada de dados via teclado em terminal texto s = entrada.nextLine(); // mtodo que converte String em double base = Double.parseDouble(s); System.out.print("Expoente: "); s = entrada.nextLine(); expoente = Double.parseDouble(s); // chamada do mtodo POT resultado = POT(base, expoente); // mtodo que imprime na tela com formatao do nmero System.out.printf("Resposta = %7.2f\n", resultado); // termina o programa System.exit(0); } // ---------------------------------- mtodo esttico POT static double POT (double x, double y) { // corpo do mtodo POT definido pelo programador // os argumentos x e y so variveis locais // definio de uma varivel local double resp; resp = Math.exp(Math.log(x) * y); return(resp); // retorno do mtodo } } // importar classe Scanner // definio da classe Prog2 // varivel global

Variveis globais: resultado Variveis locais: base, expoente, resp, x, y Compilar por linha de comandos (via terminal):$ javac Prog2.java $ // gera arquivo Prog2.class

Executar por linha de comandos (via terminal):$ java Prog2 // executa o arquivo Prog2.class

9

2.5.2 Inicializao de variveis Em Java possvel fornecer valores iniciais a maioria das variveis ao mesmo tempo em que elas so declaradas, colocando um sinal de igual e uma constante aps o nome da varivel. tipo_dado_base nome_da_varivel = constante; Exemplos:char ch = 'a'; // tipo_dado_base nome_da_varivel = constante_caracter String s = Pelotas; // tipo_dado_base nome_da_varivel = constante_string int n = 0; // tipo_dado_base nome_da_varivel = constante_inteira float y = 123.45f; // tipo_dado_base nome_da_varivel = constante_real double z = 123.45; int [] v = {10, 20, 30}; // vetor unidimensional int [][] t = {{1, 2}, {3, 4}, {5, 6}}; // matriz bidimensional String [] cidade = {Pelotas, Rio Grande, Poa}; char [] caracter = {S, s, N, n};

2.6 Constantes Valores fixos que o programa no pode alterar. As constantes podem ser de qualquer tipo bsico. Tipo char int float String Exemplos de constantes 'a' 'n' 1 123 123.23 "Java" '9' 2100 -234 4.34e-3(classe String)

2.6.1 Constantes hexadecimais e octais A linguagem de programao Java permite especificar constantes inteiras em octal. Uma constante octal comea com um 0 (zero) antes dos demais nmeros. Exemplos: int hexadecimal = 0xf; int octal = 011; Observaes: Qualquer nmero octal formado por oito nmeros ( 0 .. 7 ). Qualquer nmero hexadecimal formado por dezesseis nmeros (0 ..9, A, B, C, D, E, F).// 15 em decimal // 9 em decimal

// ------------------------------------------------------------- Fonte: Hexadecimal.java package hexadecimal; public class Hexa { public static void main(String[] args) { for (int decimal = 0;decimal 0) { n--; } else { System.out.println("ERRO: Vetor Vazio"); } } // ------------------ removeElemento public void removeElemento(int valor) { if (n > 0) { for (int i = 0; i < n; i++) { if (valor == v[i]) { for (int j = i; j < n - 1; j++) { v[j] = v[j + 1]; } n--; break; } }

22

}

} else { System.out.println("ERRO: Vetor Vazio"); }

// ------------------ removePosicao public void removePosicao(int posicao) { if (n > 0 && posicao > 0 && posicao < n) { for (int j = posicao; j < n - 1; j++) { v[j] = v[j + 1]; } n--; } else { System.out.println("ERRO: Vetor Vazio"); } } // ------------------ primeiro public int primeiro() { if (n > 0) { return (v[0]); } else { return (-1); } } // ------------------ ultimo public int ultimo() { if (n > 0) { return (v[n - 1]); } else { return (-1); } } // ----------------- exibe public void exibe() { System.out.print("Vetor: ["); for (int i = 0; i < n-1; i++) { System.out.print(v[i] + " "); } System.out.println(v[n-1] + "]"); } // ----------------- length public int length() { return (n); } // ----------------- existe public boolean existe(int valor) { for (int i = 0; i < n; i++) { if (v[i] == valor) { return (true); } } return (false); } } Resultado do Programa: Vetor: [10 20 30 40] Vetor: [10 20 30 40 50] ERRO: Excedeu o Limite do Vetor Vetor: [10 20 30 40 50] Total de Elementos: 4 Primeiro: 10 ltimo: 40 Existe elemento: 20 Vetor: [10 30 40]

23

Vetor: [10 40]

Exemplo da definio de uma classe Data:// ----------------------------------------------- Fonte: Data.java package data; public class Data { private int dia, mes, ano; // atributos da classe // construtor da classe

public Data(int dd, int mm, int aa) { dia = dd; mes = mm; ano = aa; }

// ------------------------------- sobrecarga do mtodo toString public String toString() { return(dia + "/" + mes + "/" + ano); } }

Programa exemplo que utiliza a classe Data:// --------------------------------------------- Fonte: Main.java package data; public class Main { public static void main(String[] args) { Data data = new Data(16, 3, 2010); System.out.println(data); } }

Exemplo da definio de uma classe Calculadora:// -------------------------------------------------------- Fonte: Calculadora.java package calc; import javax.swing.*; public class Calculadora { // ............................................. lista de atributos da classe private double x, y, resp; private char op; private int erro; // ............................................. mtodos pblicos da classe public Calculadora () { erro = 0; } // construtor

// ---------------------------- entradaDados public void entradaDados() { String s; s = JOptionPane.showInputDialog("Digite um Valor: "); x = Double.parseDouble(s); do { s = JOptionPane.showInputDialog("Operador [+ - * / Rr Pp Ss Cc Tt]: "); op = s.charAt(0); } while (!strChr("+-*/RrPpSsCcTt", op)); if (!strChr("RrSsCcTt", op)) { s = JOptionPane.showInputDialog("Digite outro Valor: ");

24

y = Double.parseDouble(s); } } // ---------------------------- operaCalculadora public void operaCalculadora() { final double pi = 3.14158; double rads; switch (op) { case '+': case '-': case '*': case '/':

resp = soma(x, y); break; resp = subtracao(x, y); break; resp = multiplicacao(x, y); break; if (y == 0) erro = 1; // divisao por zero else resp = divisao(x, y); break; if (x < 0) erro = 2; // raiz negativa else resp = raizQuadrada(x); // Raiz Quadrada break; resp = power(x, y); break; resp = seno(x); break; resp = cosseno(x); break; // potencia // seno // cosseno

case 'R': case 'r':

case 'P': case 'p': case 'S': case 's': case 'C': case 'c': case 'T': case 't':

if (x == 90 || x == 180) { erro = 3; } else { resp = tangente(x); // tangente } break;

} } // ---------------------------- exibeCalculadora public void exibeCalculadora() { switch (erro) { case 1: JOptionPane.showMessageDialog(null, "Erro: Divisao por Zero", "Calculadora", JOptionPane.PLAIN_MESSAGE); break; case 2: JOptionPane.showMessageDialog(null, "Erro: Raiz Complexa", "Calculadora", JOptionPane.PLAIN_MESSAGE); break; case 3: JOptionPane.showMessageDialog(null, "Erro: Tangente Infinita", "Calculadora", JOptionPane.PLAIN_MESSAGE); break; default: JOptionPane.showMessageDialog(null, "Resposta: " + resp, "Calculadora", JOptionPane.PLAIN_MESSAGE); } } // ................................................ mtodos privados da classe // ---------------------------- strChr private boolean strChr(String s, char ch) { for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == ch) { return(true); }

25

} return(false); } // ---------------------------- soma private double soma(double x, double y) { return(x + y); } // ---------------------------- subtracao private double subtracao(double x, double y) { return(x - y); } // ---------------------------- multiplicacao private double multiplicacao(double x, double y) { return(x * y); } // ---------------------------- divisao private double divisao(double x, double y) { if (y == 0) { erro = 1; return(-1); } return(x / y); } // ---------------------------- raizQuadrada private double raizQuadrada(double x) { return(Math.sqrt(x)); } // ---------------------------- power private double power(double x, double y) { return(Math.pow(x, y)); } // ---------------------------- seno private double seno(double x) { final double pi = 3.14158; double rads; rads = x * pi / 180.0; return(Math.sin(rads)); } // ---------------------------- cosseno private double cosseno(double x) { final double pi = 3.14158; double rads; rads = x * pi / 180.0; return(Math.cos(rads));

}

// ---------------------------- tangente private double tangente(double x) { final double pi = 3.14158; double rads; rads = x * pi / 180.0; return(Math.tan(rads)); } }

Programa exemplo que utiliza a classe Calculadora:

26

// ---------------------------------------------- Fonte: Calc.java package calc; public class Calc { public static void main(String[] args) { Calculadora calc = new Calculadora(); calc.entradaDados(); calc.operaCalculadora(); calc.exibeCalculadora(); } }

Programa exemplo que mostra outra forma de usar a funo strChr oriunda da linguagem C usando o mtodo indexOf:// --------------------------------------------------- Fonte: strchr.java package strchr; import java.util.Scanner; public class strChr { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); String nome, s; do { System.out.print("Nome: "); nome = entrada.nextLine(); int n = nome.length(); System.out.println(nome + " seu nome tem " + n + " caracteres"); do { System.out.print("Continua [S/N]? " ); s = entrada.nextLine(); } while ("SsNn".indexOf(s) == -1); } while ("Nn".indexOf(s) == -1); // } while ("S".equalsIgnoreCase(s)); System.exit(0);

} }

Modificadores de Acesso: public: Os atributos e mtodos tornam-se pblicos, ou seja, qualquer outro mtodo pode chamar ou utilizar estes atributos e/ou mtodos. private: Somente os mtodos da classe (membros) da classe podem chamar ou utilizar atributos ou mtodos privados. protected: Utilizado em herana simples de classe (construo de subclasses), ou seja, uma subclasse herda todos os atributos e mtodos da classe base (superclasse). Deixa acessvel os atributos e/ou mtodos para todas as outras classes (classe base) e subclasses (classe derivada).

3.3 Sobrecarga de mtodos em Java Java permite que mtodos estticos sejam sobrecarregados, desta forma, o retorno, nmero de argumentos ou mesmo o tipo de dados dos argumentos possam ser diferentes.// ------------------------------------------ Fonte: SobreCarga.java package sobrecarga;

27

public class SobreCarga { public static void main(String[] args) { imprime("Pelotas-RS"); imprime(123.45); imprime(123.45f); imprime(123); imprime('A'); } static void imprime(String s) { System.out.println("String: " + s); } static void imprime(double d) { System.out.println("Double: " + d); } static void imprime(float f) { System.out.println("Float: " + f); } static void imprime(int i) { System.out.println("Inteiro: " + i); } static void imprime(char ch) { System.out.println("Caracter: " + ch); } }

28

4. Mtodos de entrada e sada de dadosA seguir so mostrados alguns mtodos que permitem fazer entrada de dados via teclado e sada de dados via monitor (tela).

4.1 Entrada de dados via tecladoA seguir visto um exemplo de entrada de dados usando o pacote Scanner. Programa exemplo (8): Entrada de Dados via teclado em terminal de texto usando a biblioteca Scanner.// ---------------------------------------------- Fonte: Prog8.java package Prog8; import java.util.Scanner; public class Prog8 { public static void main(String[] args) { Scanner input = new Scanner (System.in); String s; int x; System.out.print("Inteiro: "); s = input.nextLine(); x = Integer.parseInt(s); System.out.println("Valor: " + x); System.exit(0); // ou x = input.nextInt();

} }

A seguir visto um exemplo de entrada de dados usando o pacote swing. Programa exemplo (9): Entrada de dados via teclado em caixa de dilogo grfica sobreposta a interface usando a biblioteca swing.// --------------------------------------------- Fonte: Prog9.java package Prog9; import javax.swing.*; public class Prog9 { public static void main(String[] args) { String s; s = JOptionPane.showInputDialog("String: "); int x = Integer.parseInt(s); JOptionPane.showMessageDialog(null, "Inteiro: " + x, "Resultado", JOptionPane.PLAIN_MESSAGE); // JOptionPane.showMessageDialog(null, "Inteiro: " + x); // funciona tambm, pois os dois ltimos argumentos podem ser suprimidos System.exit(0); } } // carrega toda a biblioteca swing

A seguir visto um exemplo de entrada de dados usando o pacote java.io (BufferReader e InputStreamReader). Programa exemplo (10): Entrada de dados via teclado em terminal textual usando as bibliotecas BufferedReader e InputStreamReader .

29

// ----------------------------------------------- Fonte: Prog10.java package Prog10; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Prog10 { public static void main(String[] args) throws IOException { BufferedReader userInput = new BufferedReader (new InputStreamReader(System.in)); System.out.print("Nome: "); String nome = userInput.readLine(); Integer n = nome.length(); System.out.println("Nome: " + nome + " tem " + nome.length() + " caracteres"); System.exit(0); } }

4.2 Sada de dados via telaA seguir visto um exemplo de sada de dados na tela usando o mtodo System.out.print. Programa exemplo (11): Sada de dados via tela usando o mtodo System.out.print, System.out.println ou System.out.printf.// -------------------------------------------- Fonte: Prog11.java package Prog11; import java.util.Scanner; public class Prog11 { public static void main(String[] args) { Scanner entrada = new Scanner (System.in); String s; int x; System.out.print("Inteiro: "); s = entrada.nextLine(); x = Integer.parseInt(s); System.out.println("Valor: " + x); System.out.printf("Valor: %03d\n ", x); System.exit(0);

} }

A seguir visto um exemplo de sada de dados na tela usando o pacote swing. Programa exemplo (12): Sada de dados via tela em caixa de dilogo grfica sobreposta a interface usando a biblioteca swing.// ------------------------------------------ Fonte: Prog12.java package Prog12; import javax.swing.*; public class Prog12 { public static void main(String[] args) { String s; s = JOptionPane.showInputDialog("String: "); // carrega toda a biblioteca swing

30

int x = Integer.parseInt(s); JOptionPane.showMessageDialog(null, "Inteiro: " + x, "Resultado", JOptionPane.PLAIN_MESSAGE); System.exit(0); } }

Sintaxe:JOptionPane.showMessageDialog(null, x = + x, Ttulo, JOptionPane.PLAIN_MESSAGE);

null significa que a mensagem ser centralizada x = + x significa que sair na caixa de dialogo x = 5 (por exemplo) Ttulo significa o ttulo da caixa de dilogo JOptionPane.PLAIN_MESSAGE significa caixa sem cone Tabela 3: Tipos de conesTipo de cone cone de erro cone de informao i cone de advertncia ! cone de pergunta ? Sem cone Tipo de Mensagem JOptionPane.ERROR_MESSAGE JOptionPane.INFORMATION_MESSAGE JOptionPane.WARNING_MESSAGE JOptionPane.QUESTION_MESSAGE JOptionPane.PLAIN_MESSAGE

31

5. OperadoresSo smbolos especiais que obrigam determinadas operaes. Estas operaes comparativas ou lgicas. 5.1 Operadores aritmticos So operadores que realizam uma operao matemtica. Tabela 4: Operadores aritmticosOperador aritmtico + * / % -- ++ Ao Subtrao Adio Multiplicao Diviso Resto inteiro da diviso Decremento/incremento

o compilador a executar podem ser aritmticas,

Precedncia dos operadores aritmticos (Hierarquia nas Operaes) Tabela 5: Precedncia dos operadores aritmticosHierarquia 1 2 3 4 5 6 Operao Parnteses Mtodos ++ -- (menos unrio) * / % + -

Observao: Quando houver duas ou mais operaes de mesma hierarquia, o compilador executa-as da esquerda para a direita. 5.2 Operadores relacionais So operadores que permitem comparar valores, ou seja, utilizados principalmemte em comandos que possuem condies. Tabela 6: Operadores relacionaisOperador > >= < >= < == != && ||

ch[j]) { char temp = ch[i]; ch[i] = ch[j]; ch[j] = temp; } } } for (int i =0;i < numCar;i++) { System.out.printf("%c", ch[i]); } System.out.printf("\n");

} } }

12.6 Recursividade Um mtodo recursivo, se esta, fizer uma chamada a si prpria. Programa exemplo (42): O programa calcula o fatorial de um nmero recursivamente.// ------------------------------------------ Fonte: Prog42.java package prog42; import java.util.Scanner; public class Prog42 {

76

public static void main(String[] args) { Scanner entrada = new Scanner(System.in); String s; int n; long fat; do { do {

}

System.out.printf("n = "); s = entrada.nextLine(); n = Integer.parseInt(s); } while (n < 0 || n > 19); fat = fatorial(n); System.out.printf("Fatorial: %d\n", fat); } while (n != 0);

// ----------------------------------------- fatorial static long fatorial(int num) { if (num == 0) { return 1; } return(num * fatorial(num - 1)); } }

// recursividade

Programa exemplo recursivamente.

(43):

O

programa

calcula

a

soma

de

um

nmero

// ------------------------------------------- Fonte: Prog43.java package prog43; import java.util.Scanner; public class Prog43 { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); String s; int n; long sum; do { System.out.printf("n = "); s = entrada.nextLine(); n = Integer.parseInt(s); } while (n < 0 || n > 19); if (n > 0) { sum = soma(n); System.out.printf("Soma: %d\n", sum); } } while (n != 0); } // ----------------------- soma static long soma(int n) { long s; if (n == 1) { return(1); } s = n + soma(n-1); return(s); } } do {

// recursividade

77

12.7 Lista de Exerccios (mtodos) 12.7.1 Escreva em Java o mtodo nmeroPalavras. O mtodo recebe uma String (nome) e retorna o nmero de palavras do nome (veja exemplo abaixo):// ------------------------------------------------------ Fonte: teste.java package teste; import java.util.Scanner; public class Teste { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); String nome; int n; System.out.print("Nome: "); nome = entrada.nextLine(); n = numeroPalavras(nome); System.out.printf("Seu nome tem %d palavra(s)\n", n);

}

// ---------------------------- numeroPalavras }

Exemplo: Nome: Paulo Roberto Gomes Luzzardi Seu nome tem 4 palavra(s) 12.7.2 Escreva em Java o mtodo verificaQuadrante. O mtodo recebe um valor para x e um valor para y e retorna o nmero do quadrante (1, 2, 3 ou 4).// --------------------------------------------------------- Fonte: teste.java package teste; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); String s; int x, y, n; System.out.print("x: "); s = entrada.nextLine(); x = Integer.parseInt(s); System.out.print("y: "); s = entrada.nextLine(); y = Integer.parseInt(s); n = verificaQuadrante(x, y); System.out.printf("Quadrante: %d\n", n); } } // ---------------------------- verificaQuadrante

Exemplo: x: 1 y: 2 Quadrante: 1

| 2 | 1 ________________________ | 3 | 4

78

12.7.3 Escreva o mtodo: final_da_placa. O mtodo recebe uma placa de automvel no formato: xxx9999 e retorna o ltimo dgito da placa.// ------------------------------------------------------------ Fonte: teste.java package teste; import java.util.Scanner; public class Teste { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); String placa; char fim; System.out.print("Qual a placa de seu carro [xxx9999]: "); placa = entrada.nextLine(); fim = finalPlaca(placa); System.out.printf("Final da Placa : %c\n", fim);

}

// ---------------------------- finalPlaca }

Exemplo: Qual a Placa de seu carro [xxx9999]: IDJ7345 Final da Placa : 5 12.7.4 Escreva o mtodo numVogais. O mtodo recebe uma String (nome) e retorna a quantidade de vogais da String.// ------------------------------------------------------------ Fonte: teste.java package teste; import java.util.Scanner; public class Teste { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); String nome; int vogais; System.out.print("Nome: "); nome = entrada.nextLine(); vogais = numVogais(nome); System.out.printf("Vogais: %d\n", vogais); } // -------------------------- numVogais }

Exemplo: Nome: Paulo Vogais: 3 12.7.5 Escreva o mtodo calculaHipotenusa. O mtodo recebe o cateto adjacente (b) e o cateto oposto (a) e retorna o valor da hipotenusa dado pela seguinte frmula: Frmula: h2 = a2 + b2

// ------------------------------------------------------------ Fonte: teste.java package teste;

79

import java.util.Scanner; public class Teste { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); String s; float a, b, h; System.out.print("Cateto Adjacente: "); s = entrada.nextLine(); a = Float.parseFloat(s); System.out.print("Cateto Adjacente: "); s = entrada.nextLine(); b = Float.parseFloat(s); h = calculaHipotenusa(a, b); System.out.printf("Hipotenusa: %f\n", h); } // ---------------------------- calculaHipotenusa }

Exemplo: Cateto Adjacente: 3 Cateto Oposto: 3 Hipotenusa: 3 12.7.6 Escreva em Java o mtodo calculaReajuste. O mtodo recebe o valor do salrio e o ndice de reajuste e retorna o salrio atualizado.// ------------------------------------------------------------ Fonte: teste.java package teste; import java.util.Scanner; public class Teste { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); String s; float salario, indice, reajuste; System.out.print("Salrio (R$): "); s = entrada.nextLine(); salario = Float.parseFloat(s); System.out.print("ndice de Reajuste: "); s = entrada.nextLine(); indice = Float.parseFloat(s); reajuste = calculaReajuste(salario, indice); System.out.printf("Salrio Atualizado (R$): %.2f\n", reajuste); } // ---------------------------- calculaReajuste }

Exemplo: Salrio (R$): 1000 ndice de Reajuste: 10 Salrio Atualizado (R$): 1100

80

13. Classes (Interface ou Coleo) existentes em Java (Container)Java possui diversas classes pr-existentes chamadas container. Um container ou coleo simplesmente um objeto que agrupa mltiplos elementos em uma nica unidade. As colees so utilizadas para armazenar, recuperar e manipular dados agregados. A seguir pode-se ver algumas classes, colees ou implementaes existentes em Java: Tabela 13: Lista de ContainerContainer Array DList SList HashMap OrderedMap HashSet OrderedSet PriorityQueue Queue Stack Deque Descrio Array expansvel Lista Duplamente Encadeada Lista Encadeada Simples fast associative container associative container fast set or multiset set or multiset array-based heap Fila (Interface) Pilha Fila Dupla (duas entradas e duas sadas)

Collection FrameWork (Colees) Pacote: import java.util.*; Uma coleo um objeto que representa um grupo de objetos. Um Collection Framework uma arquitetura para representar e manipular colees independente dos detalhes de sua implementao. Uma coleo composta de Interfaces e Implementaes. Interfaces

Figura 3: Arquitetura das Interfaces Implementaes Sets(Conjuntos): HashSet, LinkedHashSet, TreeSet, EnumSet Lists (Listas): Vector, Stack, LinkedSet, ArrayList

81

Queue (Filas): PriorityQueue Maps: HashTable, HashMap, LinkedHashMap, WeakHashMap, IdentityHashMap, TreeMap A seguir so descritos alguns destes elementos:

Vector (Vetor)import java.util.Vector; A classe Vector utilizada em uma estrutura armazenada em um vetor, ou seja, uma lista de elementos. de dados

A seguir so descritos os principais mtodos da classe Vector. Sintaxe: void add(int index, Object element); Insere um elemento especificado na posio especificada no Vetor. Sintaxe: boolean add(Object o); Anexa o elemento especificado no fim do Vetor. Sintaxe: boolean addAll(Collection c); Anexa todos os elementos da coleo especificada no final do Vetor, na ordem que eles so retornados pelo iterador da coleo especificada. Sintaxe: boolean addAll(int index, Collection c); Insere todos os elementos na coleo especificada no Vetor na posio especificada. Sintaxe: void addElement(Object obj); Adiciona o componente especificado no tamanho em um. Sintaxe: int capacity(); Retorna a corrente capacidade do Vetor. Sintaxe: void clear(); Remove todos os elementos do Vetor. Sintaxe: Object clone(); Retorna um clone do Vetor. Sintaxe: boolean contains(Object elem); Testa se um objeto especfico um componente do Vetor. Sintaxe: boolean containsAll(Collection c); Retorna true se o Vetor contm todos os especfica. elementos da coleo fim do Vetor, aumentando se

Sintaxe: void copyInto(Object[] anArray); Copia os componentes do Vetor para o Array especificado. Sintaxe: Object elementAt(int index); Retorna o componente especificado pelo index. Sintaxe: Enumeration elements(); Retorna uma enumerao dos componentes do Vetor. Sintaxe: void ensureCapacity(int minCapacity);

82

Aumenta a capacidade do Vetor, se necessrio, estando certo que de poder armazenar o nmero de componentes especificados pelo argumento mincapacity. Sintaxe: boolean equals(Object o); Compara o objeto especificado com o Vetor pela igualdade. Sintaxe: Object firstElement(); Retorna o primeiro componente (o item de index 0) do Vetor. Sintaxe: Object get(int index); Retorna o elemento da posio especificada do Vetor. Sintaxe: int hashCode(); Retorna o valor do cdigo hash do Vetor. Sintaxe: int indexOf(Object elem); Procura a primeira ocorrncia de um dado argumento, testando a igualdade pelo mtodo equals. Sintaxe: int indexOf(Object elem, int index); Procura pela primeira ocorrncia de um dado argumento, comeando a busca pelo index, e testando pela igualdade usando o mtod equals. Sintaxe: void insertElementAt(Object obj, int index); Insere o objeto especificado como um componente no Vetor no index especificado. Sintaxe: boolean isEmpty(); Testa se o Vetor no tem componentes. Sintaxe: Object lastElement(); Retorna o ltimo componente do Vetor. Sintaxe: int lastIndexOf(Object elem); Retorna o index da ltima ocorrncia Vetor. do objeto especificado no

Sintaxe: int lastIndexOf(Object elem, int index); Procura para trs por um objeto especificado, comeando no index especificado e retorna um index para ele. Sintaxe: Object remove(int index); Remove o elemento da posio especificada no Vetor. Sintaxe: boolean remove(Object o); Remove a primeira ocorrncia do elemento especificado no Vetor, se o Vetor no contm o elemento, ele no alterado. Sintaxe: boolean removeAll(Collection c); Remove do Vetor todos os elementos que contm a coleo especificada. Sintaxe: void removeAllElements(); Remove todos os componentes do Vetor e seta o tamanho em zero. Sintaxe: boolean removeElement(Object obj); Remove a primeira (menor indexado) ocorrncia do argumento do Vetor. Sintaxe: void removeElementAt(int index); Deleta o componente com index especificado.

83

Sintaxe:protected void removeRange(int fromIndex, int toIndex); Remove da lista todos os elementos escolhidos entre o fromIndex (inclusive) e toIndex (exclusive). Sintaxe: boolean retainAll(Collection c); Mantm somente os elementos do Vetor especificada. que contm a coleo

Sintaxe: Object set(int index, Object element); Troca o elemento da posio especificada do especificado.

Vetor

com

o

elemento

Sintaxe: void setElementAt(Object obj, int index); Seta o componente com index especificado do Vetor para o objeto especificado. Sintaxe: void setSize(int newSize); Seta o tamanho do Vetor. Sintaxe: int size(); Retorna o nmero de componentes do Vetor. Sintaxe: List subList(int fromIndex, int toIndex); Retorna uma viso da poro da Lista entre fromIndex (inclusive) e toIndex (exclusive). Sintaxe: Object[] toArray(); Retorna um array contendo todos correta. os elementos no Vetor na ordem

Sintaxe: Object[] toArray(Object[] a); Retorna um array contendo todos os elementos no Vetor ordem correta; o tipo runtime do array especificado retornado. Sintaxe: String toString(); Retorna uma string do Vetor, elemento. contendo uma representao de cada

Sintaxe: void trimToSize(); Ajusta a capacidade do Vetor para a atual dimenso do Vetor. Programa Exemplo (3): Exemplo de um vetor usando a classe Vector.// ------------------------------------------- Fonte: Prog3.java package Prog3; import java.util.Vector; import javax.swing.JOptionPane; public class Prog3 { public static void main(String[] args) { Vector vetor = new Vector(); String s, extenso = ""; int u = -1, nodo; do { u++; s = JOptionPane.showInputDialog("Nodo: "); nodo = Integer.parseInt(s); if (nodo != 0) { vetor.add(nodo); // vetor.add(u, nodo); } } while (nodo != 0); extenso = vetor.toString();

84

int n = vetor.size(); /* ------------------------------------------------- outra forma for (int i = 0; i < n;i++) extenso = extenso + vetor.get(i) + " "; ---------------------------------------------------------------*/ JOptionPane.showMessageDialog(null, "Elementos: " + n + "\nVetor: " + extenso, "Vector", JOptionPane.PLAIN_MESSAGE); } }

Programa Exemplo (3a): Exemplo de um vetor usando a classe Vector, inserindo em uma determinada posio.// --------------------------------------------- Fonte: Prog3a.java package prog3a; import java.util.Vector; import javax.swing.*; public class Prog3a { public static void main(String[] args) { Vector vetor = new Vector(); String s, extenso = ""; int nodo, pos; do { s = JOptionPane.showInputDialog("Nodo: "); nodo = Integer.parseInt(s); if (nodo != 0) { s = JOptionPane.showInputDialog("Posicao: "); pos = Integer.parseInt(s); if (pos >= 0 && pos 10000000 b = a >> 1; // b = 64 binrio -> 0100000 c = b 1000000 System.out.printf("a = %d\n",a); System.out.printf("b = %d\n",b); System.out.printf("c = %d\n",c); System.exit(0); } }

15.2 Formas abreviadas de JavaJava tem abreviaes especiais que simplificam a codificao de um certo tipo de comando de atribuio. Exemplo: x = x + 10; ... pode ser escrito como ... funcionar com x += 10; todos os operadores

Esta forma abreviada aritmticos de Java. Forma normal: Forma abreviada:

varivel = varivel operador constante; x = x + 7; varivel operador= constante; x += 7;

108

16. Listas Lineares: Pilha, Fila e Fila CircularA seguir visto a implementao de uma Pilha, uma Fila e uma Fila Circular implementada em um vetor de inteiros. Pilha: Estrutura linear organizada de forma que a entrada e a sada dos dados feita na mesma extremidade. Forma de acesso: LIFO (Last Input First Output), ou seja, o ltimo elemento a entrar na pilha o primeiro a sair dela. Fila: Estrutura linear organizada em forma que a entrada dos dados feita por uma extremidade da lista linear e, a sada, feita na outra extremidade. Forma de acesso: FIFO (First Input First Output), ou seja, o primeiro elemento a entrar na fila o primeiro a sair da fila. E - Entrada de Dados S - Sada de Dados

Figura 4: Representao de uma fila e uma pilha Funcionamento desta pilha:Entrada: 1, 2 e 3 Sada: 3, 2 e 1

Funcionamento desta fila:Entrada: 1, 2 e 3 Sada: 1, 2 e 3

16.1 Implementao de um lista em vetor A seguir visto um programa em Java que simula uma lista linear armazenada em um vetor. Note que o nmero de elementos da lista armazenado no primeiro nodo do vetor, ou seja, v[0]. Programa exemplo (50): O programa permite inserir nmeros inteiros em uma Lista Linear implementada em um vetor. Quando o nmero digitado for igual zero (0), todos os nmeros da lista so listados.// ----------------------------------------------- Fonte: Prog50.java package prog50; import javax.swing.*;

109

public class Prog51 { final static int SUCESSO = 0; final static int LISTA_CHEIA = 1; final static int LISTA_VAZIA = 2; public static void main(String[] args) { final int m = 7; int [] v = new int [m]; String s; int valor; char ch; int erro = 0; criaLista(v); do { s = JOptionPane.showInputDialog("Elemento: "); valor = Integer.parseInt(s); if (valor != 0) erro = incluiFim(m, v, valor); if (erro == LISTA_CHEIA) { JOptionPane.showMessageDialog(null, "Erro: Lista Cheia", "Ateno", JOptionPane.PLAIN_MESSAGE); exibeLista(v); return; } } while (valor != 0); exibeLista(v); } // -------------------------------------------------- criaLista static void criaLista(int [] v) { v[0] = 0; // armazena o nmero de elementos da lista } // -------------------------------------------------- incluiFim static int incluiFim(int m, int [] v, int valor) { String s; int n = v[0]; if (n < m-1) { v[0]++; v[v[0]] = valor; return(SUCESSO); } else return(LISTA_CHEIA); } // -------------------------------------------------- exibeLista static void exibeLista(int [] v) { String s = ""; int n = v[0]; if (n == 0) JOptionPane.showMessageDialog(null, "Erro: Lista Vazia", "Ateno", JOptionPane.PLAIN_MESSAGE); else { for (int i = 1; i n); erro = incluiPos(m, v, valor, pos); break; case 'F': case 'f': erro = incluiFim(m, v, valor); break; } if (erro == LISTA_CHEIA) { JOptionPane.showMessageDialog(null, "Erro: Lista Cheia", "Ateno", JOptionPane.PLAIN_MESSAGE); exibeLista(v); return; } } } while (valor != 0); exibeLista(v); } // -------------------------------------------------- criaLista static void criaLista(int [] v) { v[0] = 0; // armazena o nmero de elementos } // -------------------------------------------------- incluiFim static int incluiFim(int m, int [] v, int valor) { String s; int n = v[0]; if (n < m - 1) {

111

} else }

v[0]++; v[v[0]] = valor; return(SUCESSO); return(LISTA_CHEIA);

// -------------------------------------------------- incluiInic static int incluiInic(int m, int [] v, int valor) { String s; int n = v[0]; if (n < m - 1) { v[0]++; for (int i = n + 1;i >= 2;i--) v[i] = v[i-1]; v[1] = valor; return(SUCESSO); } else return(LISTA_CHEIA);

}

// -------------------------------------------------- incluiPos static int incluiPos(int m, int [] v, int valor, int pos) { String s; int n = v[0]; if (n < m - 1) { v[0]++; if (pos == v[0] - 1) { v[v[0]] = v[n]; v[n] = valor; } else { for (int i = n + 1;i >= pos;i--) { v[i] = v[i-1]; System.out.println("Valor: " + v[i]); } v[pos] = valor; } return(SUCESSO); } else return(LISTA_CHEIA); } // -------------------------------------------------- tamanhoLista static int tamanhoLista(int [] v) { return(v[0]); } // -------------------------------------------------- exibeLista static void exibeLista(int [] v) { String s = ""; int n = v[0]; if (n == 0) JOptionPane.showMessageDialog(null, "Erro: Lista Vazia", "Ateno", JOptionPane.PLAIN_MESSAGE); else { for (int i = 1; i