Baixe o app para aproveitar ainda mais
Prévia do material em texto
8/30/2010 1 Prof. Ricardo Massa F. LimaProf. Ricardo Massa F. Lima Conceitos básicos de Java AULA 02 AULA 02 –– JAVA BÁSICOJAVA BÁSICO �� EclipseEclipse �� Estrutura de um programa JavaEstrutura de um programa Java �� Palavras chavePalavras chave �� IdentificadoresIdentificadores �� Variáveis: declaração e inicializaçãoVariáveis: declaração e inicialização 8/30/2010 2 ObjetivosObjetivos �� EstudarEstudar –– elementos básicos da estrutura de um programa elementos básicos da estrutura de um programa JavaJava –– variáveis e tipos primitivosvariáveis e tipos primitivos O EclipseO Eclipse �� Antes de iniciar, vamos nos familiarizar com o Antes de iniciar, vamos nos familiarizar com o eclipse, nosso companheiro inseparável durante o eclipse, nosso companheiro inseparável durante o cursocurso 8/30/2010 3 no no firefoxfirefox...... ...abra o link:...abra o link: http://http://www.cin.ufpe.br/~rmfl/ip/films/HelloWorld.swfwww.cin.ufpe.br/~rmfl/ip/films/HelloWorld.swf Estrutura de um programa JavaEstrutura de um programa Java ObjetosObjetos são instâncias de classe, assim, um programa são instâncias de classe, assim, um programa java é formado por uma série de descrições de classejava é formado por uma série de descrições de classe corpo cabeçalho 8/30/2010 4 Estrutura de um programa JavaEstrutura de um programa Java modificador de acesso indica a definição de uma classe nome da classe É necessário que o nome do arquivo seja igual ao nome da classe pública com extensão .java PrimeiroPrograma.java Estrutura de um programa JavaEstrutura de um programa Java método estático método não retorna valor após sua execução Vamos estudar mais detalhes sobre métodos estáticos e tipos de métodos adiante... 8/30/2010 5 Estrutura de um programa JavaEstrutura de um programa Java método principal da classe Necessário existir um método main para que a classe execute! para executar um programa, o interpretador Java sempre vai começar a execução no método main da classe indicada Pode-se incluir outros métodos na classe e chamá-los a partir do método main vamos estudar criação de métodos mais adiante... Estrutura de um programa JavaEstrutura de um programa Java toda instrução Java termina com um ponto e vírgula objeto método do objeto parâmetro do método estudaremos mais adiante... 8/30/2010 6 PalavrasPalavras reservadasreservadas �� LiteraisLiterais –– null true falsenull true false �� PalavrasPalavras chavechave –– abstract abstract assertassert booleanboolean break byte case break byte case catch char class continue default do double catch char class continue default do double else extends final finally float for if else extends final finally float for if implements import implements import instanceofinstanceof intint interface interface long native new package private protected long native new package private protected public return short static public return short static strictfpstrictfp super super switch synchronized this throw throws switch synchronized this throw throws transient try void volatile whiletransient try void volatile while �� PalavrasPalavras reservadasreservadas parapara usouso futurofuturo –– byvaluebyvalue cast const future generic cast const future generic gotogoto inner operator outer rest inner operator outer rest varvar volatilevolatile Jamais será implementado Já implementadas de outra maneira, mas continuam reservadas PalavrasPalavras reservadasreservadas �� Java é case Java é case sensitivesensitive, o que torna possível usar , o que torna possível usar palavras similares às palavras reservadaspalavras similares às palavras reservadas �� As palavras abaixo estão disponíveis para usoAs palavras abaixo estão disponíveis para uso ABSTRACTABSTRACT ASSERTASSERT BOOLEANBOOLEAN BREAKBREAK BYTEBYTE CASECASE CATCHCATCH CHARCHAR CLASSCLASS CONTINUECONTINUE DEFAULTDEFAULT DODO DOUBLEDOUBLE ELSEELSE EXTENDSEXTENDS FINALFINAL FINALLYFINALLY FLOATFLOAT FORFOR IFIF IMPLEMENTSIMPLEMENTS IMPORTIMPORT INSTANCEOFINSTANCEOF INTINT INTERFACEINTERFACE LONGLONG NATIVENATIVE NEWNEW PACKAGEPACKAGE PRIVATEPRIVATE PROTECTEDPROTECTED PUBLICPUBLIC RETURNRETURN SHORTSHORT STATICSTATIC STRICTFPSTRICTFP SUPERSUPER SWITCHSWITCH SYNCHRONIZEDSYNCHRONIZED THISTHIS THROWTHROW THROWSTHROWS TRANSIENTTRANSIENT TRYTRY VOIDVOID VOLATILEVOLATILE WHILEWHILE Pode causar confusão! Não é uma boa prática de programação! 8/30/2010 7 IdentificadoresIdentificadores �� Identificadores são:Identificadores são: –– Uma palavra que representa nome de variáveis, Uma palavra que representa nome de variáveis, métodos, classes e rótulosmétodos, classes e rótulos –– CaseCase--sensitivesensitive �� Caracteres podem ser dígitos, letras, ‘$’ ou ‘_’Caracteres podem ser dígitos, letras, ‘$’ ou ‘_’ �� Um identificadores não pode:Um identificadores não pode: –– Começar com um dígito Começar com um dígito –– Ser igual a uma palavra reservada Ser igual a uma palavra reservada An-Identifier 2nd_Identifier goto 10$ An_Identifier a_2nd_Identifier Go2 $10 �� �� IdentificadoresIdentificadores 8/30/2010 8 IdentificadoresIdentificadores JavaJava éé CaseCase--SensitiveSensitive �� YournameYourname, , yournameyourname, , yourNameyourName, , YourNameYourName –– TodosTodos sãosão diferentesdiferentes 8/30/2010 9 JavaJava éé CaseCase--SensitiveSensitive �� Convenções:Convenções: –– PackagePackage: tudo minúsculo : tudo minúsculo �� theexampletheexample –– ClassClass: primeira letra maiúscula: primeira letra maiúscula �� TheExampleTheExample –– MethodMethod//fieldfield: primeira letra minúscula : primeira letra minúscula �� theExampletheExample –– ConstantsConstants: tudo maiúsculo: tudo maiúsculo �� THE_EXAMPLETHE_EXAMPLE JavaJava éé CaseCase--SensitiveSensitive �� Convenções:Convenções: –– PackagePackage: tudo minúsculo : tudo minúsculo �� theexampletheexample 8/30/2010 10 VariáveisVariáveis �� Uma variável é um identificador usado para representar Uma variável é um identificador usado para representar uma posição de memóriauma posição de memória �� As variáveis são usadas para armazenar valoresAs variáveis são usadas para armazenar valores �� Em Java, assim como em muitas linguagens, é necessário Em Java, assim como em muitas linguagens, é necessário declarar o tipo da variáveldeclarar o tipo da variável �� O tamanho da área de memória reservada para a variável O tamanho da área de memória reservada para a variável depende do tipo utilizado para declarar a variáveldepende do tipo utilizado para declarar a variável declara a variável denominada valor com tipo int (4 bytes) Java heap 0 valor 2 8/30/2010 11 Declaração e inicialização de variáveisDeclaração e inicialização de variáveis Java oferece diferentes maneiras para declarar e inicializar Java oferece diferentes maneiras para declarar e inicializar variáveisvariáveis Declaração e inicialização de variáveisDeclaração e inicialização de variáveis Java oferece diferentes maneiras para declarar e inicializar Java oferece diferentes maneiras para declarar e inicializar variáveisvariáveis 8/30/2010 12 Declaração e inicialização de variáveisDeclaração e inicialização de variáveis ExercícioExercício �� Escreva um programa para trocar o valor de Escreva um programa para trocar o valor de duas variáveis e imprimir o valor final das duas duas variáveis e imprimir o valor final das duas variáveis. variáveis. �� Por exemplo, se a variável V1 armazenar o valor Por exemplo, se a variável V1 armazenar o valor inteiro 2 e a variável V2 armazenar o valor inteiro 2 e a variável V2 armazenar o valor inteiro 5, no final do programa será impresso:inteiro 5, no final do programa será impresso: V1 = 5V1 = 5 V2 = 2V2 = 2 8/30/2010 13 SoluçãoSolução http://www.cin.ufpe.br/~rmfl/ip/programs/TrocaValor.java ExercícioExercício �� Assuma agora que temos quatro variáveis, V1, Assuma agora que temos quatro variáveis, V1, V2, V3 e V4, que armazenam os valores inteiros V2, V3 e V4,que armazenam os valores inteiros 10, 15, 20 e 25, respectivamente.10, 15, 20 e 25, respectivamente. �� Escreva um programa para inverter a ordem Escreva um programa para inverter a ordem desses valores e imprimir o resultado, que seria:desses valores e imprimir o resultado, que seria: V1 = 25V1 = 25 V2 = 20V2 = 20 V3 = 15V3 = 15 V4 = 10V4 = 10 8/30/2010 14 SoluçãoSolução http://http://www.cin.ufpe.br/~rmfl/ip/programs/InverteTudo.javawww.cin.ufpe.br/~rmfl/ip/programs/InverteTudo.java AULA 03 AULA 03 –– JAVA BÁSICOJAVA BÁSICO 8/30/2010 15 TiposTipos PrimitivosPrimitivos: : IntegersIntegers �� TodosTodos osos númerosnúmeros possuempossuem sinalsinal �� InicializadosInicializados com zerocom zero Categories: a.a. integerinteger b. floating point c. character d. boolean 1.1. bytebyte 2.2. shortshort 3.3. intint 4.4. longlong Size: 1 byte Range: -27 � 27 - 1 Size: 1 byte Range: -27 � 27 - 1 Size: 2 bytes Range: -215 � 215 - 1 Size: 2 bytes Range: -215 � 215 - 1 Size: 4 bytes Range: -231 � 231 - 1 Size: 4 bytes Range: -231 � 231 - 1 Size: 8 bytes Range: -263 � 263 - 1 Size: 8 bytes Range: -263 � 263 - 1 TiposTipos PrimitivosPrimitivos: : InteiroInteiro Categories: a.a. integerinteger b. floating point c. character d. boolean 1.1. bytebyte 2.2. shortshort 3.3. intint 4.4. longlong Size: 1 byte Range: -27 � 27 - 1 Size: 1 byte Range: -27 � 27 - 1 Size: 2 bytes Range: -215 � 215 - 1 Size: 2 bytes Range: -215 � 215 - 1 Size: 4 bytes Range: -231 � 231 - 1 Size: 4 bytes Range: -231 � 231 - 1 Size: 8 bytes Range: -263 � 263 - 1 Size: 8 bytes Range: -263 � 263 - 1 okok 8/30/2010 16 TiposTipos PrimitivosPrimitivos: : InteiroInteiro Categories: a.a. integerinteger b. floating point c. character d. boolean 1.1. bytebyte 2.2. shortshort 3.3. intint 4.4. longlong Size: 1 byte Range: -27 � 27 - 1 Size: 1 byte Range: -27 � 27 - 1 Size: 2 bytes Range: -215 � 215 - 1 Size: 2 bytes Range: -215 � 215 - 1 Size: 4 bytes Range: -231 � 231 - 1 Size: 4 bytes Range: -231 � 231 - 1 Size: 8 bytes Range: -263 � 263 - 1 Size: 8 bytes Range: -263 � 263 - 1 ErroErro TiposTipos PrimitivosPrimitivos: Real: Real �� NúmerosNúmeros reaisreais ((possuempossuem a parte a parte fracionáriafracionária)) �� InicializadosInicializados com zerocom zero Categories: a. integer b.b. floating pointfloating point c. character d. boolean 1.1. floatfloat 2.2. doubledouble Size: 4 bytes Range: ±1.4 x 10-45� ±3.4 x 1038 Size: 4 bytes Range: ±1.4 x 10-45� ±3.4 x 1038 Size: 8 bytes Range: ±4.9 x 10-324� ±1.8 x 10308 Size: 8 bytes Range: ±4.9 x 10-324� ±1.8 x 10308 8/30/2010 17 TiposTipos PrimitivosPrimitivos: : CaracterCaracter �� Char is any unsigned Unicode characterChar is any unsigned Unicode character �� InicializadosInicializados com zero (com zero (\\u0000)u0000) Categories: a. integer b. floating point c.c. charactercharacter d. boolean charchar Size: Size: 2 bytes2 bytesRange:Range: \u0000 �\u0000 � \uFFFF\uFFFF Hexadecimal Padrão unicode TiposTipos PrimitivosPrimitivos: : booleanobooleano �� ValoresValores booleanosbooleanos emem java java sãosão diferentesdiferentes de de outrasoutras linguagenslinguagens, , comocomo CC –– PodemPodem apenasapenas ser true ser true ouou falsefalse –– Um valor Um valor intint NÃO NÃO podepode ser ser usadousado no no lugarlugar de um de um booleanboolean �� InicializadoInicializado com falsecom false Categories: a. integer b. floating point c.c. charactercharacter d. boolean booleanboolean Size: Size: 1 byte1 byte Range:Range: true | falsetrue | false 8/30/2010 18 ExemploExemplo Entrada de DadosEntrada de Dados Baixe a classe Baixe a classe Util.javaUtil.java http://www.cin.ufpe.br/~rmfl/ip/programs/Util.javahttp://www.cin.ufpe.br/~rmfl/ip/programs/Util.java salve em um pacote do seu projeto.salve em um pacote do seu projeto. Para que o Eclipse encontre a nova classe, clique no Eclipse sobre Para que o Eclipse encontre a nova classe, clique no Eclipse sobre o pacoteo pacote com o botão direito do mouse e escolha a opção com o botão direito do mouse e escolha a opção RefreshRefresh ou clique em F5ou clique em F5 Utilize os comandos Utilize os comandos Util.readStr()Util.readStr(), , Util.readInt(Util.readInt() ) e e Util.readDbl(Util.readDbl()) para ler valores para ler valores StringString, , intint e e doubledouble, , respectivamenterespectivamente String String numeronumero = = Util.readStrUtil.readStr(); (); intint diadia = = Util.readIntUtil.readInt();(); double valor = double valor = Util.readDblUtil.readDbl();(); 8/30/2010 19 Entrada de DadosEntrada de Dados import java.util.*; Scanner in = new Scanner(System.in); String nome = in.nextLine(); int idade = in.nextInt(); Outra alternativa Entrada de DadosEntrada de Dados import java.util.*; public class Estudos{ public static void main(String[] args){ Scanner in = new Scanner(System.in); System.out.print("Qual é o seu nome? "); String nome = in.nextLine(); System.out.print("Qual sua idade? "); int idade = in.nextInt(); System.out.println("Olá, " + nome +". Você tem " + idade + " anos."); } } Escreva um programa que pergunta e realiza a leitura do nome e idade de uma pessoa e imprime uma mensagem com tais informacões. Ex: Olá José. Você tem 25 anos! 8/30/2010 20 Formatação da SaídaFormatação da Saída Exemplo:Exemplo: x = 1000.0 / 3.0;x = 1000.0 / 3.0; System.System.out.print(x);out.print(x); Resultado:Resultado: 333.3333333333335;333.3333333333335; Resultado, talvez, indesejável devido a grande quantidade de dígitos Resultado, talvez, indesejável devido a grande quantidade de dígitos após a vírgula.após a vírgula. Classe Classe NumberFormatNumberFormat do pacote do pacote javajava..texttext.. Possui três métodos que empregam Possui três métodos que empregam formatadoresformatadores padrão para:padrão para: Números;Números; Valores monetários;Valores monetários; Valores de percentuais.Valores de percentuais. Formatação da SaídaFormatação da Saída 10000 / 3.0;10000 / 3.0; ResultadosResultados:: NumberFormat.getNumberInstanceNumberFormat.getNumberInstance()() �������� 3,333.3333,333.333 NumberFormat.getCurrencyInstanceNumberFormat.getCurrencyInstance() () �������� $3,333.33$3,333.33 NumberFormat.getPercentInstanceNumberFormat.getPercentInstance()() �������� 333,333%333,333% Estes métodos retornam um objeto do tipo Estes métodos retornam um objeto do tipo NumberFormatNumberFormat.. ExemploExemplo:: 3,333.333 Modifique o programa para que o valor seja impresso em forma de: 1. valor monetário 2. percentual 8/30/2010 21 Formatação da SaídaFormatação da Saída Número mínimo e máximo de dígitos inteiros ou fracionáriosNúmero mínimo e máximo de dígitos inteiros ou fracionários Métodos Métodos dada classeclasse NumberFormatNumberFormat setMinimumIntegerDigitssetMinimumIntegerDigits;; setMinimumFractionDigitssetMinimumFractionDigits;; setMaximumIntegerDigitssetMaximumIntegerDigits;; setMaximumFractionDigitssetMaximumFractionDigits;; ExemploExemplo:: double double xx = 10000.0 / 3.0;= 10000.0 / 3.0; NumberFormatNumberFormat nfnf = = NumberFormat.getNumberInstanceNumberFormat.getNumberInstance();(); nf.setMaximumFractionDigits(4);nf.setMaximumFractionDigits(4); nf.setMinimumIntegerDigits(6);nf.setMinimumIntegerDigits(6); String String fxfx = = nf.format(xnf.format(x); // a string “003,333.3333”); // a string “003,333.3333” Veja o que acontece se você reduzir número máximo de dígitos inteiros para 3 e aumentar o número mínimo de dígitos fracionários para 6. Formatação da SaídaFormatação da Saída Objeto Objeto DecimalFormatDecimalFormat: indica a forma desejada dos números.: indica a forma desejada dos números. As formatações são indicadas em uma string de formatação que mostra As formatações são indicadas em uma string de formatação que mostra como o número deve ficar.como o número deve ficar. Caracteres de formatação da classe Caracteres de formatação da classe DecimalFormatDecimalFormat:: 00Um dígito (pelo menos)Um dígito (pelo menos) ## Um dígito. Se for zero não mostra.Um dígito. Se for zero não mostra. .. Separador decimalSeparador decimal %% Multiplica por 100 e mostra na forma percentualMultiplica por 100 e mostra na forma percentual 8/30/2010 22 printprint vsvs printlnprintln printfprintf (‘f’ de (‘f’ de formatformat)) 8/30/2010 23 printfprintf (‘f’ de (‘f’ de formatformat)) LiteraisLiterais PrimitivosPrimitivos �� Um literal Um literal éé um valorum valor �� ExistemExistem cincocinco tipostipos de de literaisliterais –– IntegerInteger –– Floating pointFloating point –– BooleanBoolean –– CharacterCharacter –– StringString Literais integer……..…..7 floating point…..7.0f boolean……..….true character……….'A' string………..….."A" 8/30/2010 24 LiteraisLiterais PrimitivosPrimitivos: : Floating PointFloating Point �� LiteraisLiterais Float Float terminamterminam com com ff ((ouou F):F): –– 7.1f7.1f �� LiteraisLiterais Double Double terminamterminam com com dd ((ouou D):D): –– 7.1D7.1D �� ‘‘ee’ ’ ouou ‘E’ ‘E’ éé usadousado emem notaçãonotação científicacientífica –– 7.1e2 => 7.1 7.1e2 => 7.1 xx 101022 �� Ponto Ponto flutuanteflutuante semsem letraletra no final no final éé consideradoconsiderado doubledouble –– 7.1 is the same as 7.1d7.1 is the same as 7.1d LiteraisLiterais primitivosprimitivos �� CaracteresCaracteres especiaisespeciais:: –– \\bb backspacebackspace –– \\ff form form feedfeed –– \\nn newlinenewline –– \\rr returnreturn –– \\tt tabtab –– \\"" quotation markquotation mark –– \\’’ apostropheapostrophe –– \\\\ backslashbackslash comandos para a impressora imprima o texto: \” é usado para quotation mark 8/30/2010 25 SoluçãoSolução LiteraisLiterais primitivosprimitivos �� ValoresValores hexadecimal no hexadecimal no padrãopadrão unicodeunicode podempodem ser ser escritosescritos com um com um \\uu no no inícioinício:: –– PorPor exemploexemplo \\u2122 u2122 éé oo símbolosímbolo de de marcamarca registradaregistrada ((TMTM)) 8/30/2010 26 OperadoresOperadores AdiçãoAdição ++ Subtração Subtração –– MultiplicaçãoMultiplicação ** DivisãoDivisão // O operador / denota divisão inteira se os dois argumentos forem O operador / denota divisão inteira se os dois argumentos forem inteiros e divisão por ponto flutuante, caso contrário.inteiros e divisão por ponto flutuante, caso contrário. Resto Inteiro % Resto Inteiro % -- Operador Operador modmod. . Exemplos:Exemplos: 15 / 4 => 3;15 / 4 => 3; 15 % 2 => 1;15 % 2 => 1; 11.0 / 4 => 2.75;11.0 / 4 => 2.75; Inicialização de variáveis com operadores aritméticos:Inicialização de variáveis com operadores aritméticos: intint n = 5;n = 5; intint a = 2 * n;a = 2 * n; // a é 10// a é 10 ExercíciosExercícios �� Ler 3 números inteiros e calcular a sua média Ler 3 números inteiros e calcular a sua média aritmética.aritmética. 8/30/2010 27 ExercíciosExercícios �� Repita o mesmo exercício para números Repita o mesmo exercício para números doubledouble e imprima apenas a parte fracionária da média e imprima apenas a parte fracionária da média ExponencialExponencial Não possui um operador específico.Não possui um operador específico. UsaUsa--se o método se o método powpow, , que faz parte da classe que faz parte da classe MathMath de de javajava..langlang.. Exemplo de exponencial:Exemplo de exponencial: double double yy = = Math.pow(xMath.pow(x, a);, a); equivale a equivale a �� y = xy = xaa // x elevado a potência// x elevado a potência.. Este método precisa de argumentos do tipo Este método precisa de argumentos do tipo doubledouble e retorna um e retorna um doubledouble também.também. Veja outras operações, como Veja outras operações, como MathMath..srqtsrqt para para raízraíz quadradaquadrada 8/30/2010 28 ExercíciosExercícios �� Calcule as raízes de uma equação quadrática. Calcule as raízes de uma equação quadrática. Você terá que ler os coeficientes do polinômio.Você terá que ler os coeficientes do polinômio. ax 2 + bx + c = 0 x = −b ± b2 − 4ac 2a Bhaskara � SoluçãoSolução 8/30/2010 29 Operadores Aritméticos de AtribuiçãoOperadores Aritméticos de Atribuição +=+= ––== *= *= /=/= Exemplo:Exemplo: x += 4; //equivale a x = x + 4;x += 4; //equivale a x = x + 4; Incremento e DecrementoIncremento e Decremento nomeDaVariavelnomeDaVariavel---- ou ou nomeDaVariavelnomeDaVariavel++++ PósPós--fixado: fixado: n++;n++; PréPré--fixado: fixado: ++n;++n; Exemplos:Exemplos: intint m = 7;m = 7; intint nn = 7;= 7; intint a = 2 * ++a = 2 * ++mm;; intint b = 2 * n++;b = 2 * n++; 8/30/2010 30 AULA 04 AULA 04 –– JAVA BÁSICOJAVA BÁSICO Operadores RelacionaisOperadores Relacionais Igual Igual ==== DiferenteDiferente !=!= Menor queMenor que << Maior que Maior que >> Menor ou igualMenor ou igual <=<= Maior ou igualMaior ou igual >=>= 8/30/2010 31 Operadores LógicosOperadores Lógicos ou ou –– oror �� | || | ee –– andand �� &&&& negaçãonegação –– notnot �� !! OperadoresOperadores ee PrecedênciaPrecedência Postfix Postfix operatorsoperators [[] . (] . (paramsparams) ) xx++ ++ xx---- Unary operatorsUnary operators ++++xx ----xx ++xx --xx ~ !~ ! Creation or castCreation or cast new new ((type)xtype)x MultiplicativeMultiplicative * * / %/ % AdditiveAdditive + + -- ShiftShift <<< >> >>>< >> >>> RelationalRelational < < > <= >= > <= >= instanceofinstanceof EqualityEquality === !== != Bitwise ANDBitwise AND && Bitwise ORBitwise OR ^^ Bitwise inclusive ORBitwise inclusive OR || Logical ANDLogical AND &&&& Logical ORLogical OR |||| ConditionalConditional ??:: AssignmentAssignment = = *= /= %= += *= /= %= += --= = >>>= <<= >>>= &= ^= |=>= <<= >>>= &= ^= |= 8/30/2010 32 Modificando Fluxo de ControleModificando Fluxo de Controle �� A ordem de execução de um método é A ordem de execução de um método é denominado fluxo de controledenominado fluxo de controle �� Exceto quando especificado de outra forma, a Exceto quando especificado de outra forma, a ordem de execução de um método é linear, isto ordem de execução de um método é linear, isto é uma instrução após a outra em seqüenciaé uma instrução após a outra em seqüencia �� Alguns comandos em programação nos permitem:Alguns comandos em programação nos permitem: –– Decidir se a execução de uma instrução deve ou Decidir se a execução de uma instrução deve ou não ser feitanão ser feita �� Esta decisão é baseada em expressões Esta decisão é baseada em expressões booleanasbooleanas 63 O Tipo O Tipo booleanboolean �� Valores: Valores: truetrue , , falsefalse �� Operadores lógicos e expressões:Operadores lógicos e expressões: –– xx && && yy ((operadoroperador lógicológico de de conjunçãoconjunção, AND), AND) –– xx || || yy ((operadoroperador lógicológico de de disjunçãodisjunção, OR), OR) –– !!xx ((operadoroperador lógicológico de de negaçãonegação, NOT), NOT) –– xx ^ ^ yy ((operadoroperador lógicológico de de disjunçãodisjunção exclusivaexclusiva, XOR), XOR) �� OperandosOperandos da direita só são avaliados, se da direita só são avaliados, se necessárionecessário x e y são x e y são expressões do tipo boolean As expressões resultantesAs expressões resultantes são do tipo boolean, gerando true ou false como resultado da avaliação 8/30/2010 33 Tabela VerdadeTabela Verdade �� Uma tabela verdade contém todas as Uma tabela verdade contém todas as combinações combinações truetrue--falsefalse de uma expressão de uma expressão booleanabooleana 65 a b a && b a || b a ^ b true true true true false true false false true true false true false true true false false false false false Expressões BooleanasExpressões Booleanas { ... boolean b, c; b = true; c = !b; c = !(true || b) && c; b = c || !(!b); ... } Parênteses são Parênteses são usados para evitar ambigüidades Qual o valor Qual o valor de b neste ponto? truetrue 8/30/2010 34 Operadores relacionaisOperadores relacionais –– x < yx < y –– x <= yx <= y –– x > yx > y –– x >= yx >= y x e y são expressõesde algum tipo numérico As expressões resultantes são do tipo boolean, gerando true ou false como resultado da avaliação 67 Operadores relacionais, geralmente, fazem parte de expressões booleanas Operadores de igualdade Operadores de igualdade –– xx == = = yy ((operadoroperador de de igualdadeigualdade)) –– xx != != yy ((operadoroperador de de diferençadiferença, , desigualdadedesigualdade)) x e y são expressões do mesmo tipo, para qualquer tipo! As expressões resultantes são do tipo boolean, gerando true ou false como resultado da avaliação 68 Operadores de igualdade, também, pode fazer parte de expressões booleanas 8/30/2010 35 Semântica do operador de igualdadeSemântica do operador de igualdade �� Para avaliar esta expressãoPara avaliar esta expressão –– AvaliaAvalia--se se xx obtendo um valorobtendo um valor –– AvaliaAvalia--se se yy obtendo outro valorobtendo outro valor –– ComparaCompara--se os dois valores obtidos e retornase os dois valores obtidos e retorna--se se truetrue caso os dois sejam a mesma referência para caso os dois sejam a mesma referência para um objeto ou o mesmo elemento de um tipo um objeto ou o mesmo elemento de um tipo primitivo primitivo x == y 69 Avaliando o Operador de Igualdade Avaliando o Operador de Igualdade de Tipos Primitivosde Tipos Primitivos boolean b, c; b = true || false; c = true && b; b = b == c; Qual o valor de b aqui? 70 true 8/30/2010 36 Avaliando o Operador de Igualdade Avaliando o Operador de Igualdade de Tipos Referênciade Tipos Referência boolean b; Conta c, d; c = new Conta(); d = null; b = c == d; d = new Conta(); b = c == d; c = d; b = c == d; Qual o valor de b após cada uma das atribuições? true false false Avaliando o Operador de Igualdade Avaliando o Operador de Igualdade de Tipos Referênciade Tipos Referência O operador ==O operador == –– Testa a identidade exata de um objetoTesta a identidade exata de um objeto –– Checa se duas variáveis referenciam o mesmo objetoCheca se duas variáveis referenciam o mesmo objeto –– Para tipos primitivos, checa a igualdade dos valoresPara tipos primitivos, checa a igualdade dos valores int a = 1; int b = 1; if (a==b)... // true Carro car1 = new Carro(KKW-9945); Carro car2 = new Carro(KKW-9945); if (car1==car2)... // false Carro car1 = new Carro(KKW-9945); Carro car2 = car1; if (car1==car2)... // true 8/30/2010 37 Modificando Fluxo de ControleModificando Fluxo de Controle �� Um comando condicional nos permite escolher Um comando condicional nos permite escolher qual deve ser a próxima instrução executada qual deve ser a próxima instrução executada em um método em um método �� A execução de uma determinada instrução A execução de uma determinada instrução depende de uma condição (expressão depende de uma condição (expressão booleana) booleana) �� Um dos comandos condicionais presentes em Um dos comandos condicionais presentes em Java é o Java é o ifif--elseelse 73 O comando O comando ifif--elseelse if (expressaoBooleana) { comandos } else { outros comandos } Se a avaliação de expressaoBooleana retornar true, comandos são executados , caso contrário, executa-se outros comandos 74 8/30/2010 38 VariaçõesVariações do do comandocomando ifif--elseelse if (expressaoBooleana) { comandos } if (expressaoBooleana) comando; if (expressaoBooleana) comando; else outroComando; Se a avaliação da expressão retornar false, não executa-se nada O uso do bloco só é necessário caso queira-se executar mais de um comando 75 EncadeandoEncadeando comandoscomandos ifif--elseelse if (expressaoBooleana) { comandos } else if (expressaoBooleana’) { comandos’ } else { comandos’’ } 76 8/30/2010 39 Exemplo de Exemplo de ifif--elseelse class Conta { String numero, digito; double saldo; void debito(double valor) { if (valor <= saldo) saldo = saldo – valor; } ... Exemplo de Exemplo de ifif--elseelse ClassClass Exemplo{Exemplo{ publicpublic staticstatic voidvoid mainmain(String (String argsargs[]){[]){ intint x=10;x=10; ifif (x<15){(x<15){ System.System.out.println(“out.println(“X é menor que 15”);X é menor que 15”); System.System.out.println(“out.println(“O valor de x é: “+ x) ;O valor de x é: “+ x) ; }} }} }} 8/30/2010 40 Exemplo de Exemplo de ifif--elseelse Class Exemplo{ public static void main(String args[]){ int x=10; if (x<15){ System.out.println(“X é menor que 15”); System.out.println(“O valor de x é: “+ x) ; }else{ System.out.println(“X é maior que 15”); System.out.println(“O valor de x é: “+ x) ; } } } Escreva um programa que lê três números inteiros e imprime o maior dos três 8/30/2010 41 ExercícioExercício �� Ler um valor inteiro para o ano de nascimento de Ler um valor inteiro para o ano de nascimento de uma pessoa e dizer se ela pode ou não votar e uma pessoa e dizer se ela pode ou não votar e se ela pode ou não tirar carteira de habilitação. se ela pode ou não tirar carteira de habilitação. ExercícioExercício Ler um valor real correspondente a uma nota, tal Ler um valor real correspondente a uma nota, tal que 0 ≤ nota ≤ 10, e “classificáque 0 ≤ nota ≤ 10, e “classificá--la” em A, B, C, D la” em A, B, C, D ou E, conforme a seguinte taou E, conforme a seguinte tabela:bela: conceito intervalo A 8,5 ≤ nota ≤ 10,0 B 7,0 ≤ nota < 8,5 C 5,0 ≤ nota < 7,0 D 3,0 ≤ nota < 5,0 E nota < 3,0 8/30/2010 42 ExercícioExercício �� Ler dois valores reais, Ler dois valores reais, xx e e yy, correspondentes , correspondentes às coordenadas de um ponto no plano e dizer em às coordenadas de um ponto no plano e dizer em que quadrante se encontra, ou se está no eixoque quadrante se encontra, ou se está no eixo--x x ou no eixoou no eixo--y y ou se está na origem.ou se está na origem. 1º 2º 4º 3º 8/30/2010 43 ExercícioExercício �� Ler valores para os três lados de um triângulo e Ler valores para os três lados de um triângulo e dizer o seu tipo (dizer o seu tipo (eqüiláteroeqüilátero, , isósceles isósceles ou ou escalenoescaleno).). 8/30/2010 44 ExercícioExercício Ler dois valores reais, correspondentes ao Ler dois valores reais, correspondentes ao pesopeso e à e à alturaaltura de uma pessoa, e calcular o de uma pessoa, e calcular o Índice de Massa Corporal (IMC), pela Índice de Massa Corporal (IMC), pela fórmula:fórmula: Em seguida, dar mensagem conforme a Em seguida, dar mensagem conforme a seguinte tabela:seguinte tabela: IMC = peso altura2 IMC calculado mensagem IMC≤ 18,5 abaixo do peso 18,5<IMC≤25 peso normal 25<IMC≤30 acima do peso 30<IMC obeso 8/30/2010 45 AULA 05 AULA 05 –– JAVA BÁSICOJAVA BÁSICO �� MonitoriaMonitoria AULA 06/07 AULA 06/07 –– JAVA BÁSICOJAVA BÁSICO 8/30/2010 46 switch(expressao) { case rotulo1: Comandos1 break; case rotulo2: Comandos2 break; ... default: Comandos } O Comando O Comando switchswitch Para executar um Para executar um switchswitch –– AvaliaAvalia--se se expressaoexpressao –– ExecutaExecuta--se os comandos do se os comandos do case case cujo rótulo é igual ao cujo rótulo é igual ao valor resultante da valor resultante da expressãoexpressão –– ExecutaExecuta--se os comandos de se os comandos de default default caso o valor caso o valor resultante não seja igual a resultante não seja igual a nenhum rótulo nenhum rótulo switch(expressao) { case rotulo1: Comandos1 break; case rotulo2: Comandos2 break; ... default: Comandos } O tipo de O tipo de expressaoexpressao só pode só pode ser: ser: charchar, byte, short, , byte, short, intint Os rótulos são constantes Os rótulos são constantes diferentesdiferentes Existe no máximo uma cláusula Existe no máximo uma cláusula default default (é opcional)(é opcional) Os tipos dos rótulos têm que Os tipos dos rótulos têm que ser o mesmo de ser o mesmo de expressaoexpressao O Comando O Comando switchswitch 8/30/2010 47 switch(expressao) { case rotulo1: Comandos1 break; case rotulo2: Comandos2 break; ... default: Comandos } Váriosrótulos podem estar Vários rótulos podem estar associados ao mesmo comandoassociados ao mesmo comando Os comandos Os comandos break break são são opcionais:opcionais: Sem o Sem o break break a execução dos a execução dos comandos de um rótulo comandos de um rótulo continua nos comandos do continua nos comandos do próximo, até chegar ao final próximo, até chegar ao final ou a um ou a um breakbreak O Comando O Comando switchswitch Usando o Comando Usando o Comando switchswitch switch(resposta) { case ‘s’: retorno = true; break; case ‘n’: retorno = false; break; default: retorno = false; console.println(“Erro!”); } 8/30/2010 48 ExercícioExercício �� Escreva um programa em Java para implementar Escreva um programa em Java para implementar as quatro operações aritméticas +, as quatro operações aritméticas +, --, x e , x e ÷÷÷÷÷÷÷÷ 8/30/2010 49 Qual o resultado se digitarmosQual o resultado se digitarmos 22 ++ 33 no programa ao lado?no programa ao lado? Faltam os Faltam os breakbreak Estrutura de RepetiçãoEstrutura de Repetição �� WhileWhile;; �� Do / Do / WhileWhile;; �� For;For; 8/30/2010 50 WhileWhile A execução das instruções vai continuar até que uma A execução das instruções vai continuar até que uma condição seja verdadeira.condição seja verdadeira. Vejamos a sintaxe do laço de repetição Vejamos a sintaxe do laço de repetição WhileWhile:: whilewhile(teste condicional)(teste condicional) comando1; comando1; whilewhile(teste condicional(teste condicional){){ comando1;comando1; comando2;comando2; }} Exemplo:Exemplo: classclass Exemplo{Exemplo{ publicpublic staticstatic voidvoid mainmain(String (String argsargs[][]){){ intint num=10;num=10; whilewhile(num<1500)(num<1500) num*=10;num*=10; System.System.out.println(“out.println(“Valor de num: “ +num);Valor de num: “ +num); }} } } 8/30/2010 51 Ímpares Ímpares -- SoluçãoSolução Fatorial Fatorial –– SoluçãoSolução 8/30/2010 52 Do / WhileDo / While AA diferençadiferença dodo comandocomando WhileWhile parapara oo comandocomando do/do/whilewhile éé aoao utilizarmosutilizarmos do/do/whilewhile teremosteremos osos comandoscomandos executadosexecutados aoao menosmenos umauma vezvez.. IssoIsso aconteceráacontecerá mesmomesmo queque aa condiçãocondição nãonão sejaseja verdadeiraverdadeira nono inícioinício dodo comandocomando.. SintaxeSintaxe:: do{do{ ComandoComando11;; }} whilewhile (condição)(condição);; Do / Do / WhileWhile -- ExemploExemplo Poderia usar do-while aqui também, pois estou inicializando resposta com ‘S’ 8/30/2010 53 ForFor for(for(inicinic.; condição; .; condição; expr.expr.de iteração){de iteração){ Comandos1Comandos1 }} Comandos1Comandos1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 3 1 1 1 1 4 1 1 1 1 5 false true Expressão condicionalExpressão condicional: : refererefere--se a um teste que será se a um teste que será executado e deverá retornar um valor booleano.executado e deverá retornar um valor booleano. classclass Exemplo{Exemplo{ publicpublic staticstatic voidvoid mainmain(String (String argsargs[]){[]){ intint a=3;a=3; for(a=9; a<15; a++){for(a=9; a<15; a++){ System.System.out.println(“a=“+a)out.println(“a=“+a);; }} }} } } 9 10 11 12 13 14 Expressão de iteração: indicamos o que deverá ocorrer após cada execução do corpo do laço de repetição. Ela sempre será processada após o corpo do laço a ser executado. 8/30/2010 54 classclass Exemplo{Exemplo{ publicpublic staticstatic voidvoid mainmain(String (String argsargs[][])) {{ for(for(intint a=1,b=10;((a<10)&&(b>5));a++,ba=1,b=10;((a<10)&&(b>5));a++,b----){){ System.System.out.println(“a=“+a)out.println(“a=“+a);; System.System.out.println(“b=“+b)out.println(“b=“+b);; }} }} } } a=1 b=10 a=2 b=9 a=3 b=8 a=4 b=7 a=5 b=6 for(inic.; condição; expr.de iteração){for(inic.; condição; expr.de iteração){ Comandos1Comandos1 }} Comandos1Comandos1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 3 1 1 1 1 4 1 1 1 1 5 false true ProgramProgram Ímpares usando ‘for’Ímpares usando ‘for’ 8/30/2010 55 Compare as duas soluções!Compare as duas soluções! Declaração e inicialização de variáveis: Declaração e inicialização de variáveis: nessa primeira nessa primeira parte podemos declarar e inicializar uma ou mais variáveis, parte podemos declarar e inicializar uma ou mais variáveis, quando houver, conforme a seguirquando houver, conforme a seguir:: for(for(intint a=1,b=1;......){ a=1,b=1;......){ }} È È importante lembrarmos que a declaração e a importante lembrarmos que a declaração e a inicialização de variáveis acontecem sempre antes de inicialização de variáveis acontecem sempre antes de outros comandos. Ainda, elas acontecem apenas uma vez outros comandos. Ainda, elas acontecem apenas uma vez no laço de repetição, sendo que o teste booleano e a no laço de repetição, sendo que o teste booleano e a expressão de iteração são executadas a cada laço do expressão de iteração são executadas a cada laço do programaprograma for(for(inicinic.; condição; .; condição; expr.expr.de iteração){de iteração){ Comandos1Comandos1 }} Comandos1Comandos1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 3 1 1 1 1 4 1 1 1 1 5 8/30/2010 56 ExercícioExercício �� Ler um valor inteiro positivo N e calcularLer um valor inteiro positivo N e calcular i2 i=1 N ∑ =12 + 22 + ...+ N 2 SoluçãoSolução 8/30/2010 57 Questão de Questão de MiniprovaMiniprova Ler dois valores reais x e y positivos e menores que 1. Ler dois valores reais x e y positivos e menores que 1. Calcular e imprimir o valor da série S, dado por: Calcular e imprimir o valor da série S, dado por: Obs1: o processo de soma termina quando for Obs1: o processo de soma termina quando for encontrado o valor de um termo < 0.001encontrado o valor de um termo < 0.001 Obs2: note o uso intercalado dos sinais de + e Obs2: note o uso intercalado dos sinais de + e –– na na sériesérie s = x × y − x 2 × y 3 (x + y)2×3 + x 3 × y 5 (x + y)3×5 − x 4 × y 7 (x + y)4×7 + ... 8/30/2010 58 AULA 07 AULA 07 –– JAVA BÁSICOJAVA BÁSICO �� MonitoriaMonitoria Comando Comando BreakBreak �� Quando Quando utilizado em laço de repetição, causa utilizado em laço de repetição, causa uma interrupção imediata do mesmo, continuando uma interrupção imediata do mesmo, continuando a execução do programa na próxima linha após o a execução do programa na próxima linha após o laço. Isso acontece caso a condição imposta seja laço. Isso acontece caso a condição imposta seja atendida.atendida. classclass Exemplo{Exemplo{ publicpublic staticstatic voidvoid mainmain(String (String argsargs[]){[]){ for(for(intint i=1;i<11;++i){i=1;i<11;++i){ ifif(i==5) (i==5) breakbreak;; System.System.out.println(“out.println(“Valor de i=“+i);Valor de i=“+i); }} System.System.out.println(“out.println(“Próxima linha após o Próxima linha após o loop”);loop”); }} } } 8/30/2010 59 Comando ContinueComando Continue �� ÈÈ utilizadoutilizado somentesomente emem laçoslaços dede repetiçãorepetição.. QuandoQuando eleele éé executado,executado, oo laçolaço voltavolta imediatamenteimediatamente parapara oo testeteste dede condiçãocondição dodo laçolaço dede repetiçãorepetição.. Normalmente,Normalmente, utilizamosutilizamos oo comandocomando continuecontinue emem umum testeteste ifif.. class Exemplo{class Exemplo{ public static void main(String args[]){public static void main(String args[]){ int num=0;int num=0; while (num<10){while (num<10){ ++num;++num; if (num==5){if (num==5){ continue;continue; }} System.out.println(“Valor num=>”+ num);System.out.println(“Valor num=>”+ num); }} } } }} public int myMethod(int x) { int sum = 0; outer: for (int i=0; i<x; i++) { inner: for (int j=i; j<x; j++) { sum++; if (j==1) continue; if (j==2) continue outer; if (i==3) break; if (j==4) break outer; } } return sum; } 8/30/2010 60 Tarefa de CasaTarefa de Casa Escreva um aplicativo que calcula os quadrados e cubos Escreva um aplicativo que calcula os quadrados e cubos dos números de 0 a 10 e imprime osvalores resultantes dos números de 0 a 10 e imprime os valores resultantes no formato da tabela como segue:no formato da tabela como segue: NumberNumber SquareSquare CubeCube 00 00 00 11 11 11 22 44 88 33 99 2727 44 11 6464 55 22 125125 66 3636 216216 77 44 343343 88 6464 512512 99 8181 729729 1010 100100 10001000 8/30/2010 61 TiposTipos PrimitivosPrimitivos -- CastingCasting �� Casting cria um novo valor e permite que ele seja tratado Casting cria um novo valor e permite que ele seja tratado como um tipo diferente de sua definição original como um tipo diferente de sua definição original �� Java é uma linguagem fortemente Java é uma linguagem fortemente tipadatipada –– Atribuir um valor errado pode resultar em um erro de Atribuir um valor errado pode resultar em um erro de compilação ou uma compilação ou uma exceçãoexceção na JVMna JVM �� A JVM pode, implicitamente, promover um tipo mais A JVM pode, implicitamente, promover um tipo mais restrito em um tipo com maior amplitude restrito em um tipo com maior amplitude �� Para restringir o tipo mais amplo você Para restringir o tipo mais amplo você deve fazer o deve fazer o castcast explicitamenteexplicitamente int a, b; short c; a = b + c; int d; short e; e = (short)d; double f; long g; f = g; g = f; //error TiposTipos PrimitivosPrimitivos -- CastingCasting �� Multiplicar um Multiplicar um integerinteger por um por um doubledouble –– resultado resultado será tratado como um será tratado como um doubledouble.. �� Operações binárias em valores numéricos de tipos Operações binárias em valores numéricos de tipos diferentes serão tratados da seguinte maneira:diferentes serão tratados da seguinte maneira: –– Se qualquer um dos Se qualquer um dos operandosoperandos do tipo do tipo doubledouble, então o , então o outro será convertido para outro será convertido para doubledouble.. –– Caso contrário, se qualquer um dos Caso contrário, se qualquer um dos operandosoperandos do tipo do tipo floatfloat, o outro será convertido para , o outro será convertido para floatfloat.. –– Caso contrário, se qualquer um dos Caso contrário, se qualquer um dos operandosoperandos do tipo do tipo longlong, o outro será convertido para , o outro será convertido para long.long. –– Caso contrário, ambos os Caso contrário, ambos os operandosoperandos serão convertidos serão convertidos para para int.int. 8/30/2010 62 Casting Casting ImplícitoImplícito vsvs.. ExplícitoExplícito �� Casting Casting implícitoimplícito éé automáticoautomático quandoquando nenhumanenhuma perdaperda de de informaçãoinformação éé possívelpossível –– byte byte �� short short �� intint �� long long �� float float �� doubledouble �� Casting Casting explícitoexplícito éé necessárionecessário quandoquando existeexiste umauma perdaperda potencialpotencial de de exatidãoexatidão long p = (long) 12345.56; int g = p; char c = ‘t’; int j = c; short k = c; short k = (short) c; float f = 12.35; ok! p = 12345 Ilegal! Apesar de um int suportar o valor 12345 Casting automático! Ilegal! Não faz casting automático de caractere para um valor short (e vice-versa), mesmo que o tamanho dos tipos sejam iguais. ok! Casting Explícito! Ilegal! 12.35 é um double! Para corrigir, colocar 12.35F! Se fosse apenas 12 estaria correto, pois faria o casting de inteiro para float CastingCasting �� É possível arredondar (É possível arredondar (roundround) um número de ponto ) um número de ponto flutuante para o inteiro mais próximo usando o método flutuante para o inteiro mais próximo usando o método MathMath.round.round:: doubledouble x = 9.997;x = 9.997; intint nxnx = (= (intint) ) Math.round(xMath.round(x); ); // // nxnx = 10= 10 8/30/2010 63 ComentáriosComentários �� Three kinds of comments:Three kinds of comments:1. // The rest of the line is a comment // No line breaks. 2. /* Everything between is a comment */ 3. /** Everything between * is a javadoc comment */
Compartilhar