elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  comparacion de un string con char en java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: comparacion de un string con char en java  (Leído 12,660 veces)
sauce19

Desconectado Desconectado

Mensajes: 7


Ver Perfil
comparacion de un string con char en java
« en: 21 Agosto 2011, 00:31 am »

hola!!! m mandaron a realizar un programa usando los cuatro pilares de java, es realizar un menu con los requisitos para crearte un correo electronico, en un solo metodo tngo q pedir nombre,apellido,id,dominio,sexo,contraseña y q m confirmen la contraseña; pero tngo q mostrar todo eso en un solo vector, he hecho casi todo menos lo del sexo, xq m mandaron a contar el numero de usuarios femeninos y masculinos y m da error lo q he hecho para hacer la comparacion y contar, esto es lo q tngo:
Código
  1. public static void ingreso () throws IOException{
  2. String vec [];
  3. vec=new String[6];
  4. System.out.println("Ingrese sexo (M)/(F):\n");
  5. System.out.flush();
  6. vec[4]=en.readLine();
  7. System.out.println("\n");}

yo habia hecho la comparacion asi, para luego contarlos, el error me dic qq no puedo comparar un string con un char, y d verdad no entiendo como hacerlo:
Código
  1. if(vec[4]=='f'){
  2. fe++;}
  3. if (vec[4]=='m'){
  4. ma++;}
  5.  
si m podrian aclarar la duda se los agradeceria muchisimo. gracias!!!


« Última modificación: 22 Agosto 2011, 17:22 pm por Debci » En línea

someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: comparacion de un string con char en java
« Respuesta #1 en: 21 Agosto 2011, 01:06 am »

Mira, en si a mi se me ocurren soluciones complicadas como en vez de hacer un vector de Strings, hacer un vector de Objects, y que levantes segun el que sea el objeto que corresponda.

Pero eso es overkill y para otas situaciones.

Podrias hacer en vez de eso un :
Código:
if (vec[4].equalsIgnoreCase("f")) fe++;
equalsIgnoreCase es un metodo que compara dos strings sin tener en cuenta mayusculas o minusculas, o sea, "f" y "F" son iguales para ese metodo.
vec[4] es un objeto de tipo String. Por lo tanto podes usarlo.
Comparar un String con un caracter, esta mal.
De movida, vec[4] aun si es una sola letra, ya son dos. Eso seria: 'f' y '\0'.
Si quisieras compararlo asi con el == igual podrias, si haces:
[code]
if (vec[4].charAt(0) == 'f' || vec[4].charAt(0) == 'F') fe++;

vec[4] es un string con una representacion con chars, charAt selecciona el caracter en la posicion empezando a contar desde cero, eso te retorna un char, y si los podrias comparar.
Fijate que por las dudas que el tipo haya puesto una F mayuscula, puse el OR ese ahi en el if.

Alternativamente podrias llevar vec[4] todo a mayusculas (.toUpper()) o todo a minusculas (toLower()) y comparar una sola vez.

Espero que te haya servido, si necesitas mas explicacion preguntame pero esto es bastante simple.[/code]


En línea

sauce19

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: comparacion de un string con char en java
« Respuesta #2 en: 22 Agosto 2011, 03:33 am »

ok muchas gracias por aclarar mi duda somerandomcode. Oye, tngo otra, apenas stoy comenzando a programar en java y quisiera preguntar como hago para mostrar en pantalla lo siguiente, q lo tngo almacenado todo en un vector (es del mismo programa q mencione antes): nombre,apellido,id,dominio,sexo,clave y confirmacion de la clave. yo escribi un metodo para c/u y los tngo asi: el nombre en un vec[0], el apellido en un vec[1], el id en un vec[2],el dominio en un vec[3],el sexo en un vec[4],la clave en un vec[5] y la confirmacion de la clave en un vec[6]; como muestro ese vector en pantalla??? lo intente con un stringformat pero m da error, si m podrias aclarar de nuevo la duda t lo agradeceria mucho, gracias!!
En línea

someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: comparacion de un string con char en java
« Respuesta #3 en: 22 Agosto 2011, 03:47 am »

A ver si te entiendo...
Vos lo que queres es que por pantalla aparezca algo como
Código:
vec[0] = nombre
vec[1] = apellido
vec[2] = id
vec[3] = dominio
vec[4] = sexo
vec[5] = clave
Si es asi, y lo queres tener contenido en un metodo público podrias hacer algo como esto:
Código:
public void mostrarVector(String Vector[]) {
for (int indicador = 0 ; indicador > Vector.length ; indicador++)
System.out.println ("vec[" + indicador + "] = " +Vector[indicador]);
}


Aca te dejo una muestra con main y todo:
Código:
public class Main {

    public static void main(String[] args) {

        String vector[] = new String[6];
        vector[0] = "uno";
        vector[1] = "dos";
        vector[2] = "tres";
        vector[3] = "cuatro";
        vector[4] = "cinco";
        vector[5] = "seis";
        imprimir(vector);

    }

    public static void imprimir(String Vector[]) {
        for (int i = 0 ; i<Vector.length ; i++ )
            System.out.println("Vector[" + i +"] = " + Vector[i]);
    }
}

Esta hecho a las apuradas, pero funciona bien.
En línea

Gallu

Desconectado Desconectado

Mensajes: 247



Ver Perfil
Re: comparacion de un string con char en java
« Respuesta #4 en: 22 Agosto 2011, 15:00 pm »

Por costumbre es siempre mejor aplicar el operador de comparación sobre la constante ejm.

Código
  1. if ("f".equalsIgnoreCase(vec[4])
  2.  

en lugar de
Código
  1. if (vec[4].equalsIgnoreCase("f")) fe++;
  2.  

de esta manera si vec[4] es nulo , no tendrás ningún problema.(NullPointer...)

Saludos.
En línea

Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: comparacion de un string con char en java
« Respuesta #5 en: 22 Agosto 2011, 22:02 pm »

Igualmente si el objeto no esta inicializado, van a haber problemas, independientemente de que lado encares la comprobacion, por ejemplo:
Código:
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        String vector[];// = new String[6];
        /*vector[0] = "uno";
        vector[1] = "dos";
        vector[2] = "tres";
        vector[3] = "cuatro";
        vector[4] = "cinco";
        vector[5] = "seis";*/
        if ("f".equalsIgnoreCase(vector[1])) System.out.println("El tenia razon");
        //imprimir(vector);
    }

    public static void imprimir(String Vector[]) {
        for (int i = 0 ; i<Vector.length ; i++ )
            System.out.println("Vector[" + i +"] = " + Vector[i]);
    }
}

Escupe que hay un warning, pero cuando le das correr de todas maneras (o ignoras el warning en caso que invoques al compilador directamente), tenes esto en tiempo de ejecucion:
Código:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - variable vector might not have been initialized


Moraleja: asegurarse de que los parametros lleguen como esperas que lleguen, y aprender a manejar excepciones, pero esto para un futuro, porque nuestro amigo aca esta empezando por lo que parece.
En línea

Gallu

Desconectado Desconectado

Mensajes: 247



Ver Perfil
Re: comparacion de un string con char en java
« Respuesta #6 en: 23 Agosto 2011, 14:46 pm »

Pues por eso mismo,  desde el principio debe aprender buenos hábitos , con tu ejemplo a mi el copilador directamente no me genera el .class , si inicializo vector como null me da un NullPointerException por que accedemos a un índice inexistente, si inicializo vector a array de 10 pero no hago el new de sus elementos, entonces es cuando la comparación segura tiene sentido.

Código
  1. public class Main {
  2.  
  3.    /**
  4.      * @param args the command line arguments
  5.      */
  6.    public static void main(String[] args) {
  7.        // TODO code application logic here
  8.        String vector[]= new String[10];
  9.        /*vector[0] = "uno";
  10.         vector[1] = "dos";
  11.         vector[2] = "tres";
  12.         vector[3] = "cuatro";
  13.         vector[4] = "cinco";
  14.         vector[5] = "seis";*/
  15.        if ("f".equalsIgnoreCase(vector[0])) System.out.println("El tenia razon");
  16.        //imprimir(vector);
  17.    }
  18.  
  19.    public static void imprimir(String Vector[]) {
  20.        for (int i = 0 ; i<Vector.length ; i++ )
  21.            System.out.println("Vector[" + i +"] = " + Vector[i]);
  22.    }
  23. }
  24.  
En línea

Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: comparacion de un string con char en java
« Respuesta #7 en: 23 Agosto 2011, 14:51 pm »

Comparto, pero hay una cosa que te quiero preguntar, porque nunca vi hacer asi como practica recomendada, podrias citarme alguna fuente?
Ya que estamos, uno siempre aprende algo nuevo...
Segun tenia entendido, en estos casos, la comparacion RTL o LTR (right to left o left to right) si uno de los dos da null, ya se tira la excepcion.
Por cierto, tu codigo y el mio cambian en 2 numeros (6 a 10, y vec[1] por vec[0] ) donde el cambio realmente no es relevante, dado que podria bien ser, en cualquiera de los dos casos, que ambos sean (o no)nulos, o uno de los dos lo sea.
O no entendí lo que quisiste decir con el ejemplo..
En línea

Gallu

Desconectado Desconectado

Mensajes: 247



Ver Perfil
Re: comparacion de un string con char en java
« Respuesta #8 en: 23 Agosto 2011, 15:24 pm »

Comparto, pero hay una cosa que te quiero preguntar, porque nunca vi hacer asi como practica recomendada, podrias citarme alguna fuente?
He buscado en internet y no he encontrado ninguna recomendación de este tipo , yo la uso por que es politica de mi empresa (desde que llevo con ella , 4 años), en proyectos de tamaño medio/grande , estos detalles son los que hacen la diferencia .

Ya que estamos, uno siempre aprende algo nuevo...
Segun tenia entendido, en estos casos, la comparacion RTL o LTR (right to left o left to right) si uno de los dos da null, ya se tira la excepcion.

Con el método equals no sucede , no es lo mismo
Código
  1.    String usuario = "Carlos";
  2.    String user = null;
  3.  
  4.   if("Mario".equals(user)); ///bla bla bla
  5.  

que ..
Código
  1.    String usuario = "Carlos";
  2.    String user = null;
  3.  
  4.   //if("Mario".equals(user)); ///bla bla bla
  5.  
  6.    if(user.equals("Mario")) ;//bla bla bla
  7.  

En el segundo da NullPointerException,  obvia el detalle de la inicialización explícita a null , te puedes encontrar con un null recuperando un objeto de session por ejemplo, o un parámetro que no se ha pasado al servlet , etc , etc.

Por cierto, tu codigo y el mio cambian en 2 numeros (6 a 10, y vec[1] por vec[0] ) donde el cambio realmente no es relevante, dado que podria bien ser, en cualquiera de los dos casos, que ambos sean (o no)nulos, o uno de los dos lo sea.
O no entendí lo que quisiste decir con el ejemplo..

los cambios en realidad no tienen importancia , son debido a que estaba trasteando con tu código .


Por cierto he encontrado algún sitio donde se menciona este tema:
http://isagoksu.com/2009/development/java/how-to-avoid-nullpointerexceptions-npe/

en esta página busca
Citar
1. NPE on String

y en esta ..
http://en.wikibooks.org/wiki/Java_Programming/Preventing_NullPointerException

esta también
http://www.java-tips.org/java-se-tips/java.lang/a-small-tip-on-string-to-avoid-nullpointerexce.html

En fin , simplemente buscar NullPointerException prevent java y te saldrán algunas  de ellas.
Saludos.
« Última modificación: 23 Agosto 2011, 15:42 pm por Didacso » En línea

Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: comparacion de un string con char en java
« Respuesta #9 en: 23 Agosto 2011, 17:39 pm »

Jaja, si, es que no se, pense que me podias ahorrar la busqueda linkeandome a algun lado pertinente.
El comentario fue uno de esos que no se ven a menudo, que tienen implicaciones tecnicas importantes por mas simple que parezca, y por eso me llamo la atención..
De NotNull y Nullable sabia, lo vi en el SL-275.. Assert tambien esta en el manual, aunque se vio poco, los patrones vi algunos ademas del notado, como por ejemplo el patron singleton comprobado..

Estaba buscando mas que una explicacion de safar de los null (usualmente, siempre los controlo antes de que lleguen, y sino reniego un rato hasta encontrarlo) un manual de consejos practicos compiladitos para eso y otas areas..

Gracias por los enlaces, me pongo de paso a buscar tambien otros (ya capaz que esto vale para agregarlo en el tema que esta sticky de JAVA - ¿cuanta gente has visto que empieza y se pierde por NPE y cae a preguntar por el foro -y en el peor de los casos- sin siquiera querer mostrar codigo fuente?)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Comparación de cadenas (string)
Programación Visual Basic
el_lichal 4 2,402 Último mensaje 17 Noviembre 2005, 18:40 pm
por el_lichal
Char[] != String « 1 2 »
Programación General
Hendrix 19 9,582 Último mensaje 22 Agosto 2011, 03:54 am
por someRandomCode
[?] cambiar una comparacion de const char * a metodo string.compare
Programación C/C++
Drakomorh 2 3,482 Último mensaje 25 Mayo 2011, 18:58 pm
por Littlehorse
Problema con STRTok, Char y String [C++]
Programación C/C++
ZedGe 6 6,146 Último mensaje 27 Diciembre 2011, 20:08 pm
por ZedGe
Comparación de objetos string en Ruby.
Scripting
bigtio 0 1,827 Último mensaje 9 Febrero 2014, 07:28 am
por bigtio
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines