Autor Tema: Java método match dos parámetros arrays monodimensionales vectores double  (Leído 2871 veces)

respondeporfa

  • Sin experiencia
  • *
  • Mensajes: 1
    • Ver Perfil
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

Citar
public class Excercise {
 public static int match(double[] a1, double[] a2) {
         
     }
  }

Lo que hice fue:
Código: [Seleccionar]
   
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}

Código: [Seleccionar]
public class Excercise {
 public static int[][] highers(int[][] a1, int[][] a2, int n, int m) {

   }
  }

Lo que hice fue:
Código: [Seleccionar]
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

Citar
  1 public class Excercise {
    public static boolean matchInPos(int[] a1, int[] a2, int ini) {
         
     }
 }

Lo que hice fue:
Código: [Seleccionar]
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!!
« Última modificación: 05 de Noviembre 2016, 13:32 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:Java método match dos parámetros arrays monodimensionales vectores double
« Respuesta #1 en: 05 de Noviembre 2016, 13:58 »
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)

Código: [Seleccionar]
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

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".