¿Como comparar 2 vectores por posición del mismo tamaño en Java ?

Publicado en 'Programación' por ZubZero, 25 Jul 2011.





  1. ZubZero

    ZubZero Miembro frecuente

    Registro:
    4 Jun 2011
    Mensajes:
    77
    Likes:
    30




    Buenas amigos otra ves molestándolos :biggrin: quisiera que me ayudaran con un ejercicio el siguiente:

    - Se tienen almacenados en la memoria dos vectores M y N de 3 elementos cada uno. Hacer un programa que escriba la palabra "Iguales" si ambos son iguales y "Diferentes" si ambos vectores son diferentes .Serán iguales cuando en la misma posición de ambos vectores se tenga el mismo valor lo cual se aplica para todos los elementos.

    Bueno yo lo e ido avanzando pero el problema es que cuando quiero comparar los 2 vectores por su respectiva posición solo me compara la primera posición y toma en cuenta a las otras y lo que me pide el ejercicio es que se comparen los 2 vectores por posición espero me puedan ayudar Gracias de antemano :hi:

    Aquí les dejo el código del ejercicio :

    package ejer8vives;

    import java.util.Scanner;

    public class Ejer8Vives {

    private static int vector1[];
    private static int vector2[];

    public static void main(String[] args) {
    System.out.println("GESTION DE DOS VECTORES");
    System.out.println("-----------------------");
    PedirDatos1();
    DATOS2();
    Reportes();
    }

    private static void PedirDatos1() {
    Scanner lector=new Scanner(System.in);
    int num1;
    int num2;
    vector1=new int[3];
    vector2=new int[3];
    System.out.println("Primer Vector");
    for(int i=0;i<3;i++){
    System.out.println(" Ingrese numero " + (i+1));
    num1=lector.nextInt();
    vector1=num1;
    }
    }

    private static void DATOS2(){
    Scanner lector=new Scanner(System.in);
    System.out.println("Segundo Vector");
    int num2;
    for (int j=0;j<3;j++){
    System.out.println("Ingrese Numero" + (j+1));
    num2=lector.nextInt();
    vector2[j]=num2;
    }
    }



    private static int Menu() {
    int op;
    System.out.println("Opciones");
    System.out.println("[1] Verificar si son iguales los vectores o son diferentes");
    System.out.println("[2] Volver a Pedir Datos");
    System.out.println("[3] Salir");
    op = LeerEntero("Opcion", 1,3 , "Opcion no Valida");
    return op;
    }


    private static void Reportes() {
    int op;
    do {
    op = Menu();
    switch (op) {

    case 1: Comparando();break;
    case 2: PedirDatos1();break;

    }
    } while (op < 3);
    }

    private static int LeerEntero(String msje, int min, int max, String error) {
    Scanner lector = new Scanner(System.in);
    int num;
    do {
    System.out.println(msje);
    num = lector.nextInt();
    if (num < min || num > max) {
    System.out.println(error);
    }
    } while (num < min || num > max);
    return num;

    }

    private static void Comparando() {
    for (int i=0;i<3;i++){
    for(int j=0;j==i;j++){
    if (vector1 == vector2[j]){
    System.out.println("Los vectores son iguales");
    }else {
    System.out.println("Los vectores son diferentes");
    }

    }
    }

    }


    }
     
    Última edición: 25 Jul 2011


  2. BLake

    BLake Miembro frecuente

    Registro:
    6 Mar 2009
    Mensajes:
    192
    Likes:
    17
    Listo man, lo modifique a la volada, se puede mejorar, por ejemplo si detecta que uno de los elementos son repetidos ya no seguir recorriendo los vectores pues seria un gasto innecesario, lo puedes mejorar, otra cosa podrias agregar que el numero de elementos de los vectores sean ingresados por el usuario, toy de salida suerte.

    import java.util.Scanner;

    public class Ejer8Vives {

    private static int vector1[];
    private static int vector2[];

    public static void main(String[] args) {
    System.out.println("GESTI ON DE DOS VECTORES");
    System.out.println("-----------------------");
    PedirDatos1();
    DATOS2();
    Reportes();
    }

    private static void PedirDatos1() {
    Scanner lector = new Scanner(System.in);
    int num1;

    vector1 = new int[3];
    vector2 = new int[3];
    System.out.println("Prime r Vector");
    for (int i = 0; i < 3; i++) {
    System.out.println(" Ingrese numero " + (i + 1));
    num1 = lector.nextInt();
    vector1 = num1;
    }
    }

    private static void DATOS2() {
    Scanner lector = new Scanner(System.in);
    System.out.println("Segun do Vector");
    int num2;
    for (int j = 0; j < 3; j++) {
    System.out.println("Ingre se Numero" + (j + 1));
    num2 = lector.nextInt();
    vector2[j] = num2;
    }
    }

    private static int Menu() {
    int op;
    System.out.println("Opcio nes");
    System.out
    .println("[1] Verificar si son iguales los vectores o son diferentes");
    System.out.println("[2] Volver a Pedir Datos");
    System.out.println("[3] Salir");
    op = LeerEntero("Opcion", 1, 3, "Opcion no Valida");
    return op;
    }

    private static void Reportes() {
    int op;
    do {
    op = Menu();
    switch (op) {

    case 1:
    Comparando();
    break;
    case 2:
    PedirDatos1();
    DATOS2();
    break;

    }
    } while (op < 3);
    }

    private static int LeerEntero(String msje, int min, int max, String error) {
    Scanner lector = new Scanner(System.in);
    int num;
    do {
    System.out.println(msje);
    num = lector.nextInt();
    if (num < min || num > max) {
    System.out.println(error);
    }
    } while (num < min || num > max);
    return num;

    }

    private static void Comparando() {
    boolean iguales = true;

    for (int j = 0; j < 3; j++) {
    if (vector1[j] != vector2[j]) {

    iguales = false;

    //System.out.println("Los vectores son iguales");
    }

    }
    if(iguales){
    System.out.println("Los vectores son iguales");
    }
    else{
    System.out.println("Los vectores son diferentes");
    }
    }


    }
     
    A rey92 le gustó este mensaje.
  3. ZubZero

    ZubZero Miembro frecuente

    Registro:
    4 Jun 2011
    Mensajes:
    77
    Likes:
    30
    Gracias por la valiosa ayuda amigo BLake me corrio el ejercicio de maravilla :)
     
    Última edición: 25 Jul 2011
  4. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Hola. Te dejo otra alternativa de solución. Espero te sirva.
    Código:
    package com.eduardo.aplicacion;
    import java.util.Scanner;
    class MiVector
    {
     private int[] vector;
     MiVector(int tamanio)
     {
      vector = new int[tamanio];
     }
     public void cargar()
     {
      Scanner teclado = new Scanner(System.in);
      for (int i = 0; i < vector.length; ++i) {
       System.out.print("Elemento " + i + ": ");
       vector[i] = teclado.nextInt();
      }
     }
     public int[] get()
     {
      return vector;
     }
    }
    public class Test
    {
     public static void main(String[] args)
     {
      MiVector a = new MiVector(3);
      MiVector b = new MiVector(3);
      System.out.println("Primer vector:");
      a.cargar();
      System.out.println("\nSegundo vector:");
      b.cargar();
      System.out.printf("\nEl vector a y b %s iguales\n", iguales(a.get(), b.get()) ? "son" : "no son");
     }
     // Esto compara el contenido de 2 vectores de igual tamaño
     public static boolean iguales(final int[] x, final int[] y)
     {
      int i;
      for (i = 0; i < x.length && x[i] == y[i]; ++i)
       ;
      return i == x.length;
     }
    }
    Un saludo
     
    A rey92 le gustó este mensaje.
  5. ZubZero

    ZubZero Miembro frecuente

    Registro:
    4 Jun 2011
    Mensajes:
    77
    Likes:
    30
    Gracias amigo por la ayuda lo tomare en cuenta tu solucion :)
     
  6. ZubZero

    ZubZero Miembro frecuente

    Registro:
    4 Jun 2011
    Mensajes:
    77
    Likes:
    30

    Amigo gracias por la ayuda lo comprobé en el netbeans y si corrió el ejercicio pero quería preguntarte como haría si quiero saber cual a sido el valor mas veces ingresado del primer vector suponiendo que este sea de tamaño N ????
     
  7. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72
    Bueno Pura Lógica, se tiene que Comparar todo el Vector.

    /**
    *
    * @author Guzman Diaz Celso Javier
    */
    import javax.swing.JOptionPane;
    public class Principal {
    public static void main(String[] args) {
    int numeroRepetido = 0;
    int contador=0;
    int vectorNumerico [] = new int[5];
    /*Con este For de los Cojones Ingresamos los Datos :D*/
    for(int i=0;i<vectorNumerico.length;i++){
    vectorNumerico=Integer.parseInt(JOptionPane.showInputDialog("Ingrese Numero: "+(i+1)));
    }
    /*Con este Otro For Hacemos el Recorrido...Tambien de los Cojones :D*/
    for(int i=0;i<vectorNumerico.length;i++){
    for(int j=i+1;j<vectorNumerico.length;j++){
    if(vectorNumerico==vectorNumerico[j]){
    numeroRepetido=vectorNumerico;
    contador++;
    }
    }
    }
    if(numeroRepetido==0){
    JOptionPane.showMessageDialog(null, "No hay Numero Repetido");
    }
    JOptionPane.showMessageDialog(null, "El Numero Repetido Es: "+numeroRepetido+" Se Ha Repetido "+contador);
    }
    }


    Obviamente solo va a Funcionar para 1 Numero, Ahora si es que se repiten mas de 2 Números N Veces ahi tienes que hacerlo con un Vector, Que va a ir Almacenando los Números que se Repiten.

    En este caso solo Funcionan Para Números Así si tu Ingresas en el Siguiente Orden

    1-1-2-3-4

    Siendo el 1-1 Que se Repiten.

    Ahora si Por Ejemplo Ingresas

    1-1-2-2-3

    Aquí veras que 1-1 y 2-2 se Repiten, Entonces como en el Programa solo lo he Hecho con una Variable "numeroRepetido", Este tomara el Ultimo Valor, Así que el Valor Antiguo se Destruye, Osea 1-1, y tomaría 2-2. Es depende del Orden en que tu lo has Ingresado pero ahi el Contador que he Hecho seguirá Contando, Algo que te dejo como tarea que lo Soluciones ya que lo he hecho Apurado ya que me voy a Trabajar:D, Lo importante que ya tienes la Lógica de Como Hacerlo y si se te complica, Me pasas la Voz :D
     
    Última edición: 30 Jul 2011
  8. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Hola. Lo que tu deseas encontrar es la moda. Asi como existe la media y la mediana, tambien existe la moda, que viene a ser el valor más repetido de una lista. Ahora bien, para conseguirlo se tiene que contabilizar la cantidad de ocurrencias de cada valor del vector(frecuencia). Si los valores van en el rango de 1 a 1000, necesitaremos usar mil variables para almacenar cada conteo o lo que es más lógico como ya lo dijeron, usar un vector. Lo más adecuado desde el punto de vista del programador, sería indicarle al usuario el rango de valores permitido y con ello ya tendríamos conocimiento del tamaño que tendrá nuestro vector contador de frecuencias. Haciendo las modificaciones al programa que te propuse más arriba y considerando que el rango va de 1 a 100, tendremos.
    Código:
    package com.eduardo.aplication;
    import java.util.Scanner;
    class MiVector
    {
     private int[] vector;
     MiVector(int tamanio)
     {
      vector = new int[tamanio];
     }
     public void cargar()
     {
      Scanner teclado = new Scanner(System.in);
      for (int i = 0; i < vector.length; ++i) {
       System.out.print("Elemento " + i + " [1 - 100]: ");
       vector[i] = teclado.nextInt();
      }
     }
     public int[] get()
     {
      return vector;
     }
     public void moda()
     {
      int[] frecuencia  = new int[101]; // Elementos se inicializan en cero
      for (int i = 0; i < vector.length; ++i)
       ++frecuencia[vector[i]];
      int masGrande = frecuencia[1];
      int valorModa = 1;
      for (int rango = 1; rango < frecuencia.length; ++rango) {
       if (frecuencia[rango] > masGrande) {
        masGrande = frecuencia[rango];
        valorModa = rango;
       }
      }
      System.out.printf("\nCalculando moda del vector a\nLa moda es el valor mas frecuente.\nPara esta ejecucion la moda es %d\nFrecuencia -> %d\n\n", valorModa, masGrande);
     }
    }
    public class Test
    {
     public static void main(String[] args)
     {
      Scanner teclado = new Scanner(System.in);
      System.out.print("Cuantos elementos?: ");
      int n = teclado.nextInt();
      MiVector a = new MiVector(n);
      MiVector b = new MiVector(n);
      System.out.println("Primer vector:");
      a.cargar();
      System.out.println("\nSegundo vector:");
      b.cargar();
      System.out.printf("\nEl vector a y b %s iguales\n", iguales(a.get(), b.get()) ? "son" : "no son");
      a.moda();
     }
     // Esto compara el contenido de 2 vectores de igual tamaño
     public static boolean iguales(final int[] x, final int[] y)
     {
      int i;
      for (i = 0; i < x.length && x[i] == y[i]; ++i)
       ;
      return i == x.length;
     }
    }
    Se debe considerar también que la moda puede no ser única ya que pude ocurrir un empate de frecuencia. El programa no lo escribí considerando tal caso pero bastaría con unas lineas adicionales.
    Un saludo.
     
    Última edición: 30 Jul 2011
  9. BLake

    BLake Miembro frecuente

    Registro:
    6 Mar 2009
    Mensajes:
    192
    Likes:
    17
    Mmm, tendrias que solicitar el tamanio N por teclado, luego crear un contador que aumente en 1 por cada elemento repetido, para la noche que este en casa quizas lo pueda hacer o darte una mejor idea ahorita toy en la chamba :S

    Saludos.

     
  10. ZubZero

    ZubZero Miembro frecuente

    Registro:
    4 Jun 2011
    Mensajes:
    77
    Likes:
    30
    Gracias amigos por las respuestas me funco de maravilla el ejercicio :D
     
    Última edición: 9 Ago 2011