Pregunta 1

Anuncio
Examen de Programación
Convocatoria 22 de Junio 2005
Licenciatura de Lingüística y Nuevas Tecnologías
Pregunta 1
Tenemos el siguiente programa:
public class P1 {
public static void main(String args[]) {
P1 un = new P1();
P1 dos = new P1();
P1 tres = null;
System.out.println("un == dos: " + (un == dos)); // 1
System.out.println("dos == tres: " + (dos == tres)); // 2
P1 cuatro = dos;
System.out.println("dos == cuatro: " + (dos == cuatro)); // 3
dos = null;
System.out.println("dos == cuatro: " + (dos == cuatro)); // 4
}
}
¿Qué imprime cada uno de los cuatro System.out.println numerados 1, 2, 3 y 4
y por qué?
1
Pregunta 2
Tenemos en la misma carpeta las clases P2A (en el archivo P2A.java) y P2B
(en el archivo P2B.java).
P2A.java
public class P2A {
public static int c = 3;
public int i = 2;
private int j = 4;
}
P2B.java
public class P2B {
public static void main(String[] args) {
int i = -1;
P2A un = new P2A();
}
}
a) Explicar el significado de cada una de estas 6 denominaciones, ilustrando
con las variables dentro de P2A y P2B:
1. Variable de objeto:
2. Variable de tipo básico:
3. Variable local:
4. Variable global:
5.Variable de clase:
2
6. Variable de instancia:
b) En el cuadro dentro de P2B.java, mostrar cual es la manera correcta y
más típica de acceder a cada una de las variables definidas dentro de
P2A.java (si es que se pueden acceder...).
c) Supongamos que llamamos dentro del main de P2B los siguientes
métodos:
int num = Integer.parseInt(args[0]);
String cadena = "Hola" ;
int tamanyo = cadena.length();
Explicar por qué los métodos parseInt y length se llaman de forma diferente.
Pregunta 3
Tenemos el siguiente programa:
import java.util.*;
public class P3 {
public static void main(String[ ] args) {
String cadena = "Hola! Me llamo Harry. Como estas?";
StringTokenizer st = new StringTokenizer(cadena,"!.?");
while (st.hasMoreTokens()) {
String token = (String) st.nextToken();
System.out.println(token);
}
}
}
3
a) ¿Qué imprime el programa a la ejecución? (A notar que el segundo
argumento de StringTokenizer es “!.?”, es decir punto de exclamación,
punto, punto de interrogación)
b) ¿Por qué hacemos import java.util.* al principio de la clase?
c) ¿Por qué llamamos a nextToken así:
String token = (String) st.nextToken();
Y no así:
String token = st.nextToken();
Pregunta 4
a) ¿Qué pasa al ejecutar el siguiente código?
class P4a {
static void doIt(int[] z)
{
int temp = z[z.length-1] ;
z[ z.length-1 ] = z[0] ;
z[0] = temp;
}
public static void main ( String[] args ) {
int[] myArray = {0, 1, 2, 3, 4} ;
doIt( myArray );
for (int j=0; j<myArray.length; j++ )
System.out.print( myArray[j] + " " ) ;
}
}
4
b) ¿Qué pasa al ejecutar el siguiente código?
public class P4b {
static void doIt( int[] z )
{
int[ ] a = z ;
a[0] = 99;
}
public static void main ( String[] args ) {
int[ ] myArray = {1, 2, 3, 4, 5} ;
doIt( myArray );
for (int j=0; j<myArray.length; j++ )
System.out.print( myArray[j] + " " ) ;
}
}
Pregunta 5
Aquí viene un extracto de la API de la clase ArrayList:
boolean add(Object o)
Appends the specified element to the end of this list.
Object get(int index)
Returns the element at the specified position in this list.
int size()
Returns the number of elements in this list.
int indexOf(Object elem)
Searches for the first occurence of the given argument, testing for
equality using the equals (==) method. Returns the index of the first
occurrence of the argument in this list; returns -1 if the object is not found.
5
a) ¿Qué imprime el siguiente programa a la ejecución (líneas numeradas 1
a 4)?
import java.util.*;
class P5a {
int val;
public P5a(int x) {
this.val = val;
}
public static void main(String []args) {
ArrayList list = new ArrayList();
System.out.println(list.size()); // 1
list.add(new P5a(1));
System.out.println(list.size()); // 2
list.add(new P5a(1));
System.out.println(list.size()); // 3
System.out.println(list.get(0) == list.get(1)); // 4
}
}
b) Con alguno de los métodos de la API de Java, escribir los dos siguientes
métodos:
public static boolean isEmpty(ArrayList a): returns true if arraylist a is empty,
false otherwise
public static boolean isEmpty(ArrayList a) {
}
public static boolean containsObject(ArrayList a,Object o): returns true if
arraylist a contains object o, false otherwise
public static boolean containsObject(ArrayList a,Object o) {
}
6
c) Tenemos el siguiente código:
import java.util.*;
public class P5c {
public static void main(String[] args) {
HashMap h = new HashMap();
String aa = "HELLO";
h.put("one",new Integer(1));
h.put("two",null);
h.put("three",new Integer(2));
h.put("four",aa);
}
}
¿Cuántos elementos tiene el hashmap h y como estan organizados?
¿Qué pasa si añadimos al final de main: h.put(“four”,”HOLA”); ?
Pregunta 6
Tenemos el siguiente código:
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);
String s1 = b.readLine();
String s2 = b.readLine();
FileWriter w = new FileWriter(args[1]);
while ((s1 != null) && (s2 != null)) {
w.write(s1 + " " + s2 + "\n");
s1 = b.readLine();
s2 = b.readLine();
}
w.close();
b.close();
f.close();
}
}
7
a) Si args[0] corresponde a un fichero que contiene lo siguiente (un carácter por
línea):
a
b
c
d
e
¿Cuál será el contenido del fichero que corresponde a args[1] después de la
ejecución?
b) Si args[0] corresponde a un fichero que contiene lo siguiente (un único
carácter):
a
¿Cuál será el contenido del fichero que corresponde a args[1] después de la
ejecución?
c) ¿Qué son f,b y w y por qué necesitamos b además de f para leer un fichero?
Pregunta 7
a) Tenemos el siguiente código:
public class P7a {
public static void main(String[ ] args) {
int i = 3;
System.out.println(i);
String s = "Hola";
System.out.println(s);
}
}
8
Partes de este código ilustran el concepto de overloading. Explicar qué es el
overloading y por qué nos resulta útil.
b) El método String toString() esta definido dentro de la clase Object y también
dentro de su sub-clase indirecta Integer. Si escribimos:
Object o1 = new Object();
String s1 = o1.toString(); // 1
Object o2 = new Integer(3);
String s2 = o2.toString(); // 2
¿Qué toString() va a ser llamado a la ejecución a cada una de las líneas 1 y 2 y
por qué?
c) Tenemos al principio de la clase A la siguiente declaración:
public abstract class A extends B { ... }
¿Qué quieren decir las palabras claves abstract y extends? Explicar cada uno
de estos conceptos.
abstract
extends
9
Descargar