Capítulo 4 Tipos fundamentais de dados Tipos

Propaganda
Capítulo 4
Tipos fundamentais de dados
Tipos numéricos. Constantes. Expressões aritméticas
Strings
Leitura de dados
Tipos primitivos em Java
Tipo
Descrição
Ocupação
memória
int
inteiro, com valor entre
–2,147,483,648 . . . 2,147,483,647
4 bytes
byte
byte, com valor entre
–128 . . . 127
1 byte
short
inteiro pequeno, com valor entre
–32768 . . . 32767
2 bytes
long
inteiro longo, com valor entre
–9,223,372,036,854,775,808 . . .
–9,223,372,036,854,775,807
8 bytes
double
real de precisão dupla, com valor entre (aprox.)
±10308 e 15 casas decimais significativas
8 bytes
float
real de precisão simples, com valor entre (aprox.)
±1038 e 7 casas decimais significativas
4 bytes
char
caracter, com valor de código Unicode
2 bytes
boolean
booleano, com valor true ou false
1 byte
Introdução à Programação
2007/08
A. Lopes
Números
• Pode existir ultrapassagem de capacidade
int n = 1000000;
System.out.println(n * n); // imprime -727379968
• Possibilidade de erros de arredondamento quando não é correcta a
conversão entre números
double f = 4.35;
System.out.println(100 * f); // imprime 434.99999999999994
• Não é possível atribuir um valor real a uma variável inteira
double balance = 13.75;
int dollars = balance; // erro
Introdução à Programação
2007/08
A. Lopes
Conversão de números
• A conversão de um valor para um tipo diferente é feita através de
cast
int dollars = (int) balance; // elimina a parte fraccionária
• O método Math.round converte um número real no seu inteiro mais
próximo
long rounded = Math.round(balance);
// se balance for 13.75, então o arredondamento será 14
Introdução à Programação
2007/08
A. Lopes
Cast
!
(typeName) expression
Exemplo:
(int) (balance * 100)
Objectivo:
Converter uma expressão numa outra de tipo diferente
Introdução à Programação
2007/08
A. Lopes
Atribuição, incremento e decremento
incremento de uma unidade (inteira)
items = items + 1;
items++;
++items;
decremento de uma unidade (inteira)
items = items - 1;
Introdução à Programação
items--;
2007/08
--items;
A. Lopes
Operações aritméticas
/
• operador de divisão
• se ambos os operandos são inteiros, então o resultado é inteiro (o
resto é irrelevante
• o resultado de
7.0 / 4
é
1.75
• o resultado de
7/4
é 1
• operador módulo (resto da divisão)
• o resultado de
7%4
Introdução à Programação
é
%
3
2007/08
A. Lopes
Métodos matemáticos em Java
Classe Math
Math.sqrt(x)
raiz quadrada
Math.pow(x, y)
potência x elevado a y
Math.exp(x)
e elevado a x
Math.log(x)
logaritmo natural
Math.sin(x), Math.cos(x), Math.tan(x)
seno, coseno, tangente (x em
radianos)
Math.round(x)
número mais próximo de x
Math.abs(x)
valor absoluto de x
Math.min(x, y), Math.max(x, y)
mínimo, máximo
Introdução à Programação
2007/08
A. Lopes
Constantes
final
• Uma constante define-se colocando final antes do tipo da variável
• Uma constante não pode ser alterada depois de definida
• A utilização de constantes torna o código mais legível. Por norma,
utilizam-se letras maiúsculas
final double QUARTER_VALUE = 0.25;
final double DIME_VALUE = 0.1;
final double NICKEL_VALUE = 0.05;
final double PENNY_VALUE = 0.01;
payment = dollars + quarters * QUARTER_VALUE + dimes *
DIME_VALUE + nickels * NICKEL_VALUE + pennies * PENNY_VALUE;
Introdução à Programação
2007/08
A. Lopes
Constantes
static final
• Se o valor de uma constante for necessário em vários métodos da
classe, então deve ser declarada juntamente com os membros de
dados da classe, como estática (com static)
• Por outro lado, deve também ser declarada como pública para que
outras classes a possam utilizar (com public)
public class MyMath
{
...
public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;
}
...
double circumference = MyMath.PI * diameter;
Introdução à Programação
2007/08
A. Lopes
Definição de uma constante
!
No método:
final typeName variableName = expression ;
Na classe:
accessSpecifier static final typeName variableName = expression ;
Exemplo:
final double NICKEL_VALUE = 0.05;
public static final double LITERS_PER_GALLON = 3.785;
Objectivo:
Definir uma constante, num método ou numa classe
Introdução à Programação
2007/08
A. Lopes
Ficheiro CashRegister.java
/**
A cash register totals up sales and computes change due.
*/
public class CashRegister
{
! public static final double QUARTER_VALUE = 0.25;
! public static final double DIME_VALUE = 0.1;
! public static final double NICKEL_VALUE = 0.05;
! public static final double PENNY_VALUE = 0.01;
!
! private double purchase;
! private double payment;
! /**
Constructs a cash register with no money in it.
!
*/
! public CashRegister()
! {
! ! purchase = 0;
! ! payment = 0;
! }
! /**
Records the purchase price of an item.
@param amount the price of the purchased item
!
*/
! public void recordPurchase(double amount)
! {
! ! Introdução
purchase =à purchase
+ amount;2007/08
Programação
! }
A. Lopes
Ficheiro CashRegister.java
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
}
/**
Enters the payment received from the customer.
@param dollars the number of dollars in the payment
@param quarters the number of quarters in the payment
@param dimes the number of dimes in the payment
@param nickels the number of nickels in the payment
@param pennies the number of pennies in the payment
*/
public void enterPayment(int dollars, int quarters,
! ! int dimes, int nickels, int pennies)
{
! payment = dollars + quarters * QUARTER_VALUE + dimes * DIME_VALUE
! + nickels * NICKEL_VALUE + pennies * PENNY_VALUE;
}
/**
Computes the change due and resets the machine for the next customer.
@return the change due to the customer
*/
public double giveChange()
{
! double change = payment - purchase;
! purchase = 0;
! payment = 0;
! return change;
}
Introdução à Programação
2007/08
A. Lopes
Ficheiro CashRegisterTester.java
/**
This class tests the CashRegister class.
*/
public class CashRegisterTester
{
! public static void main(String[] args)
! {
! ! CashRegister register = new CashRegister();
!
!
!
!
!
!
!
!
!
!
register.recordPurchase(0.75);
register.recordPurchase(1.50);
register.enterPayment(2, 0, 5, 0, 0);
System.out.print("Change=");
System.out.println(register.giveChange());
!
!
!
!
!
!
}
!
!
!
!
!
}
register.recordPurchase(2.25);
register.recordPurchase(19.25);
register.enterPayment(23, 2, 0, 0, 0);
System.out.print("Change=");
System.out.println(register.giveChange());
Introdução à Programação
2007/08
A. Lopes
Operações aritméticas
final int PENNIES_PER_NICKEL = 5;
final int PENNIES_PER_DIME = 10;
final int PENNIES_PER_QUARTER = 25;
final int PENNIES_PER_DOLLAR = 100;
// Valor total em cêntimos
int total = dollars * PENNIES_PER_DOLLAR
+ quarters * PENNIES_PER_QUARTER
+ nickels * PENNIES_PER_NICKEL
+ dimes * PENNIES_PER_DIME
+ pennies;
// Conversão em dolares, cêntimos (com divisão inteira)
int dollars = total / PENNIES_PER_DOLLAR;
int cents = total % PENNIES_PER_DOLLAR;
Introdução à Programação
2007/08
A. Lopes
Análise de uma expressão
Obs:
b * b é mais
eficiente do que
Math.pow(b,2)
Introdução à Programação
2007/08
A. Lopes
Chamada de métodos estáticos
• Um método estático
• não opera sobre um objecto
• é definido dentro de classes
double x = 4;
double root = x.sqrt(); // erro
• Por norma, as classes começam por uma letra maiúscula e os
objectos por uma letra minúscula
Math
System.out
Introdução à Programação
2007/08
A. Lopes
Chamada de um método estático
!
ClassName.methodName( parameters )
Exemplo:
Math.sqrt(4)
Objectivo:
Chamar um método estático, i.e. um método que não opera
sobre um objecto, e fornecer os respectivos parâmetros
Introdução à Programação
2007/08
A. Lopes
Strings
• Uma string é uma sequência de caracteres. São também objectos da
classe String
• String
• constante
"Hello, World!"
• variável
String message = "Hello, World!";
• vazia
""
Introdução à Programação
2007/08
A. Lopes
Operações com strings
• Comprimento da string
int n = message.length();
• Concatenação, utilizando o operador +
String name = "Dave";
String message = "Hello, " + name; // message é "Hello, Dave"
• se um dos operandos é uma string, então o outro operando é
convertido automaticamente a string
String cop = "Agent";
int n = 7;
String bond = cop + n; // bond é Agent7
• exemplo de utilização na escrita para o ecrã
int total = 7;
System.out.println("The total is " + total);
Introdução à Programação
2007/08
A. Lopes
Conversão entre strings e números
int n = Integer.parseInt(str);
string para número
int m = Integer.valueOf(str);
double x = Double.parseDouble(str);
String str = "" + n;
número para string
str = Integer.toString(n);
Introdução à Programação
2007/08
A. Lopes
Substrings
1ª posição
posição inicial posição após o fim
String greeting = "Hello, World!";
String sub = greeting.substring(0, 5); // sub é "Hello"
o comprimento de uma
substring é a diferença
entre posição após o
fim e a posição inicial
Introdução à Programação
2007/08
A. Lopes
Caracteres de controlo
Tipo
Descrição
\”
Escreve “
\’
Escreve ‘
\\
Escreve \
\n
Nova linha (passa para o início da linha seguinte)
\r
Enter (passa para o início da linha actual)
\t
Tab
Introdução à Programação
2007/08
A. Lopes
Leitura de valores
• De forma análoga a System.out, existe também System.in .
Acontece que as funcionalidades neste caso são mínimas. Só
consegue ler um byte de cada vez. Actualmente, existe a classe
Scanner para ler do teclado de uma forma conveniente
• nextInt para ler um inteiro
import
java.util.Scanner;
• nextDouble para ler um double
• nextLine para ler uma linha (até Enter, que é desprezado)
• next para ler uma palavra (até qualquer delimitador inclusive espaço em branco)
Scanner in = new Scanner(System.in);
System.out.print("Enter quantity: ");
Para começar a ler ...
Introdução à Programação
int quantity = in.nextInt();
2007/08
A. Lopes
Ficheiro InputTester.java
import java.util.Scanner;
public class InputTester
{
!
public static void main(String[] args)
!
{
!
!
Scanner in = new Scanner(System.in);
!
!
DataSet data = new DataSet();
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
}
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
}
boolean done = false;
while (!done)
{
!
System.out.print("Enter value, Q to quit: ");
!
String input = in.next();
!
if (input.equalsIgnoreCase("Q"))
!
!
done = true;
!
else
!
{
!
!
double x = Double.parseDouble(input);
!
!
data.add(x);
!
}
}
if (data.getCount() == 0)
!
System.out.println("No numbers have been entered.");
else
{
!
System.out.println("Average = " + data.getAverage());
!
System.out.println("Maximum = " + data.getMaximum());
}
Introdução à Programação
2007/08
A. Lopes
Leitura a partir de uma caixa de diálogo
import
javax.swing.JOptionPane;
String input = JOptionPane.showInputDialog(prompt)
• Se necessário, converte-se a string para número
int count = Integer.parseInt(input);
double x = Double.parseDouble(input);
• Não esquecer de colocar System.exit(0) antes de chaveta que
termina o método main de qualquer programa que utilize JOptionPane
Introdução à Programação
2007/08
A. Lopes
Download