Sie sind auf Seite 1von 31

Mdulo 1

Introduo Programao I

Lio 4
Fundamentos da programao

Verso 1.0 - Jan/2007

JEDITM

Autor Florence Tiu Balagtas Equipe Joyce Avestro Florence Balagtas Rommel Feria Reginald Hutcherson Rebecca Ong John Paul Petines Sang Shin Raghavan Srinivas Matthew Thompson

Necessidades para os Exerccios


Sistemas Operacionais Suportados NetBeans IDE 5.5 para os seguintes sistemas operacionais: Microsoft Windows XP Profissional SP2 ou superior Mac OS X 10.4.5 ou superior Red Hat Fedora Core 3 Solaris 10 Operating System (SPARC e x86/x64 Platform Edition) NetBeans Enterprise Pack, poder ser executado nas seguintes plataformas: Microsoft Windows 2000 Profissional SP4 Solaris 8 OS (SPARC e x86/x64 Platform Edition) e Solaris 9 OS (SPARC e x86/x64 Platform Edition) Vrias outras distribuies Linux Configurao Mnima de Hardware Nota: IDE NetBeans com resoluo de tela em 1024x768 pixel Sistema Operacional Processador Memria Microsoft Windows Linux Solaris OS (SPARC) Solaris OS (x86/x64 Platform Edition) Mac OS X 500 MHz Intel Pentium III workstation ou equivalente 500 MHz Intel Pentium III workstation ou equivalente UltraSPARC II 450 MHz AMD Opteron 100 Srie 1.8 GHz PowerPC G4 512 MB 512 MB 512 MB 512 MB 512 MB

HD Livre 850 MB 450 MB 450 MB 450 MB 450 MB

Configurao Recomendada de Hardware Sistema Operacional Microsoft Windows Linux Solaris OS (SPARC) Solaris OS (x86/x64 Platform Edition) Mac OS X Processador 1.4 GHz Intel Pentium III workstation ou equivalente 1.4 GHz Intel Pentium III workstation ou equivalente UltraSPARC IIIi 1 GHz AMD Opteron 100 Series 1.8 GHz PowerPC G5 Memria 1 GB 1 GB 1 GB 1 GB 1 GB HD Livre 1 GB 850 MB 850 MB 850 MB 850 MB

Requerimentos de Software NetBeans Enterprise Pack 5.5 executando sobre Java 2 Platform Standard Edition Development Kit 5.0 ou superior (JDK 5.0, verso 1.5.0_01 ou superior), contemplando a Java Runtime Environment, ferramentas de desenvolvimento para compilar, depurar, e executar aplicaes escritas em linguagem Java. Sun Java System Application Server Platform Edition 9. Para Solaris, Windows, e Linux, os arquivos da JDK podem ser obtidos para sua plataforma em http://java.sun.com/j2se/1.5.0/download.html Para Mac OS X, Java 2 Plataform Standard Edition (J2SE) 5.0 Release 4, pode ser obtida diretamente da Apple's Developer Connection, no endereo: http://developer.apple.com/java ( necessrio registrar o download da JDK). Para mais informaes: http://www.netbeans.org/community/releases/55/relnotes.html

Introduo Programao I

JEDITM

Colaboradores que auxiliaram no processo de traduo e reviso


Alexandre Mori Alexis da Rocha Silva Aline Sabbatini da Silva Alves Allan Wojcik da Silva Andr Luiz Moreira Andro Mrcio Correa Louredo Antoniele de Assis Lima Antonio Jose R. Alves Ramos Aurlio Soares Neto Bruno da Silva Bonfim Bruno dos Santos Miranda Bruno Ferreira Rodrigues Carlos Alberto Vitorino de Almeida Carlos Alexandre de Sene Carlos Andr Noronha de Sousa Carlos Eduardo Veras Neves Cleber Ferreira de Sousa Cleyton Artur Soares Urani Cristiano Borges Ferreira Cristiano de Siqueira Pires Derlon Vandri Aliendres Fabiano Eduardo de Oliveira Fbio Bombonato Fernando Antonio Mota Trinta Flvio Alves Gomes Francisco das Chagas Francisco Marcio da Silva Gilson Moreno Costa Givailson de Souza Neves Gustavo Henrique Castellano Hebert Julio Gonalves de Paula Heraldo Conceio Domingues Hugo Leonardo Malheiros Ferreira Ivan Nascimento Fonseca Jacqueline Susann Barbosa Jader de Carvalho Belarmino Joo Aurlio Telles da Rocha Joo Paulo Cirino Silva de Novais Joo Vianney Barrozo Costa Jos Augusto Martins Nieviadonski Jos Leonardo Borges de Melo Jos Ricardo Carneiro Kleberth Bezerra G. dos Santos Lafaiete de S Guimares Leandro Silva de Morais Leonardo Leopoldo do Nascimento Leonardo Pereira dos Santos Leonardo Rangel de Melo Filardi Lucas Mauricio Castro e Martins Luciana Rocha de Oliveira Lus Carlos Andr Lus Octvio Jorge V. Lima Luiz Fernandes de Oliveira Junior Luiz Victor de Andrade Lima Manoel Cotts de Queiroz Marcello Sandi Pinheiro Marcelo Ortolan Pazzetto Marco Aurlio Martins Bessa Marcos Vinicius de Toledo Maria Carolina Ferreira da Silva Massimiliano Giroldi Mauricio Azevedo Gamarra Mauricio da Silva Marinho Mauro Cardoso Mortoni Mauro Regis de Sousa Lima Namor de S e Silva Nres Chaves Rebouas Nolyanne Peixoto Brasil Vieira Paulo Afonso Corra Paulo Jos Lemos Costa Paulo Oliveira Sampaio Reis Pedro Antonio Pereira Miranda Pedro Henrique Pereira de Andrade Renato Alves Flix Renato Barbosa da Silva Reyderson Magela dos Reis Ricardo Ferreira Rodrigues Ricardo Ulrich Bomfim Robson de Oliveira Cunha Rodrigo Pereira Machado Rodrigo Rosa Miranda Corra Rodrigo Vaez Ronie Dotzlaw Rosely Moreira de Jesus Seire Pareja Sergio Pomerancblum Silvio Sznifer Suzana da Costa Oliveira Tsio Vasconcelos da Silveira Thiago Magela Rodrigues Dias Tiago Gimenez Ribeiro Vanderlei Carvalho Rodrigues Pinto Vanessa dos Santos Almeida Vast Mendes da Silva Rocha Wagner Eliezer Roncoletta

Auxiliadores especiais
Reviso Geral do texto para os seguintes Pases:
Brasil Tiago Flach Guin Bissau Alfredo C, Bunene Sisse e Buon Olossato Quebi ONG Asas de Socorro

Coordenao do DFJUG

Daniel deOliveira JUGLeader responsvel pelos acordos de parcerias Luci Campos - Idealizadora do DFJUG responsvel pelo apoio social Fernando Anselmo - Coordenador responsvel pelo processo de traduo e reviso, disponibilizao dos materiais e insero de novos mdulos Regina Mariani - Coordenadora responsvel pela parte jurdica Rodrigo Nunes - Coordenador responsvel pela parte multimdia Srgio Gomes Veloso - Coordenador responsvel pelo ambiente JEDITM (Moodle)

Agradecimento Especial
John Paul Petines Criador da Iniciativa JEDITM Rommel Feria Criador da Iniciativa JEDITM

Introduo Programao I

JEDITM

1. Objetivos
Nesta lio discutiremos as partes bsicas de um programa em Java. Comearemos explicando as partes do programa Hello.java mostrado na ltima lio. Discutiremos ao longo desta lio tambm dicas e convenes para se escrever programas de fcil entendimento. Ao final desta lio, o estudante ser capaz de:

Identificar e entender as partes bsicas de um programa escrito em Java. Diferenciar, em um programa, o que so: os tipos primitivos de dados, variveis, identificadores e operadores. Desenvolver, em Java, um programa usando os conceitos compreendidos nesta lio.

Introduo Programao I

JEDITM

2. Entendendo meu primeiro programa em Java


Tentaremos compreender este primeiro programa. public class Hello { /** * Meu primeiro programa em Java */ public static void main(String[] args) { // Exibir a mensagem "Hello world" na tela System.out.println("Hello world!"); } } Esta primeira linha do cdigo: public class Hello Indica o nome da classe, que neste caso Hello. Em Java, todo e qualquer cdigo dever ser escrito dentro da declarao de uma classe. Fazemos isso usando a palavra-chave class. Alm disso, a classe usa um identificador de acesso public, indicando que a classe acessvel para outras classes de diferentes pacotes (pacotes so colees de classes). Trataremos de pacotes e identificadores de acesso mais tarde, ainda neste mdulo. A prxima linha contm uma chave {. Indica o incio de um bloco de instrues. Neste programa posicionamos a chave na linha aps a declarao da classe, entretanto, poderamos tambm coloc-la na mesma linha em que a declarao foi feita. Ento, o cdigo seria escrito da seguinte forma: public class Hello { ou public class Hello {

As prximas 3 linhas indicam um comentrio em Java. Um comentrio uma explicao do programador usada na documentao de uma parte do cdigo. Este comentrio no propriamente uma parte do cdigo, usado apenas para fins de documentao do programa. uma boa prtica de programao adicionar comentrios relevantes ao cdigo. /** * Meu primeiro programa em Java */ Um comentrio pode ser indicado pelos delimitadores /* e */. Qualquer coisa entre estes delimitadores ignorado pelo compilador Java e tratado como comentrio. A prxima linha, public static void main(String[] args) { que tambm pode ser escrita da seguinte forma: public static void main(String[] args) { indica o nome de um mtodo no programa que o mtodo principal main. O mtodo main o ponto de partida para qualquer programa feito em Java. Todo e qualquer programa escrito

Introduo Programao I

JEDITM

em Java, com exceo de Applets, inicia com o mtodo main. Certifique-se de que a assinatura do mtodo (conforme descrita acima) est correta. A linha seguinte tambm um comentrio em Java, // exibe a mensagem "Hello world" na tela At agora, j aprendemos duas maneiras de fazer comentrios em Java. Uma posicionar o comentrio entre /* e */, e a outra colocar // antes do comentrio. A linha de instruo abaixo, System.out.println("Hello world!"); escreve o texto "Hello World!" na tela. O comando System.out.println( ), escreve na sada padro do computador o texto situado entre aspas duplas. As ltimas duas linhas, que contm somente uma chave respectivamente, o fechamento do mtodo main e da classe. Dicas de programao : 1. Os programas em Java devem sempre conter a terminao .java no nome do arquivo. 2. O nome do arquivo deve sempre ser idntico ao nome da classe pblica. Ento, por exemplo, se o nome da classe pblica Hello o arquivo dever ser salvo com o nome: Hello.java. 3. Inserir comentrios sobre o que a classe ou mtodo realiza, isso facilitar o entendimento de quem posteriormente ler o programa, incluindo o prprio autor. em cada, simbolizam,

Introduo Programao I

JEDITM

3. Comentrios em Java
Comentrios so notas escritas pelo programador para fins de documentao. Estas notas no fazem parte do programa e no afetam o fluxo de controle. Java suporta trs tipos de comentrios: comentrio de linha estilo C++, comentrio de bloco estilo C e um comentrio estilo Javadoc (utilizado compor a documentao do programa).

3.1. Comentrio de linha


Comentrios com estilo em C++ se iniciam por "//". Todo e qualquer texto colocado aps as // ignorado pelo compilador e tratado como comentrio. Por exemplo: // Este um comentrio estilo C++ ou comentrio de linha

3.2. Comentrio de bloco


Comentrios com estilo em C, tambm chamados de comentrios multi-linhas, se iniciam com /* e terminam com */. Todo o texto posto entre os dois delimitadores tratado como comentrio. Diferente do comentrio estilo C++, este pode se expandir para vrias linhas. Por exemplo: /* * Este um exemplo de comentrio * estilo C ou um comentrio de bloco * */

3.3. Comentrio estilo Javadoc


Este comentrio utilizado na gerao da documentao em HTML dos programas escritos em Java. Para se criar um comentrio em estilo Javadoc deve se iniciar o comentrio com /** e termin-lo com */. Assim como os comentrios estilo C, este tambm pode conter vrias linhas. Este comentrio tambm pode conter certas tags que do mais informaes documentao. Por exemplo: /** Este um exemplo de um comentrio especial usado para \n gerar uma documentao em HTML. Este utiliza tags como: @author Florence Balagtas @version 1.2 */ Este tipo de comentrio deve ser utilizado antes da assinatura da classe: public class Hello { Para documentar o objetivo do programa ou antes da assinatura de mtodos: public static void main(String[] args) { Para documentar a utilidade de um determinado mtodo.

Introduo Programao I

JEDITM

4. Instrues e Blocos em Java


Uma instruo composta de uma ou mais linhas terminadas por ponto-e-vrgula. Um exemplo de uma simples instruo pode ser: System.out.println("Hello world"); Um bloco formado por uma ou mais instrues agrupadas entre chaves indicando que formam uma s unidade. Blocos podem ser organizados em estruturas aninhadas indefinidamente. Qualquer quantidade de espaos em branco permitida. Um exemplo de bloco pode ser: public static void main(String[] args) { System.out.print("Hello "); System.out.println("world"); } Dicas de programao: 1. Na criao de blocos, a chave que indica o incio pode ser colocada ao final da linha anterior ao bloco, como no exemplo: public static void main(String [] args) { ou na prxima linha, como em: public static void main(String [] args) { 2. uma boa prtica de programao organizar as instrues que sero colocadas aps o incio de um bloco, como por exemplo: public static void main(String [] args) { System.out.print("Hello "); System.out.println("world"); }

Introduo Programao I

JEDITM

5. Identificadores em Java
Identificadores so representaes de nomes de variveis, mtodos, classes, etc. Exemplos de identificadores podem ser: Hello, main, System, out. O compilador Java difere as letras maisculas de minsculas (case-sensitive). Isto significa que o identificador Hello no o mesmo que hello. Os identificadores em Java devem comear com uma letra, um underscore _, ou um sinal de cifro $. As letras podem estar tanto em maisculo quanto em minsculo. Os caracteres subseqentes podem usar nmeros de 0 a 9. Os identificadores no podem ter nomes iguais s palavras-chave ou palavras reservadas do Java, como: class, public, void, int, etc. Discutiremos mais sobre estas palavras mais tarde. Dicas de programao: 1. Para nomes de classes, a primeira letra deve ser maiscula. Nomes de mtodos ou variveis devem comear com letra minscula. Por exemplo: ExemploDeNomeDeUmaClasse exemploDeNomeDeUmMetodo 2. No caso de identificadores com mais de uma palavra, a primeira letra de cada palavra, com exceo da primeira, deve vir em maisculo. Por exemplo: charArray fileNumber - className 3. Evite o uso de undescores no incio de um identificador. Por exemplo: _NomeDeClasse.

Introduo Programao I

JEDITM

6. Palavras-chave em Java
Palavras-chave so identificadores que, em Java, foram pr-definidas para propsitos especficos. No se pode usar esses identificadores como nomes de variveis, mtodos, classes, etc. A seguir, temos a lista com as palavras-chave em Java.

Figura 1: Palavras-Chave em Java

Ao longo dos tpicos seguintes, iremos abordar os significados destas palavras-chave e como so usadas nos programas em Java. Nota: true, false e null no so palavras-chave, porm, so palavras-reservadas, e, da mesma maneira, no permitido seu uso na atribuio a nomes de variveis, mtodos ou classes.

Introduo Programao I

10

JEDITM

7. Tipos de Dados em Java


Java possui 4 tipos de dados. Estes tipos de dados so divididos em: boolean, character, integer e float-point.

7.1. Boolean
Um dado boolean poder assumir somente dois valores: true ou false.

7.2. Character
Os characters so representaes da tabela Unicode. Um smbolo da tabela Unicode um valor de 16 bits que pode substituir os smbolos da tabela ASCII (que possuem 8 bits). A tabela Unicode permite a insero de smbolos especiais ou de outros idiomas. Para representar um caractere usam-se aspas simples. Por exemplo, a letra "a" ser representada como 'a'. Para representar caracteres especiais, usa-se a "\" seguido pelo cdigo do caractere especial. Por exemplo, '\n' para o caractere de nova linha, '\'' representar o character ' (aspas simples) e '\u0061' representao Unicode do smbolo 'a'.

7.3. Integer
Os dados do tipo integer vm em diferentes formatos: decimal (base 10), hexadecimal (base 16), e octal (base 8). Ao usar estes diferentes tipos de dados Integer nos programas necessrio seguir algumas notaes preestabelecidas. Para dados decimais no existe notao, basta escrever o nmero. Os nmeros hexadecimais devero ser precedidos por "0x" ou "0X". E os octais devero ser precedidos por "0". Por exemplo, considere o nmero 12. Sua representao em decimal apenas o nmero 12, sem nenhuma notao adicional, enquanto que sua representao em hexadecimal 0xC (pois o nmero 12 em hexadecimal representado pela letra C), e em octal ele representado por 014. O valor padro para tipos de dados Integer o tipo int. Um int um valor, com sinal, de 32 bits. Em alguns casos pode ser necessrio forar o dado Integer a ser do tipo long, para fazer isso basta colocar a letra "l" (L minscula) ou "L" aps o nmero. Um dado do tipo long um valor com sinal de 64 bits. Falaremos mais sobre os tipos de dados mais tarde.

7.4. Float-Point
Os tipos de float-point representam dados Integer com parte fracionria. Um exemplo o nmero 3.1415 (lembrando que o padro ingls utiliza o "." como divisor da parte fracionria). Esses tipos podem ser expressos em notao cientfica ou padro. Um exemplo de notao padro o nmero 583.45 enquanto que em notao cientfica ele seria representado por 5.8345e2. O valor padro para um dado ponto-flutuante o double, que um valor de 64 bits. Se for necessrio usar um nmero com uma preciso menor (32 bits) usa-se o float, que finalizado pela letra "f" ou "F" acrescida ao nmero em questo, por exemplo, 583.45f.

Introduo Programao I

11

JEDITM

8. Tipos de Dados Primitivos


A linguagem Java possui 8 tipos de dados primitivos. Eles so divididos nas seguintes representaes: Representao lgico inteiro inteiro longo nmero fracionrio Tipo de Dado Boolean Integer e Character Integer Float-point Dado Primitivo boolean char, byte, short e int long float e double

Tabela 1: Representaes dos dados primitivos

8.1. Lgico
O tipo boolean pode representar dois estados: true (verdadeiro) ou false (falso). Um exemplo : boolean resultado = true; No exemplo demonstrado acima, declarado um atributo chamado resultado do tipo boolean e atribudo a este o valor verdadeiro.

8.2. Inteiro
Os inteiros em Java podem ser representados em 5 formas, como j foi visto, e estas so: decimal, octal, hexadecimal, ASCII e Unicode. Como por exemplo: 2 077 0xBACC 'a' '\u0061' // // // // // valor 2 em decimal 0 indica que ele est representado em octal. 0x indica que ele est representado em hexadecimal. representao ASCII representao Unicode

O dado do tipo char um inteiro especial, sendo exclusivamente positivo e representa um nico Unicode. Ele deve ser, obrigatoriamente, colocado entre aspas simples (''). Sua representao como inteiro pode ser confusa para o iniciante, entretanto, o tempo e a prtica faro com que se acostume com este tipo. Por exemplo: char c = 97; byte b = 'a'; // representa o smbolo 'a' // em inteiro representa o nmero 97

possvel definir para qualquer inteiro nas formas mostradas. O que difere o tipo char dos demais inteiros que a sua sada sempre ser mostrada como um valor ASCII. Enquanto que os inteiros sero sempre mostrados por nmeros decimais. Por exemplo: char c = 97; byte b = 'a'; System.out.println("char = " + c + " - byte = " + b); Resultar: char = a - byte = 97

Introduo Programao I

12

JEDITM

Um cuidado deve ser tomado quanto aos inteiros: qualquer operao efetuada entre eles ter sempre como resultado um tipo int. Por exemplo: byte b1 = 1; byte b2 = 2; byte resultado = b1 + b2; Esta instruo final causar um erro de compilao, devendo ser modificada para: int resultado = b1 + b2;

8.3. Inteiro Longo


Os inteiros tm por padro o valor representado pelo tipo primitivo int. Pode-se represent-los como long adicionando, ao final do nmero, um "l" ou "L". Os tipos de dados inteiros assumem valores nas seguintes faixas: Tamanho em memria 8 bits 16 bits 16 bits 32 bits 64 bits Dado primitivo byte char short int long Faixa 7 7 -2 at 2 -1 0 at 2 -2 -2 -2 15 31 63 16 -1

15 at 2 -1 31 at 2 -1 63 at 2 -1

Tabela 2: Tipos e faixa de valores dos Inteiros e Inteiro Longo

Dicas de programao: 1. Para declarar um nmero como sendo um long prefervel usar L maisculo, pois, se este estiver em minsculo, pode ser difcil distingu-lo do dgito 1.

8.4. Nmero Fracionrio


Os dados do tipo ponto-flutuante possuem o valor double como padro. Os nmeros flutuantes possuem um ponto decimal ou um dos seguintes caracteres: E ou e // expoente F ou f // float D ou d // double So exemplos, 3.14 6.02E23 2.718F 123.4E+306D // // // // tipo double double com expoente float double

No exemplo acima, o nmero 23 aps o E implicitamente positivo. equivalente a

Introduo Programao I

13

JEDITM

6.02E+23. Os dados de tipo ponto-flutuante podem assumir valores dentro das seguintes faixas: Tamanho em memria 32 bits 64 bits Dado primitivo float double Faixa 38 38 -10 at 10 -1 308 308 -10 at 10 -1

Tabela 3: Tipos e faixa de valores dos Nmero Fracionrios

Introduo Programao I

14

JEDITM

9. Variveis
Uma varivel um espao na memria usado para armazenar o estado de um objeto. Uma varivel deve ter um nome e um tipo. O tipo da varivel indica o tipo de dado que ela pode conter. O nome das variveis deve seguir as mesmas regras de nomenclatura que os identificadores.

9.1. Declarando e inicializando Variveis


A seguir, vemos como feita a declarao de uma varivel: <tipo do dado> <nome> [= valor inicial];

nota: os valores colocados entre < > so obrigatrios, enquanto que os valores contidos entre [ ] so opcionais. Aqui vemos um exemplo de programa que declara e inicializa algumas variveis: public class VariableSamples { public static void main( String[] args ){ // declara uma varivel com nome result e tipo boolean boolean result; // declara uma varivel com nome option e tipo char char option; // atribui o smbolo C para a varivel option = 'C'; // declara uma varivel com nome grade e tipo double // e a inicializa com o valor 0.0 double grade = 0.0;

} }

Dicas de programao: 1. sempre prefervel que se inicialize uma varivel assim que ela for declarada. 2. Use nomes com significado para suas variveis. Se usar uma varivel para armazenar a nota de um aluno, declare-a com o nome 'nota' e no simplesmente com uma letra aleatria 'x'. 3. prefervel declarar uma varivel por linha, do que vrias na mesma linha. Por exemplo: int variavel1; int variavel2; int variavel1, variavel2;

E no:

9.2. Exibindo o valor de uma Varivel

Introduo Programao I

15

JEDITM

Para exibirmos em qualquer dispositivo de sada o valor de uma varivel, fazemos uso dos seguintes comandos: System.out.println() System.out.print() Aqui est um simples programa como exemplo: public class OutputVariable { public static void main( String[] args ){ int value = 10; char x; x = 'A'; System.out.println(value); System.out.println("The value of x = " + x );

} }

A sada deste programa ser a seguinte: 10 The value of x = A

9.3. System.out.println( ) e System.out.print( )


Qual a diferena entre os comandos System.out.println( ) e o System.out.print( )? O primeiro faz iniciar uma nova linha aps ser exibido seu contedo, enquanto que o segundo no. Considere as seguintes instrues: System.out.print("Hello "); System.out.print("world!"); Essas instrues apresentaro a seguinte sada: Hello world! Considere as seguintes: System.out.println("Hello "); System.out.println("world!"); Estas apresentaro a seguinte sada: Hello world!

9.4. Referncia de Variveis e Valor das Variveis


Iremos diferenciar os dois tipos de variveis suportados pelo Java. Estes podem ser de referncia ou de valor. As variveis de valor, ou primitivas, so aquelas que armazenam dados no exato espao de memria onde a varivel est.

Introduo Programao I

16

JEDITM

As variveis de referncia so aquelas que armazenam o endereo de memria onde o dado est armazenado. Ao declarar uma varivel de certa classe (varivel de classe), se declara uma varivel de referncia a um objeto daquela classe. Por exemplo, vamos supor que se tenha estas duas variveis do tipo int e da classe String. int num = 10; String nome = Hello; Suponha que o quadro abaixo represente a memria do computador, com seus endereos de memria, o nome das variveis e os tipos de dados que ele pode suportar. Endereo de memria 1001 : 1563 : : 2000 Nome da varivel num nome Dado 10 : Endereo (2000) : : "Hello"

A varivel (do tipo int) num o dado o atual valor contido por ela e, a referncia da varivel (do tipo string) nome somente armazenado o endereo de memria que contm o valor da varivel.

Introduo Programao I

17

JEDITM

10. Operadores
Em Java temos diferentes tipos de operadores. Existem operadores aritmticos, operadores relacionais, operadores lgicos e operadores condicionais. Estes operadores obedecem a uma ordem de precedncia para que o compilador saiba qual operao executar primeiro, no caso de uma sentena possuir grande variedade destes.

10.1. Operadores Aritmticos


Aqui temos a lista dos operadores aritmticos que podem ser utilizados na criao de expresses matemticas: Operador * / % + Uso op1 * op2 op1 / op2 Descrio Multiplica op1 por op2 Divide op1 por op2

op1 % op2 Resto da diviso de op1 por op2 op1 - op2 op1 + op2 Subtrai op2 de op1 Soma op1 e op2

Tabela 4: Operadores aritmticos e suas funes

Aqui temos um programa que exemplifica o uso destes operadores: public class ArithmeticDemo { public static void main(String[] args) { // alguns nmeros int i = 37; int j = 42; double x = 27.475; double y = 7.22; System.out.println("Variables values..."); System.out.println(" i = " + i); System.out.println(" j = " + j); System.out.println(" x = " + x); System.out.println(" y = " + y); // adio dos nmeros System.out.println("Adding..."); System.out.println(" i + j = " + (i + j)); System.out.println(" x + y = " + (x + y)); // subtrao dos nmeros System.out.println("Subtracting..."); System.out.println(" i - j = " + (i - j)); System.out.println(" x - y = " + (x - y)); // multiplicao dos nmeros System.out.println("Multiplying..."); System.out.println(" i * j = " + (i * j)); System.out.println(" x * y = " + (x * y));

Introduo Programao I

18

JEDITM

// diviso dos nmeros System.out.println("Dividing..."); System.out.println(" i / j = " + (i / j)); System.out.println(" x / y = " + (x / y)); // resto da diviso System.out.println("Comuting the remainder..."); System.out.println(" i % j = " + (i % j)); System.out.println(" x % y = " + (x % y)); // misturando operaes System.out.println("Mixing types..."); System.out.println(" j + y = " + (j + y)); System.out.println(" i * x = " + (i * x));

} } e como sada, temos:

Variables values... i = 37 j = 42 x = 27.475 y = 7.22 Adding... i + j = 79 x + y = 34.695 Subtracting... i - j = -5 x - y = 20.255 Multiplying... i * j = 1554 x * y = 198.37 Dividing... i / j = 0 x / y = 3.8054 Comuting the remainder... i % j = 37 x % y = 5.815 Mixing types... j + y = 49.22 i * x = 1016.58 Nota: Quando um nmero de tipo inteiro e um outro de nmero fracionrio so usados numa nica operao, o resultado ser dado pela varivel de maior tipo, no caso, valor de nmero fracionrio. O nmero inteiro implicitamente convertido para o nmero fracionrio antes da operao ter incio.

Introduo Programao I

19

JEDITM

11. Operadores de Incremento e Decremento


Alm dos operadores aritmticos bsicos, Java d suporte ao operador unrio de incremento (++) e ao operador unrio de decremento (--). Operadores de incremento ou decremento aumentam ou diminuem em 1 o valor da varivel. Por exemplo, a expresso, count = count + 1; // incrementa o valor de count em 1 equivalente a, count++; Operador ++ ++ --Uso op++ ++op op---op Descrio Incrementa op em 1; Avalia a expresso antes do valor ser acrescido Incrementa op em 1; Incrementa o valor antes da expresso ser avaliada Decrementa op em 1; Avalia a expresso antes do valor ser decrescido Decrementa op em 1; Decrementa op em 1 antes da expresso ser avaliada

Tabela 5: Operadores de incremento e decremento

Como visto na tabela acima, os operadores de incremento e decremento podem ser usados tanto antes como aps o operando. E sua utilizao depender disso. Quando usado antes do operando, provoca acrscimo ou decrscimo de seu valor antes da avaliao da expresso em que ele aparece. Por exemplo: int int int k = i = j = k = ++j 10, 3; 0; + i; //resultar em k = 4+10 = 14

Quando utilizado depois do operando, provoca, na varivel, acrscimo ou decrscimo do seu valor aps a avaliao da expresso na qual ele aparece. Por exemplo: int int int k = i = j = k = j++ 10, 3; 0; + i; //resultar em k = 3+10 = 13

Dicas de programao: 1. Mantenha sempre as operaes incluindo operadores de incremento ou decremento de forma simples e de fcil compreenso.

Introduo Programao I

20

JEDITM

12. Operadores Relacionais


Os operadores relacionais so usados para comparar dois valores e determinar o relacionamento entre eles. A sada desta avaliao ser fornecida com um valor lgico: true ou false. Operador > >= < <= == != Uso op1 > op2 op1 >= op2 op1 < op2 op1 <= op2 op1 == op2 op1 != op2 Descrio op1 maior do que op2 op1 maior ou igual a op2 op1 menor do que op2 op1 menor ou igual a op2 op1 igual a op2 op1 no igual a op2

Tabela 6: Operadores relacionais

O programa a seguir, mostra a utilizao destes operadores: public class RelationalDemo { public static void main(String[] args) { // alguns nmeros int i = 37; int j = 42; int k = 42; System.out.println("Variables values..."); System.out.println(" i = " + i); System.out.println(" j = " + j); System.out.println(" k = " + k); // maior que System.out.println("Greater System.out.println(" i > System.out.println(" j > System.out.println(" k > than..."); j = " + (i > j)); //false i = " + (j > i)); //true j = " + (k > j)); //false or equal to..."); " + (i >= j)); //false " + (j >= i)); //true " + (k >= j)); //true

// maior ou igual a System.out.println("Greater than System.out.println(" i >= j = System.out.println(" j >= i = System.out.println(" k >= j =

// menor que System.out.println("Less than..."); System.out.println(" i < j = " + (i < j)); //true System.out.println(" j < i = " + (j < i)); //false System.out.println(" k < j = " + (k < j)); //false // menor ou igual a System.out.println("Less than or equal to..."); System.out.println(" i <= j = " + (i <= j)); //true System.out.println(" j <= i = " + (j <= i)); //false

Introduo Programao I

21

JEDITM

System.out.println("

k <= j = " + (k <= j)); //true

// igual a System.out.println("Equal to..."); System.out.println(" i == j = " + (i == j)); //false System.out.println(" k == j = " + (k == j)); //true // diferente System.out.println("Not equal to..."); System.out.println(" i != j = " + (i != j)); //true System.out.println(" k != j = " + (k != j)); //false } } A seguir temos a sada deste programa: Variables values... i = 37 j = 42 k = 42 Greater than... i > j = false j > i = true k > j = false Greater than or equal to... i >= j = false j >= i = true k >= j = true Less than... i < j = true j < i = false k < j = false Less than or equal to... i <= j = true j <= i = false k <= j = true Equal to... i == j = false k == j = true Not equal to... i != j = true k != j = false

Introduo Programao I

22

JEDITM

13. Operadores Lgicos


Operadores lgicos avaliam um ou mais operandos lgicos que geram um nico valor final true ou false como resultado da expresso. So seis os operadores lgicos: && (e binrio), & (e lgico), || (ou binrio), | (ou lgico), ^ (ou exclusivo binrio) e ! (negao). A operao bsica para um operador lgico : x1 op x2 Onde x1 e x2 podem ser expresses, variveis ou constantes lgicas, e op pode tanto ser &&, &, ||, | ou ^.

13.1. && (e lgico) e & (e binrio)


x1 VERDADEIRO VERDADEIRO FALSO FALSO x2 VERDADEIRO FALSO VERDADEIRO FALSO Resultado VERDADEIRO FALSO FALSO FALSO

Tabela 7: Tabela para && e &

A diferena bsica do operador && para & que o && suporta uma avaliao de curto-circuito (ou avaliao parcial), enquanto que o & no. O que isso significa? Dado o exemplo: exp1 && exp2 o operador e lgico ir avaliar a expresso exp1, e, imediatamente, retornar um valor false se a operao exp1 for falsa. Se a expresso exp1 resultar em um valor false o operador nunca avaliar a expresso exp2, pois o valor de toda a expresso ser falsa mesmo que o resultado isolado de exp2 seja verdadeiro. J o operador & sempre avalia as duas partes da expresso, mesmo que a primeira tenha o valor false. O programa a seguir, mostra a utilizao destes operadores: public class TestAND { public static void main( String[] args ) { int i = 0; int j = 10; boolean test = false; // demonstrao do operador && test = (i > 10) && (j++ > 9); System.out.println(i); System.out.println(j); System.out.println(test); // demonstrao do operador & test = (i > 10) & (j++ > 9); System.out.println(i); System.out.println(j); System.out.println(test);

Introduo Programao I

23

JEDITM

} } Como resultado, o programa produzir a seguinte sada: 0 10 false 0 11 false Note que o comando j++, na linha contendo &&, nunca ser executado, pois o operador no o avalia, visto que a primeira parte da expresso (i>10) retorna um valor booleano false.

13.2. || ( ou lgico) e | ( ou binrio)


x1 VERDADEIRO VERDADEIRO FALSO FALSO x2 VERDADEIRO FALSO VERDADEIRO FALSO Resultado VERDADEIRO VERDADEIRO VERDADEIRO FALSO

Tabela 8: Tabela para || e |

A diferena bsica entre os operadores || e |, que, semelhante ao operador &&, o || tambm suporta a avaliao parcial. O que isso significa? Dada a expresso, exp1 || exp2 o operador ou lgico ir avaliar a expresso exp1, e, imediatamente, retornar um valor lgico true para toda a expresso se a primeira parte for avaliada como verdadeira. Se a expresso exp1 resultar em verdadeira a segunda parte exp2 nunca ser avaliada, pois o valor final da expresso ser true independentemente do resultado da segunda expresso. O programa a seguir, mostra a utilizao destes operadores: public class TestOR { public static void main( String[] args ){ int i = 0; int j = 10; boolean test = false; // demonstrao do operador || test = (i < 10) || (j++ > 9); System.out.println(i); System.out.println(j); System.out.println(test); // demonstrao do operador | test = (i < 10) | (j++ > 9); System.out.println(i); System.out.println(j); System.out.println(test);

Introduo Programao I

24

JEDITM

} Como resultado, o programa produzir a seguinte sada: 0 10 true 0 11 true Note que a expresso j++ nunca ser avaliada na instruo que usa o operador ||, pois a primeira parte da expresso (i<10) j retorna true como valor final da expresso.

13.3. ^ (ou exclusivo binrio)


x1 VERDADEIRO VERDADEIRO FALSO FALSO x2 VERDADEIRO FALSO VERDADEIRO FALSO Resultado FALSO VERDADEIRO VERDADEIRO FALSO

Tabela 9: Tabela para o operador ^

O resultado de uma expresso usando o operador ou exclusivo binrio ter um valor true somente se uma das expresses for verdadeira e a outra falsa. Note que ambos os operandos so necessariamente avaliados pelo operador ^. O programa a seguir, mostra a utilizao deste operador: public class TestXOR { public static void main( String[] args ){ boolean val1 = true; boolean val2 = true; System.out.println(val1 ^ val2); val1 = false; val2 = true; System.out.println(val1 ^ val2); val1 = false; val2 = false; System.out.println(val1 ^ val2); val1 = true; val2 = false; System.out.println(val1 ^ val2);

} }

Como resultado, o programa produzir a seguinte sada: false true false true

Introduo Programao I

25

JEDITM

13.4. ! (negao)
x1 VERDADEIRO FALSO Resultado FALSO VERDADEIRO

Tabela 10: Tabela para o operador !

O operador de negao inverte o resultado lgico de uma expresso, varivel ou constante, ou seja, o que era verdadeiro ser falso e vice-versa. O programa a seguir, mostra a utilizao deste operador: public class TestNOT { public static void main( String[] args ){ boolean val1 = true; boolean val2 = false; System.out.println(!val1); System.out.println(!val2); } } Como resultado, o programa produzir a seguinte sada: false true

Introduo Programao I

26

JEDITM

14. Operador Condicional ( ?: )


O operador condicional tambm chamado de operador ternrio. Isto significa que ele tem 3 argumentos que juntos formam uma nica expresso condicional. A estrutura de uma expresso utilizando um operador condicional a seguinte: exp1?exp2:exp3 Onde exp1 uma expresso lgica que deve retornar true ou false. Se o valor de exp1 for verdadeiro, ento, o resultado ser a expresso exp2, caso contrrio, o resultado ser exp3. O programa a seguir, mostra a utilizao deste operador: public class ConditionalOperator { public static void main( String[] args ){ String status = ""; int grade = 80; //status do aluno status = (grade >= 60)?"Passed":"Fail"; //print status System.out.println( status ); } }

Como resultado, o programa produzir a seguinte sada: Passed Veremos na Figura 2 um fluxograma que demonstra como o operador condicional funciona.

Figura 2: Fluxograma utilizando o operador condicional

Veremos outro programa que tambm utiliza o operador condicional: public class ConditionalOperator { public static void main( String[] args ){ int score = 0; char answer = 'a';

Introduo Programao I

27

JEDITM

score = (answer == 'a') ? 10 : 0; System.out.println("Score = " + score ); } }

Como resultado, o programa produzir a seguinte sada: Score = 10

Introduo Programao I

28

JEDITM

15. Precedncia de Operadores


A precedncia serve para indicar a ordem na qual o compilador interpretar os diferentes tipos de operadores, para que ele sempre tenha como sada um resultado coerente e no ambguo. Ordem 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ( ) parnteses ++ ps-incremento e -- ps-decremento ++ pr-incremento e -- pr-decremento ! negao lgica * multiplicao e / diviso % resto da diviso + soma e subtrao < menor que, <= menor ou igual, > maior que e >= maior ou igual == igual e != no igual & e binrio | ou binrio ^ ou exclusivo binrio && e lgico || ou lgico ?: condicional = atribuio
Tabela 11: Precedncia de operadores

Operador

No caso de dois operadores com mesmo nvel de precedncia, ter prioridade o que estiver mais esquerda da expresso. Dada uma expresso complexa como: 6%2*5+4/2+88-10 O ideal seria fazer uso de parnteses para reescrev-la de maneira mais clara: ((6%2)*5)+(4/2)+88-10 Dicas de programao: 1. Para evitar confuso na avaliao de suas expresses matemticas, deixe-as o mais simples possvel e use parnteses.

Introduo Programao I

29

JEDITM

16. Exerccios
16.1. Declarar e mostrar variveis
Dada a tabela abaixo, declare as variveis que se seguem de acordo com seus tipos correspondentes e valores iniciais. Exiba o nomes e valor das variveis. Nome das Variveis number letter result str O resultado esperado do exerccio : number = 10 letter = a result = true str = hello Tipo do dado integer character boolean String Valor inicial 10 a true hello

16.2. Obter a mdia entre trs nmeros


Crie um programa que obtenha a mdia de 3 nmeros. Considere o valor para os trs nmeros como sendo 10, 20 e 45. O resultado esperado do exerccio : nmero 1 com o valor 10 nmero 2 com o valor 20 nmero 3 com o valor 45 A mdia 25

16.3. Exibir o maior valor


Dados trs nmeros, crie um programa que exiba na tela o maior dentre os nmeros informados. Use o operador ?: que j foi estudado nesta sesso (dica: ser necessrio utilizar dois operadores ?: para se chegar ao resultado). Por exemplo, dados os nmeros 10, 23 e 5, o resultado esperado do exerccio deve ser: nmero 1 com o nmero 2 com o nmero 3 com o O maior nmero valor 10 valor 23 valor 5 23

16.4. Precedncia de operadores


Dadas as expresses abaixo, reescreva-as utilizando parnteses de acordo com a forma como elas so interpretadas pelo compilador. 1. a / b ^ c ^ d e + f g * h + i 2. 3 * 10 *2 / 15 2 + 4 ^ 2 ^ 2 3. r ^ s * t / u v + w ^ x y++

Introduo Programao I

30

JEDITM

Parceiros que tornaram JEDITM possvel

Instituto CTS Patrocinador do DFJUG. Sun Microsystems Fornecimento de servidor de dados para o armazenamento dos vdeo-aulas. Java Research and Development Center da Universidade das Filipinas Criador da Iniciativa JEDITM. DFJUG Detentor dos direitos do JEDITM nos pases de lngua portuguesa. Banco do Brasil Disponibilizao de seus telecentros para abrigar e difundir a Iniciativa JEDITM. Politec Suporte e apoio financeiro e logstico a todo o processo. Borland Apoio internacional para que possamos alcanar os outros pases de lngua portuguesa. Instituto Gaudium/CNBB Fornecimento da sua infra-estrutura de hardware de seus servidores para que os milhares de alunos possam acessar o material do curso simultaneamente.

Introduo Programao I

31

Das könnte Ihnen auch gefallen