Comparar arrays en java

Iniciado por erikcdlm, 8 Octubre 2014, 03:53 AM

0 Miembros y 1 Visitante están viendo este tema.

erikcdlm

Buenas noches,

Necesito por favor de su ayuda con el siguiente programa: Por fa, las ideas me sirven de mucho, no quiero que me hagan el programa sino que me orienten en el mismo.

Tengo que crear un programa que ingrese una oración, ejemplo: Juan juega con la bicicleta.

Esa cadena de texto la debo comparar con unos array que ya tengo definidos:

String sujeto [] =  {"Juan","Ana","Diana","Pedro","Erik","Santiago","Adriana","Jenny","Luis","Jose"};
  String verbos [] = {"empuja","mira","lanza","come","cuenta","paga","visita","limpia","abre","juega"};
  String preposicion [] = {"a","ante","bajo","cabe","con","contra","de","desde","en","entre","hacia","hasta","para","por","según","sin","so","sobre","tras"};
  String articulo [] = {"el","la","lo","los","la","las","un","una","uno","unos"};
  String sustantivo [] = {"Agua","Árbol","Bicicleta","Casa","Carro","Guitarra","Juguete","Música","Pollo","Ventana"};
 
La idea del programa es que la cadena de texto que ingrese por consola me diga si la oración está correcta o si le hace falta algo, en este caso: sujeto, verbo, preposición, articulo o sustantivo.

Yo ya generé el siguiente main donde capturo la oración:

package talleroracion;


import com.sun.jmx.snmp.BerDecoder;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import javax.swing.JOptionPane;

/**
*
* @author A80853598
*/
public class TallerOracion {

   /**
    * @param args the command line arguments
    */
   public static void main(String[] args) throws IOException {
       // TODO code application logic here
       
     
       System.out.println("Ingrese la oración: ");
       BufferedReader bf = new BufferedReader (new InputStreamReader(System.in));
       String or = bf.readLine();
       
       
      // CodigoOracion cod = new CodigoOracion(or);
      // cod.analizador(or);
      CodigoOracion cod = new CodigoOracion(or);
      cod.analizador(or);
       //JOptionPane.showMessageDialog(null, "La oracion ingresada es: "+or);
         
     
       
       }
   
}


De ahí paso a la clase donde transformo la cadena en otro array con el método split y lo que he hecho es hacer un ciclo for donde comparo la cadena entrante convertida en array versus el array de sujeto.

package talleroracion;

import java.util.ArrayList;
import java.util.StringTokenizer;

//import static jdk.nashorn.internal.objects.NativeMath.random;

/**
*
* @author A80853598
*/
public class CodigoOracion {

  String sujeto [] =  {"Juan","Ana","Diana","Pedro","Erik","Santiago","Adriana","Jenny","Luis","Jose"};
  String verbos [] = {"empuja","mira","lanza","come","cuenta","paga","visita","limpia","abre","juega"};
  String preposicion [] = {"a","ante","bajo","cabe","con","contra","de","desde","en","entre","hacia","hasta","para","por","según","sin","so","sobre","tras"};
  String articulo [] = {"el","la","lo","los","la","las","un","una","uno","unos"};
  String sustantivo [] = {"Agua","Árbol","Bicicleta","Casa","Carro","Guitarra","Juguete","Música","Pollo","Ventana"};
 
   
   public CodigoOracion(String or ) {
     
   sujeto = this.sujeto;
   verbos = this.verbos;
   preposicion = this.preposicion;
   articulo = this.articulo;
   sustantivo = this.sustantivo;
   
   }

 
 
   
   public void  analizador (String or){
 
    String cadenaporconsola [] = or.split(" ");

   

   for(int i=0; i<sujeto.length;i++)
                              {
                                   

   if(cadenaporconsola[0].equalsIgnoreCase(sujeto))
   
   
     System.out.println("si");

else

System.out.println("no");
   
       }
     
   
       }
 
 
 
 
   }
}

Pero hasta ahí he llegado por que al imprimir el programa esté me muestra cada campo del array y la salida solo debe decir si la oración está bien o si le hace falta algo y que indique que le hace falta.

Por fa, las ideas me sirven de mucho, no quiero que me hagan el programa sino que me orienten en el mismo.


MeCraniDOS

Acuerdate de utilizar etiquetas GeSHi para tus codigos.




Quizas esto te puede ayudar, he modificado un poco las cosas que ya tienes hechas (espero que no te importe)


Código (java) [Seleccionar]
package talleroracion;

import java.util.Scanner;


public class TallerOracion
{
    public static void main(String[] args)
    {
        try (Scanner teclado = new Scanner(System.in))
        {
            String oracion = teclado.nextLine();
           
            CodigoOracion cod = new CodigoOracion(oracion);
            cod.analizador();
        }
       
    }
   
}


Código (java) [Seleccionar]
package talleroracion;

public class CodigoOracion
{
    private String oracion[];

    private final String sujeto [] =  {"Juan","Ana","Diana","Pedro","Erik","Santiago","Adriana","Jenny","Luis","Jose"};
    private final String verbos [] = {"empuja","mira","lanza","come","cuenta","paga","visita","limpia","abre","juega"};
    private final String preposicion [] = {"a","ante","bajo","cabe","con","contra","de","desde","en","entre","hacia","hasta","para","por","según","sin","so","sobre","tras"};
    private final String articulo [] = {"el","la","lo","los","la","las","un","una","uno","unos"};
    private final String sustantivo [] = {"Agua","Árbol","Bicicleta","Casa","Carro","Guitarra","Juguete","Música","Pollo","Ventana"};


    public CodigoOracion(String oracion)
    {
        this.oracion = oracion.split(" "); //Separamos y almacenamos cada palabra de la frase
    }
     
    public int analizador()
    {
        //Con esto recorres e imprimes lo que hay en oracion
        for(int i=0;i<oracion.length;i++)
            System.out.println(oracion[i]);

        /* Cambiando el tipo del meotodo a int, puedes jugar con el valor de los return
        Ejemplo:
            return  0: todo correcto
            return -1: falta el sujeto
            return -2: falta el verbo
            return -3: falta la preposicion
            return bla bla bla....
        */
         
        return 0;
    }
}


Lo que haces tu en el constructor de la clase CodigoOrientacion no le veo mucho sentido

Código (java) [Seleccionar]
    public CodigoOracion(String or)
    {
        sujeto = this.sujeto;
        verbos = this.verbos;
        preposicion = this.preposicion;
        articulo = this.articulo;
        sustantivo = this.sustantivo;
    }


Estas igualando el mismo valor, en vez de eso, he cambiado los arrays a private final, para que sean accesibles solo desde la clase, y final ya que es un valor fijo.

Código (java) [Seleccionar]
    private final String sujeto [] =  {"Juan","Ana","Diana","Pedro","Erik","Santiago","Adriana","Jenny","Luis","Jose"};
    private final String verbos [] = {"empuja","mira","lanza","come","cuenta","paga","visita","limpia","abre","juega"};
    private final String preposicion [] = {"a","ante","bajo","cabe","con","contra","de","desde","en","entre","hacia","hasta","para","por","según","sin","so","sobre","tras"};
    private final String articulo [] = {"el","la","lo","los","la","las","un","una","uno","unos"};
    private final String sustantivo [] = {"Agua","Árbol","Bicicleta","Casa","Carro","Guitarra","Juguete","Música","Pollo","Ventana"};


He modificado el constructor para que te separe la frase cuando la introduces, de manera que cuando llamas a analizar, ya la tienes separada, (puedes cambiar eso y ponerlo donde quieras, pero ya que has puesto constructor...)


Código (java) [Seleccionar]
    public CodigoOracion(String oracion)
    {
        this.oracion = oracion.split(" "); //Separamos y almacenamos cada palabra de la frase
    }


Y por ultimo, en el metodo analizador, he cambiado el tipo, te he puesto una descripcion comentada dentro del metodo, quizas te sirve para saber que es lo que hay mal en la oracion.


El error lo tienes en la comparacion, si no quieres modificar nada de lo que he propuesto, simplemente cambia esto:

Código (java) [Seleccionar]
        String cadenaporconsola [] = or.split(" ");
       
        for(int i=0; i<sujeto.length;i++)
        {
            if(cadenaporconsola[0].equalsIgnoreCase(sujeto[i]))
                System.out.println("si");
            else
                System.out.println("no");
        }


En el if, comparas con sujeto, no con sujeto[i ], que es el valor que te interesa.

Saludos
"La física es el sistema operativo del Universo"
     -- Steven R Garman

erikcdlm

Muchas gracias por tu ayuda, me sirve muchisimo

MeCraniDOS

Cita de: erikcdlm en  8 Octubre 2014, 21:24 PM
Muchas gracias por tu ayuda, me sirve muchisimo

De nada, si tienes alguna otra duda ya sabes  ;)
"La física es el sistema operativo del Universo"
     -- Steven R Garman

mcdiso

quien puede pasarme el codigo me urge :S porfavor

sodark