Problema 2 · Programació II UDL Juny 2011
Tema: Diseño de clases y objetos en Java, herencia e igualdad · Del examen Juny (2011)
Enunciado
Problema 2 (3 puntos). Conteo de fragmentos de ADN interesantes
Un biólogo requiere asistencia informática para analizar secuencias de ADN deteriorado y localizar fragmentos de interés. Debido a la degradación de la muestra, el resultado del análisis no es un bloque continuo de material genético, sino una cadena de texto en la que los tramos perdidos o no recuperados están representados por uno o más espacios en blanco consecutivos.
Se considera que un fragmento continuo es interesante si contiene al menos uno de los marcadores preestablecidos como subcadena. La lista de marcadores está fijada en el vector constante MARKERS:
public class ADNAnalyser extends ConsoleProgram {
private String[] MARKERS = { "taca", "gata", "caca" };
private int countInteresting(String dna) {
// ?
}
public void run() {
String analysis = readLine("Resultado del análisis: ");
int numInterestingFragments = countInteresting(analysis);
println("Número de interesantes: " + numInterestingFragments);
}
}
Se pide implementar el método countInteresting(String dna), utilizando descomposición en funciones o métodos auxiliares donde proceda y eligiendo identificadores claros.
Métodos útiles disponibles
class StringTokenizer:
new StringTokenizer(String str): devuelve un iterador de fragmentos separados por espacios en blanco.
new StringTokenizer(String str, String delims): separa la cadena por cualquiera de los caracteres especificados en delims.
boolean hasMoreTokens(): indica si aún quedan fragmentos pendientes de procesar.
String nextToken(): extrae y devuelve el siguiente fragmento disponible.
class String:
char charAt(int index): devuelve el carácter ubicado en el índice solicitado.
String substring(int begin, int end): retorna la subcadena desde begin (inclusive) hasta end (exclusive).
boolean equals(String other) / boolean equalsIgnoreCase(String other).
int indexOf(String s) / int indexOf(String s, int begin): devuelve la posición de inicio de la primera coincidencia de la subcadena recibida, o -1 si no está presente.
String toUpperCase() / String toLowerCase().

Solución
Según los criterios oficiales de corrección
Implementación del método countInteresting(String dna) y métodos auxiliares
Solución: ```java private boolean isInteresting(String fragment) { for (int i = 0; i < MARKERS.length; i++) { if (fragment.indexOf(MARKERS[i]) != -1) { return true; } } return false; } private int countInteresting(String dna) { if (dna == null) { return 0; } StringTokenizer tokenizer = new StringTokenizer(dna); int count = 0; while (tokenizer.hasMoreTokens()) { String fragment = tokenizer.nextToken(); if (isInteresting(fragment)) { count++; } } return count; } ```
La explicación paso a paso, hecha con IA, es Premium. Premium
Resuélvelo aquí mismo: corrección automática, pistas y solución paso a paso.
‹ Problema 1 · Juny 2011 · Problema 3 · Juny 2011 ›