Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: respondeporfa en 29 de Octubre 2016, 23:43
-
hola muy buenas, soy nuevo en este foro espero que me puedes ayudar con estos ejercicios, sé que es muy básica pero me estoy liando fleje. He conseguido que compilan los 3 pero al evaluar me di cuenta que los resultados no son perfectos o sea que algunos todavía tienen errores.
1. El método match acepta dos parámetros (a1, a2) que son dos arrays monodimensionales de elementos de tipo double. Complételo de forma que sirva para saber si la secuencia de elementos representada por a2 se encuentra contenida en la secuencia de elementos representada por a1. De ser así, devolverá el índice de a1 donde comience la secuencia representada por a2, y si no, devolverá el valor -1.
Ejemplo:
a1 = {1.0, 2.0, 1.0, 2.0, 3.0, 4.0, 5.0, 1.0, 2.0, 3.0}
a2 = {1.0, 2.0, 3.0}
resultado = 2
public class Excercise {
public static int match(double[] a1, double[] a2) {
}
}
Lo que hice fue:
public class Excercise {
public static int match(double[] a1, double[] a2) {
int result = 0;
for (int i = 0; i < a1.length; i++){
for (int j = 0; j < a2.length; j++){
if (a1[i] == a2[j]){
result = i;
}else{
result = -1;
}
}
}
return result;
}
}
2. El método highers toma como parámetros dos arrays bidimensionales de elementos de tipo int (a1 y a2) y dos valores de tipo int (n, m). Los arrays a1 y a2 tienen al menos n x m elementos. Añada el código necesario para que el método highers devuelva un nuevo array, de n x m elementos de tipo int, de tal manera que en cada posición del array resultante se encuentre el valor mayor de los que ocupan la misma posición en los arrays a1 y a2 .
Ejemplo:
a1 =
{3, -5, 2, 8, -4}
{8, 3, 5, 7, 0}
{3, 4, 5, 6, 7}
a2 =
{3, 12, -1, 8, 4}
{9, 10, 11, 12, 13}
{0, 5, 14, 8, -1}
n = 3
m = 5
resultado =
{3, 12, 2, 8, 4}
{9, 10, 11, 12, 13}
{3, 5, 14, 8, 7}
public class Excercise {
public static int[][] highers(int[][] a1, int[][] a2, int n, int m) {
}
}
Lo que hice fue:
public class Excercise {
public static int[][] highers(int[][] a1, int[][] a2, int n, int m) {
int [][]resultado = new int[n][m];
for (int i = 0; i < n; i++){
for (int j = 0; j < m; i++){
if (a1[i][j] > a2[i][j]){
resultado[i][j] = a1[i][j];
}else{
resultado[i][j] = a2[i][j];
}
}
}
return resultado;
}
}
esto me dan errores at Excercise.highers(Excercise.java: 8)
at MainClass.main(MainClass.java:23)
3. Esto es muy parecido al del 2
El método matchInPos acepta dos parámetros (a1, a2) que son dos arrays monodimensionales de elementos de tipo int, y un valor de tipo int, mayor o igual que cero (ini). Complételo de forma que sirva para saber si la secuencia de elementos representada por a2 se encuentra contenida en a1, en la posición indicada por ini. De ser así, devolverá true, y si no, devolverá false.
Ejemplo:
a1 = {1, 2, 1, 2, 3, 4, 5, 1, 2, 3}
a2 = {1, 2, 3}
ini = 2 >>> resultado = true
ini = 3 >>> resultado = false
1 public class Excercise {
public static boolean matchInPos(int[] a1, int[] a2, int ini) {
}
}
Lo que hice fue:
public class Excercise {
public static boolean matchInPos(int[] a1, int[] a2, int ini) {
boolean result = true;
for(int i = ini; i<a1.length; i++){
for(int j = 0; j<a2.length; j++){
if(a1[i] != a2[j]){
result = false;
}
}
}
return result;
}
}
Muchas gracias!!
-
Buenas respondeporfa
Quizás ya hayas resuelto el problema pero trato de darte algunas indicaciones
Para obtener respuesta en los foros es conveniente escribir un título descriptivo como se explica en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0 Así quien lee el título sabe de qué trata el tema y es más fácil que alguien responda.
El primer ejercicio no es tan sencillo como pueda parecer a primera vista.
En el primer ejercicio tienes que devolver -1 a no ser que se encuentre la secuencia. Por ello veo preferible inicialiazar result = -1; en lugar de result = 0;
Otra cosa a tener en cuenta es que no sabes a priori si el vector a2 es más corto o igual que la secuencia a1. Si resultara a2 más largo sería imposible que estuviera contenido en a1. De ahí que pueda introducirse esto:
int result = -1;
if (a2.length> a1.length) { return result;}
Otra cosa a tener en cuenta es que no basta encontrar que coincida un elemento, tiene que coincidir la secuencia completa de a2, que esa secuencia se encuentre dentro de a1.
Para comprobar que coincidan todos los elementos podemos crear un array de booleanos boolean [] coincidiendo = new boolean[a2.length] ;
Otra cosa más a tener en cuenta es que si encontramos que comienza una coincidencia tenemos que "memorizar" dónde ha comenzado y mantener eso mientras la secuencia vaya coincidiendo. En cambio si la secuencia falla tenemos que volver al punto de partida. Para eso podemos definir una variable indiceComienzo = -1; y cambiarla cuando comience la coincidencia. Si la coincidencia falla la volvemos a poner a -1.
La idea sería esta (no he probado el código con lo cual no te aseguro que esté bien, solo lo pongo para que sirva de referencia y poder hacer pruebas a partir de él y corregirlo si es necesario)
public class Excercise {
public static int match(double[] a1, double[] a2) {
int result = -1;
boolean [] coincidiendo = new boolean[a2.length] ;
int indiceCoin=0;
int indiceComienzo=-1;
boolean matchCompleto = true;
if (a2.length> a1.length) { return result;}
for (int i = 0; i < a1.length; i++){
for (int j = 0; j < a2.length; j++){
if (a1[i] == a2[j]){
coincidiendo[indiceCoin]=true;
indiceCoin = indiceCoin+1;
if (indiceComienzo == -1) {indiceComienzo = i;}
}else{
indiceCoin = 0; //Reiniciamos
indiceComienzo = -1;
}
}
}
//Comprobamos que exista coincidencia total
for (int i=0; i < coincidiendo.length; i++) {
if (coincidiendo[i] == false) { matchCompleto = false;}
}
if (matchCompleto == true) { result = indiceComienzo; } else {result = -1;}
return result;
}
}
Recomendamos siempre revisar los conceptos de Java usando este curso: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188
Salu2