Autor
|
Tema: comparacion de un string con char en java (Leído 13,177 veces)
|
sauce19
Desconectado
Mensajes: 7
|
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: System. out. println("Ingrese sexo (M)/(F):\n"); vec[4]=en.readLine();
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: if(vec[4]=='f'){ fe++;} if (vec[4]=='m'){ ma++;}
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
Mensajes: 250
|
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 : 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
Mensajes: 7
|
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
Mensajes: 250
|
A ver si te entiendo... Vos lo que queres es que por pantalla aparezca algo como 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: 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: 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
Mensajes: 247
|
Por costumbre es siempre mejor aplicar el operador de comparación sobre la constante ejm. if ("f".equalsIgnoreCase(vec[4])
en lugar de if (vec[4].equalsIgnoreCase("f")) fe++;
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
Mensajes: 250
|
Igualmente si el objeto no esta inicializado, van a haber problemas, independientemente de que lado encares la comprobacion, por ejemplo: 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: 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
Mensajes: 247
|
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. public class Main { /** * @param args the command line arguments */ public static void main (String[] args ) { // TODO code application logic here /*vector[0] = "uno"; vector[1] = "dos"; vector[2] = "tres"; vector[3] = "cuatro"; vector[4] = "cinco"; vector[5] = "seis";*/ if ("f". equalsIgnoreCase(vector [0])) System. out. println("El tenia razon"); //imprimir(vector); } for (int i = 0 ; i<Vector.length ; i++ ) } }
|
|
|
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
Mensajes: 250
|
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
Mensajes: 247
|
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 if("Mario".equals(user)); ///bla bla bla
que .. //if("Mario".equals(user)); ///bla bla bla if(user.equals("Mario")) ;//bla bla bla
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 1. NPE on String y en esta .. http://en.wikibooks.org/wiki/Java_Programming/Preventing_NullPointerExceptionesta también http://www.java-tips.org/java-se-tips/java.lang/a-small-tip-on-string-to-avoid-nullpointerexce.htmlEn 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
Mensajes: 250
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Comparación de cadenas (string)
Programación Visual Basic
|
el_lichal
|
4
|
2,637
|
17 Noviembre 2005, 18:40 pm
por el_lichal
|
|
|
Char[] != String
« 1 2 »
Programación General
|
Hendrix
|
19
|
10,785
|
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,868
|
25 Mayo 2011, 18:58 pm
por Littlehorse
|
|
|
Problema con STRTok, Char y String [C++]
Programación C/C++
|
ZedGe
|
6
|
6,508
|
27 Diciembre 2011, 20:08 pm
por ZedGe
|
|
|
Comparación de objetos string en Ruby.
Scripting
|
bigtio
|
0
|
2,091
|
9 Febrero 2014, 07:28 am
por bigtio
|
|