Download Tema03_Tipos de datos
Document related concepts
no text concepts found
Transcript
Tipos de datos Tema 3 Tipos de datos • Especifican: – un dominio (rango de valores) – un conjunto de operaciones posibles • Los compiladores asocian a cada tipo de datos un tamaño en memoria y un tipo de representación interna. Sistema binario • En el interior del ordenador los datos se representan en binario. • Sólo emplea los dígitos 0 y 1. • Con N bits se pueden representar 2N valores diferentes. Tipos de datos Java Enteros • Pueden ser: – Byte – Short – Integer – Long • Internamente se representa en complemento a dos Literales enteros • Literal es una especificación de un valor concreto de un tipo de datos. • Pueden expresarse: – En decimal (base 10): 255 – En octal (base 8): 0377 (3x82 + 7x81 + 7x80 = 255) – En hexadecimal (base 16): 0xFF (15x160+15x161=255) • Los literales enteros son de tipo int por defecto • Un literal entero es de tipo long si va acompañado del sufijo L Byte • Tipo de 8 bits con signo • Rango de valores (-128, +127) • Se debería evitar su utilización excepto para la manipulación de bits • Las variables byte se declaran utilizando la palabra clave byte. Ejemplo: byte a, b; a=012; //valor octal 7 (10 en decimal) b=10; //valor decimal Short • Tipo de 16 bits con signo • Rango de valores (-32768, +32767) • Actualmente es el tipo menos utilizado debido a la desaparición de los ordenadores de 16 bits • Las variables short se declaran utilizando la palabra clave short. Ejemplo: short a, b; a=0xA; //valor hexadecimal A (10 en decimal) b=10; //valor decimal Integer • Tipo de 32 bits con signo • Rango de valores: (-2.147.483.648, +2.147.483.647 ) • Es el tipo más utilizado para almacenar valores enteros. • Las variables int se declaran utilizando la palabra clave int. Ejemplo: int a, b; a=0xA; //valor hexadecimal A (10 en decimal) b=10; //valor decimal Long • Tipo de 64 bits con signo • Rango de valores: (-9.223.372.036.854.775.808, +9.223.372.036.854.775.807) • Se utiliza cuando el tipo int no es lo suficientemente grande como para guardar un valor . • Las variables long se declaran utilizando la palabra clave long. Ejemplo: long l; l=10L; Errores con enteros • Desbordamiento Enteros.java:6: possible loss of precision found : int required: byte a=1200; ^ • División por cero. Se produce en tiempo de ejecución cuando intentamos dividir un entero entre cero. Exception in thread "main" java.lang.ArithmeticException: / by zero Números reales • También conocidos con números en coma flotante. • Tienen coma decimal. • Pueden ser: – Float – Double • Internamente se representan siguiendo el estándar IEEE754 Literales reales • Cadenas de dígitos con un punto decimal 123.45 0.0 0.01 • En notación científica 123e5 123E+5 12E-6 • Por defecto los literales reales representan valores de tipo double • Para representar un valor de tipo float, hemos de usar el sufijo f o F. 123.45f 0.01F Float • Utiliza 32 bits para almacenar un valor (1 signo, 8 exponente y 23 mantisa). • Las variables se declaran utilizando la palabra float. float a; a=4.5f; Double • Utiliza 64 bits para almacenar un valor (1 signo, 11 exponente y 52 mantisa). • Las variables se declaran utilizando la palabra double. double a; a=4.5; Literales de tipo caracter • Valores entre comillas simples ‘a’, ‘b’, ‘c’, …, ‘A’, ‘B’, …, ‘1’, ‘2’, …, ‘+’, ‘*’, … • Unicode (en hexadecimal) \u???? – Código de 16 bits – http://www.unicode.org/ ‘\u0061’ (letra ‘a’), ‘\u002b’ (signo más ‘+’) • Secuencias de escape ‘\t’ tabulador, ‘\n’ avance de línea, ‘\”’ comillas dobles Variables carácter • Utilizan 16 bits para representar un valor • Las variables se declaran utilizando la palabra char char sino, salto; sino=‘s’; // o tambíen sino=‘\u0073’; salto=‘\n’ • Cuando el el valor se introduce por teclado no se ponen las comillas Cadenas de caracteres • Una cadena (String) es una secuencia de caracteres • String no es un tipo primitivo, sino una clase predefinida • Los literales de tipo String van entre comillas dobles “Esto es una cadena” • Las secuencias de escape se pueden introducir formando parte de una cadena. “Pepe\tGarcía Molinero\n” • Concatenación de cadenas “Pepe “+”García “+”Molinero” “Total = “+ total Boolean • Pueden contener los valores True o False • Las variables se declaran utilizando la palabra boolean boolean b; b=true; b=9>5 && 9<=9; Identificadores en Java • El primer carácter será una letra (mayúscula o minúscula) o uno de estos dos símbolos ‘_’ ‘$’ • http://elvex.ugr.es/decsai/java/pdf/2DVariables.pdf Palabras clave Palabras reservadas del lenguaje que no pueden ser utilizas como identificadores. Comentarios • Sirven para documentar el código fuente • No se compilan (no pasan al .class) • Tipos: – // de una sóla línea – /* de múltiples líneas */ – //** de documentación */ Ámbito de las variables • Dependiendo del lugar del programa donde se declara la variable, esta tendrá un ámbito. • El ámbito es el espacio del programa donde se puede utilizar esa variable. Declaración de variables • Operación que debemos realizar antes de utilizar una variable. • Pueden declararse: – Fuera de los módulos del programa class Programa { public static int a, b; public static void main(String[] args){ – Dentro de los módulos • Al principio del módulo • En otro lugar Declaración de constantes simbólicas • final Dentro de un método • final static En la clase fuera de todos los métodos class CElementosJava { final static int cte1=1; void test() { final double cte2 = 3.14; … } } Conversión implícita Un dato tipo byte se puede meter en cualquier tipo de variable y un dato tipo double sólo se puede meter en una variable de tipo double Entrada por teclado • Keyboard es una clase que no forma parte de las API de Java. • Se encuentra dentro del paquete cs1 • Contiene métodos estáticos que permiten leer datos desde el teclado. • Para llamar a los métodos de Keyboard: – cs1.Keyboard.nombre_del_método() Métodos de Keyboard • readByte(), readShort(), readInt(), readFloat(), readDouble(), readChar(), readString() • No tiene readBoolean() Ejercicios • Programa que pide dos números float y devuelve su división exacta. • Programa que pide un carácter y muestra su código Unicode Conversión explícita (cast) • El operador cast fuerza a un dato, variable o una expresión a convertirse a un nuevo tipo de dato. • (tipo de dato) expresión • Ejemplo: – (int) (5.0/2.4) el resultado será entero Tipo de datos del resultado de una expresión numérica • Si en una expresion numérica se utilizan datos de diferentes tipos, el resultado de la expresión es un dato del mayor tipo • Ejemplos: 5/2.0 (int / double) el resultado es double 5f*2 (float * int) el resultado es float Operadores aritméticos Operadores relacionales Operadores lógicos Operador && (and) c1 c2 c1 && c2 V V V V F F F V F F F F IES Galileo 35 Operador || (or) c1 c2 c1 || c2 V V V V F V F V V F F F IES Galileo 36 Operador ! (not) IES Galileo c !c V F F V 37 Operadores unarios Operadores de asignación • ++ -= • Ejemplos: a++; --a; a=a+b; a+=b; a*=b; *= /= %= += -= Operadores condicionales La clase Keyboard • No forma parte de las API de Java • La utilizaremos para leer datos desde el teclado • La forma de llamar a los métodos de esta clase es de la siguiente manera: – cs1.Keyboard.readInt(); • cs1 la clase pertenece al paquete cs1 • Keyboard nombre de la clase • readInt() nombre del método KeyBoard • Tiene métodos para leer por teclado cada tipo de datos excepto los boolean. – – – – – – byte b=cs1.Keyboard.readByte(); short s=cs1.Keyboard.readShort(); int i=cs1.Keyboard.readInt(); float f=cs1.Keyboard.readFloat(); double d=cs1.Keyboard.readDouble(); char c=cs1.Keyboard.readChar(); • También tiene un método para leer cadenas – String s=cs1.Keyboard.readString(); Keyboard: como funciona Cuando en un programa que tiene que leer por teclado un entero ponemos la siguiente instrucción: int n=cs1.KeyBoard.readInt(); 1.El programa se detiene a la espera de que el usuario teclee el entero y pulse INTRO. 2.Cuando esto ocurre el programa continua con la siguiente instrucción. • Normalmente se escribe un mensaje en pantalla antes de utilizar Keyboard para indicar al usuario que dato le está pidiendo el programa que teclee. Cadenas de caracteres: String • No son tipos de datos (son objetos) • Operador de concatenación: String saludo = “Hola” + “ Pepe”; Sytem.out.println(saludo); // “Hola Pepe” • Operador de concatenación puede unir una cadena a cualquier otro tipo o literal: double sueldo = 1120.85; String mensaje = “su sueldo es ” + sueldo; String deletrear = ‘S’ + “ como sevilla”; • ¡Uno de los operandos tiene que ser un String! String badString = 13 + ‘S’; Ejercicio • Programa que pide dos números por teclado y me dice cual de ellos es el mayor (Utiliza el operador condicional). • Programa que pide por teclado el precio unitario y la cantidad comprada, y responde el importe de la compra sin IVA y con IVA (18%). Operadores sobre caracteres • Los caracteres se almacenan como números enteros • Se pueden hacer operaciones aritméticas sobre los caracteres. El resultado es siempre un entero. char myChar=‘a’; int resta = myChar – 32; • Para volver a un carácter necesita hacer cast: char myChar=‘a’; myChar= (char) (myChar – 32); //nuevo valor ’A’ Prioridad de los operadores 1 () 2 + - ++ -- ! (tipo) sgn/inc/dec/NO/casting 3 * / % mult/div/resto 4 + - + ad/sust/concatenación 5 > >= < <= mayor/menor 6 == != igual/distinto 7 ^ O exclusiva 8 && Y lógica 9 || O lógica 10 = += -= *= /= %= paréntesis asignación Ejercicios • Programa que lee por teclado el nombre de una persona y su año de nacimiento para mostrar en un mensaje el nombre y los años que cumple este año. • Programa que lee por teclado micrómetros (m) y calcula los metros y Km equivalentes. El símbolo de la micra es \u00B5 en Unicode. (El micrómetro o micra es la unidad de longitud equivalente a una millonésima parte de un metro)