Duda sencilla en Java

Iniciado por Feedeex, 7 Marzo 2011, 23:20 PM

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

Feedeex

Hola a todos, recién hoy estoy comenzando con java y bueno, estoy probando mis primeros códigos pero me topé con un problema. A ver si pueden ayudarme:

class pruebajava {
   public static void main(String[]args) {
           String mensaje;
           String mensaje2;
           String nombre = "Normah";
           char palabra_clave = 'h';
           int nombre_cantidadLetras = nombre.length();
           mensaje = (nombre_cantidadLetras >= 7) ? nombre + " tiene 7 o más caractéres": nombre + " tiene menos de 7 caractéres";
           System.out.println(mensaje);
           mensaje2 = (nombre.equals(palabra_clave)) ? nombre + " posee la letra " + palabra_clave : nombre + " no posee la letra " + palabra_clave;
           System.out.println(mensaje2);
 }
}


La primera parte de ver si tiene 'x' cantidad de caracteres va bien. Ahora el problema está en el segundo condicional. Yo le indico que busque la palabra_clave (en este caso 'h') en el nombre (en este caso "Normah") y me dice que no existe. Ahora yo me pregunto, ¿por qué no existe si yo veo ahí que si está?.
Bien, ahora comprobé de la siguiente forma:

class pruebajava {
   public static void main(String[]args) {
           String mensaje;
           String mensaje2;
           String nombre = "Normah";
           char palabra_clave = 'h';
           int nombre_cantidadLetras = nombre.length();
           mensaje = (nombre_cantidadLetras >= 7) ? nombre + " tiene 7 o más caractéres": nombre + " tiene menos de 7 caractéres";
           System.out.println(mensaje);
           mensaje2 = (nombre.equals("Normah)) ? nombre + " posee Normah" : nombre + " no posee Normah";
           System.out.println(mensaje2);
 }
}


Es decir, comprobando el string completo devuelve bien el valor. Resumiendo:

¿No puedo comparar un String con un char utilizando equals()?. ¿Cómo se solucionaría?. Entiendan que soy novato en este lenguaje y que bueno, quiero sacarme las mayores dudas posibles.

PD: Utilizo Netbeans 6.9.1

Shell Root

Obvio, porque estas comparando la cadena completa es decir,
Código (java) [Seleccionar]
"Normah" != 'h'

Puedes hacer lo siguiente,
Código (java) [Seleccionar]
class PoC {
  public static void main(String[] args) {

    String sTexto = "Holah";
    String sTextoBuscado = "i";

    if(sTexto.indexOf(sTextoBuscado) > -1){
      System.out.println ("Si");
    }else{
      System.out.println ("No");
    }

  }
}

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Feedeex

Gracias. Es cierto, olvide lo del IndexOf() que acababa de aprender :-X. Por cierto una pregunta más:

En los videotutoriales que estoy mirando (de Jesús Conde, por cierto) siempre tanto él manualmente como Netbeans inician con:

class nombre {
  public static void main(String[] args) {


Lo de class según lo que entendí tiene que tener relacion alguna con el nombre del Package , aunque a mi siempre me devuelve Incorrect Package no se porque (me funciona de todos modos).
Y ahora lo que sigue, entiendo que es el "menú por donde comenzar" el programa, no comprendo que hace public/private y por que el void (aunque supongo que lo del void es porque se le va a pasar más de un valor de diferentes tipos :huh:). Y después (String[] args) me recuerda a funciones en donde pasamos parámetros, pero acá no..
A ver si me pueden ayudar este poquito más que intento comprender el código por completo. Gracias.

Debci

Cita de: Feedeex en  8 Marzo 2011, 00:23 AM
Gracias. Es cierto, olvide lo del IndexOf() que acababa de aprender :-X. Por cierto una pregunta más:

En los videotutoriales que estoy mirando (de Jesús Conde, por cierto) siempre tanto él manualmente como Netbeans inician con:

class nombre {
  public static void main(String[] args) {


Lo de class según lo que entendí tiene que tener relacion alguna con el nombre del Package , aunque a mi siempre me devuelve Incorrect Package no se porque (me funciona de todos modos).
Y ahora lo que sigue, entiendo que es el "menú por donde comenzar" el programa, no comprendo que hace public/private y por que el void (aunque supongo que lo del void es porque se le va a pasar más de un valor de diferentes tipos :huh:). Y después (String[] args) me recuerda a funciones en donde pasamos parámetros, pero acá no..
A ver si me pueden ayudar este poquito más que intento comprender el código por completo. Gracias.
Mira, de uno en uno.

Private y public se hace para que el intérprete no reserve tanta memoria, si no la vas a usar en un contexto externo pon private, así no se declara en todos los ámbitos y se aligera el programa.

void, es un tipo de dato, vacío o nulo en algún contexto, quiere decir que no devuelve ningún valor, si es int, tiene que devolver un int, si es float, un float...

String[] args son los parámetros de la función principal, los que recibe el programa por línea de comandos, para que me entiendas:

./miprogramajava argumento1

argumento1 estaría en el array, recuerda además que los primeros indices incluyen información relativa al contexto del programa.


Saludos ;)

Feedeex

Muchas gracias :D. Y por cierto, ¿static?. Estuve leyendo y entendí como que se declara así para compartir valores de una variable pero sinceramente no comprendo bien para que es (hoy lo vi, junto con final que tampoco lo entendí del todo, aunque creo que es para que esa variable no se mueva de esa clase)

Shell Root

Creo que final es para una variable constante, es decir, que sólo tendra ese valor durante la ejecución de la aplicación.
:http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_Java/La_palabra_reservada_final
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Valkyr

El atributo static y final (combinados juntos) sirve para declarar atributos constantes, y su inicialización se hace al declararla (aunque creo recordar que también deja inicializarla en el constructor).

Al definir un atributo como final estas diciendo al compilador que esa variable no va a cambiar su valor, por tanto debe inicializarse en el momento de la declaración o en el constructor (si no lo declaras en ninguno de estos dos sitios el compilador te informará del error). No se que entorno de desarrollo usarás, pero te recomiendo en gran medida Eclipse, a mi me ha funcionado muy bien y te informa de los errores sintácticos en el momento que estás escribiendo.

Espero haberte servido de ayuda, saludos.