Examen de Programación

Anuncio
Examen de Programación
Convocatoria de Septiembre 2005
Licenciatura de Lingüística y Nuevas Tecnologías
Pregunta 1
Tenemos el siguiente programa:
public class Numero {
int value;
public Numero(int i) {
value = i;
}
public static void main(String[ ] args) {
Numero f1 = new Numero(3);
Numero f2 = new Numero(4);
Numero f3 = f1;
f1.value = f2.value;
Numero f4 = null;
System.out.println(f1.value); // linea 1
System.out.println(f2.value); // linea 2
System.out.println(f3.value); // linea 3
System.out.println(f4.value); // linea 4
}
}
a) ¿Qué es public Numero(int i)? Si devuelve algún valor, decir qué tipo de
valor devuelve?
b) ¿Qué pasa a la ejecución a cada una de las líneas 1 a 4?:
Línea 1
Línea 2
Línea 3
Línea 4
c) Añadir en el programa anterior en el lugar adecuado las variables siguientes
y mostrar un ejemplo de como inicializarlas en el main:
• Una variable de clase que sea de tipo básico
• Una variable de instancia que sea de tipo objeto
Pregunta 2
Tenemos el siguiente programa:
import java.util.*;
public class Example {
public static void main(String[] args) {
String cadena = "hello, my dear!";
String value = "33";
// convert String to float
float i = Float.parseFloat(value);
StringTokenizer st = new StringTokenizer(cadena);
// number of tokens obtained by string tokenizer
int j = st.countTokens();
System.out.println(j);
}
}
a) parseFloat y countTokens son dos métodos llamados dentro del main de
forma diferente. Explicar la diferencia y justificarla.
b) ¿Qué valor imprime la última línea del main (System.out.println(j)) y por qué?
Pregunta 3
a) ¿Qué imprime el siguiente programa?
public class Example {
public static void main(String[ ] args) {
String[ ] cadenas = new String[4];
cadenas[0] = "good morning";
cadenas[2] = "bon dia";
for (int i=0;i<cadenas.length;i++)
System.out.println(cadenas[i]);
}
}
b) Sabiendo que al final de ejecutar este programa, tenemos en la pantalla:
Entrar valor: 9
Resultado es: 4 2
Inicializar el array values de la forma correcta.
public class Example {
public static void main(String[] args) {
int[ ] values = ___________________ ;
TextIO.put("Entrar valor: ");
int x = TextIO.getlnInt();
int c1 = 0;
int c2 = 0;
for (int i=0;i<values.length;i++) {
System.out.println(values[i]);
if (x > values[i])
c1++;
else
c2++;
}
TextIO.putln("Resultado es: " + c1 + “ “ + c2);
}
}
Pregunta 4
a) Para cada una de las siguientes afirmaciones sobre ArrayList y, decir si es
Verdadera (V) o Falsa (F):
Los elementos de un ArrayList pueden ser de tipo básico o de tipo
objeto
No tenemos que declarar el tamaño de un ArrayList de antemano.
Un ArrayList solo puede contener elementos del mismo tipo.
Para recorrer un ArrayList, la única manera es usar un objeto de tipo
Iterator.
Los elementos de un ArrayList se acceden por valor, no por índice.
b) Aquí tenemos un extracto de la API de la clase HashMap:
Object put(Object key, Object value)
Associates the specified value with the specified key in this map.
Object get(Object key)
Returns the value to which the specified key is mapped in this identity
hash map, or null if the map contains no mapping for this key.
boolean containsKey(Object key)
Returns true if this map contains a mapping for the specified key.
boolean containsValue(Object value)
Returns true if this map maps one or more keys to the specified value.
int size()
Returns the number of key-value mappings in this map.
Tenemos el siguiente programa:
import java.util.*;
public class UseHashMap {
public static void main(String[] args) {
HashMap hashmap = new HashMap();
hashmap.put("1","x");
hashmap.put("1","y");
System.out.println(hashmap.get("1")); // 1
System.out.println(hashmap.size()); // 2
hashmap.put("2","y");
System.out.println(hashmap.size()); // 3
System.out.println(hashmap.containsKey("x")); // 4
System.out.println(hashmap.containsValue("y")); // 5
}
}
Decir que imprimen cada una de las líneas numeradas de 1 a 5:
1)
2)
3)
4)
5)
Pregunta 5
a) Explicar qué hace este programa y como se ejecuta:
import java.io.*;
public class P6 {
public static void main(String[ ] args) throws IOException {
FileReader f = new FileReader(args[0]);
BufferedReader b = new BufferedReader(f);
InputStreamReader s = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(s);
String s1 = b.readLine();
String s2 = stdin.readLine();
if (s1.equals(s2))
System.out.println("YES");
else
System.out.println("NO");
b.close();
f.close();
stdin.close();
s.close();
}
}
b) Para cada una de las siguientes afirmaciones, decir si es Verdadera (V) o
Falsa (F):
Para procesar una imagen, necesitamos un flujo de caracteres
Un flujo de entrada establece una conexión entre el programa e el
destino de los datos
Si hemos llegado al final del fichero e intentamos leer los datos con
readLine( ), el sistema lanza una excepción
Podemos redirigir el flujo de salida estándar en la línea de comandos
con el operador de redirección “>”
Pregunta 6
a) En la API de Java las clases Number y Integer están definida como:
public abstract class Number
public class Integer extends Number
Explicar por qué está definida la clase Number como abstract y la clase Integer
como extends Number.
b) Para cada una de estas afirmaciones, decir si es Verdadera (V) o Falsa (F):
El overriding (redefinición) de métodos ocurre en la misma clase
La clase Object de Java tiene una super-clase
Cuando diferentes objetos se comportan de forma distinta con lo que es
en apariencia el mismo mensaje (i.e, método), eso se llama polimorfismo
En Java, una clase puede heredar de más de una clase madre directa
Dentro de una clase, podemos tener varios métodos con el mismo
nombre pero tienen que tener un número de argumentos distinto
Descargar