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().

Enunciado: Problema 2 · Programació II UDL Juny 2011

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 ›

Más ejercicios de Diseño de clases y objetos en Java, herencia e igualdad