Nuevo en el foro y nuevo en Java

Hola a todos:

Primero lo primero. Soy nuevo en este foro, les voy a decir la verdad y no es por hacer barba, pero ustedes son una referencia en los cursos de Java en mi Universidad (Tec de Monterrey). Aparecen como referencia en los planes escolares como fuente externa de consulta y ayuda. Felicidades.
El motivo de mi post es que necesito ayuda para poner varias condiciones en el segundo programa que desarrollo en mi vida, nada dificil eso si, aun no se ni lo más básico.
Lo que me pide la tarea en si ya lo termine, pero como todo buen programador (espero algun día llegar a serlo), quiero ir más allá de lo que me pide la tarea; es una fabrica de patinetas y me piden SOLAMENTE hacer un programa que me pida 2 datos, con uno de ellos se hace división entre 2 y con el otro entre 4, y el que salga MENOR va a ser el que determine el número de patinetas que se puedan construir.
Bueno, pues yo quiero que además de eso, el programa sea capaz de reconocer que si se introduce un 0 en cualquiera de los 2 valores, no se pueda contruir ni una sola patineta. Como no se nada de nada lo hice como yo crei que era, y obviamente no me salio, así que les pido ayuda para resolver esta cuestion, les dejo anexa una foto con el problema en si y los errores que me aparecen. Espero me puedan ayudar, y si alguien se apiada de mi, le ruego que me explique con peritas y manzanas, porque si usa terminos técnicos, puede que pueda resolver mi problema, pero entendere como lo hice. :D

Saludos

PD: Utilizo JCreator para escribir el código.

http://img22.imageshack.us/img22/1309/errornbv.jpg

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de cfpmx

Hola que tal, bienvenido al

Hola que tal, bienvenido al foro, pues sería mejor que pegues tu código por que la verdad, esa foto que has puesto es demasiado pequeña y no se aprecia muy bien. Recomendación: Copia y pega tu código en tus publicación entre las etiquetas  , así será mas fácil de copiar y pegar tu código para explicarte.

Bueno primero que nada, me parece (por que la imagen no se aprecia) que los errores que te marca el compilador es por que dentro de los if estás utilizando un operador de asignación "=", y lo que tu necesitas hacer es comparar dos valores lo cual lo haces con el operador de comparación "==" bueno, con esto eliminas esos errores de compilación.

Imagen de cfpmx

Ahora bien, resolviendo el

Ahora bien, resolviendo el problema en el cual te aventuras ir "más allá de las fronteras" de tus ejercicios (jajaja). Pues bien, el algoritmo quedaría así:

if( Tab == 0 || Rue == 0 )
{
     //Imprimes que no se puede hacer ninguna patineta.
}
else
{
     //Imprimes o codifica lo que quieres que haga tu programa en caso de que si se puedan hacer las patinetas
}

Cómo dices que prácticamente no sabes nada y que es tu segundo programa, te explico que dentro del if estamos utilizando el operador OR "||", el cual lo que hace es que al tener dos expresiones en este caso "Tab == 0" y "Rue == 0" si alguno de ellos es verdadero entonces el if será verdadero, si ninguno es verdadero entonces se ejecutará el else.

Otro detalle que observo en tu imagen es que tienes else sin código, entonces, si no necesitas que tu programa haga algo en caso de que la condición if no se cumpla, entonces no es necesario que pongas el else.

Espero haberte sido de ayuda, y si algo no entiendes, pues pregunta. Hasta pronto.

Muchas Gracias

Hola cfpmx:

Me has salvado amigo, ya hice funcionar el programa y corre de las mil maravillas, te dejo el codigo de mi segundo programa, y obviamente hago referencia a tu ayuda. Una última cosilla, si quisiera ponerle que en vez de cero sea <=0 ¿como le debo de hacer?

import javax.swing.JOptionPane;

public class Patinetas{

        public static void main(String[] args)
        {
                String Tablas, Ruedas;
                double Tab, Rue, Des;
               
                Tablas= JOptionPane.showInputDialog("Indica el número de tablas:");
                Ruedas= JOptionPane.showInputDialog("Indica el número de ruedas:");
                Tab= Double.parseDouble(Tablas);
                Rue= Double.parseDouble(Ruedas);
               
                Des= (Tab / 2) ;
                Des= (Rue / 4) ;
               
                if( Tab == 0 || Rue == 0 )
                {
                        JOptionPane.showMessageDialog(null, "No se puede hacer ninguna patineta");
                }else
                {
                                        if (Tab>Rue)
                {
                        JOptionPane.showMessageDialog(null, "El número de patinetas depende de las ruedas");
                }else
                {
                        JOptionPane.showMessageDialog(null, "El número de patinetas depende de las tablas");
                }
                }
        }
}
// Para el extra (Cuando se introduce 0 en cualquiera de los 2 valores) busque ayuda en <a href="http://javamexico.org" title="http://javamexico.org">http://javamexico.org</a> y recibí ayuda del usuario cfpmx

Saludos

Imagen de cfpmx

Hola Ramipithecus, Si

Hola Ramipithecus,

Si quisieras hacer una comparación dentro del if que sea menor o igual a cero pues simplemente lo escribes tal cual como lo hiciste "if( Tab <= 0 || Rue <= 0 )". Te copio y pego tu código con la modificación y compactándolo un poco mas:

  1. import javax.swing.JOptionPane;
  2.  
  3. public class Patinetas {
  4.  
  5.    public static void main(String[] args) {
  6.       String Tablas, Ruedas;
  7.       double Tab, Rue, Des;
  8.                
  9.       Tablas= JOptionPane.showInputDialog("Indica el número de tablas:");
  10.       Ruedas= JOptionPane.showInputDialog("Indica el número de ruedas:");
  11.       Tab= Double.parseDouble(Tablas);
  12.       Rue= Double.parseDouble(Ruedas);
  13.                
  14.       Des= (Tab / 2) ;
  15.       Des= (Rue / 4) ;
  16.                
  17.       if( Tab <= 0 || Rue <= 0 )
  18.          JOptionPane.showMessageDialog(null, "No se puede hacer ninguna patineta");
  19.  
  20.       else {
  21.          if (Tab>Rue)
  22.             JOptionPane.showMessageDialog(null, "El número de patinetas depende de las ruedas");
  23.          
  24.         else
  25.            JOptionPane.showMessageDialog(null, "El número de patinetas depende de las tablas");
  26.       }
  27.    }
  28. }
  29. // Para el extra (Cuando se introduce 0 en cualquiera de los 2 valores) busque ayuda en <a href="http://javamexico.org" title="http://javamexico.org">http://javamexico.org</a> y recibí ayuda del usuario cfpmx

Bueno, así debería quedar bien tu código cuando utilizas un if o un else y estos ejecutan sólamente UNA instrucción no necesitan los corchetes, al compilar marca un warning ya que tu variable "Des" nunca la utilizas así que también puedes borrarlas y creo que es todo. Gracias por las referencias y te paso un enlace sobre los operadores en Java.

Operadores (Es el primero)

De nuevo Gracias

Me ganaste a postear, ya iba a responder yo. Ya lo había logrado hacer, de hecho también logre que detectara cuando no son número y que no se puede hacer. Que raro con eso de las llaves y el Des. El JCreator no me tira ningun mensaje de error. Seguí tu consejo y elimine tantas llaves como pude, aunque un par (abertura y clausura) no los pude quitar porque me botaba que habia un else sin un if.. haha.. aqui te dejó mi version final de código, con más creditos para ti.

import javax.swing.JOptionPane;

public class Patinetas{

        public static void main(String[] args)
        {
                String Tablas, Ruedas;
                double Tab, Rue, Des;
               
                Tablas= JOptionPane.showInputDialog("Indica el número de tablas:");
                Ruedas= JOptionPane.showInputDialog("Indica el número de ruedas:");
               
        try{
                Tab= Double.parseDouble(Tablas);
                Rue= Double.parseDouble(Ruedas);
               
                if( Tab <= 0  ||  Rue <= 0 ){
                        Des= (Tab / 2);
                        Des= (Rue / 4);
                        JOptionPane.showMessageDialog(null, "No se puede hacer ninguna patineta, introduzca valores válidos (Números mayores que cero)");
                }else{
                if (Tab>Rue)
                        JOptionPane.showMessageDialog(null, "El número de patinetas depende de las ruedas");
                else{
                        JOptionPane.showMessageDialog(null, "El número de patinetas depende de las tablas");
                }
                }
                }catch(Exception e){
                        JOptionPane.showMessageDialog(null, "No coloques letras en los datos");
                }
        }
        }
// Para el extra (Cuando se introduce 0 en cualquiera de los 2 valores) busque ayuda en <a href="http://javamexico.org" title="http://javamexico.org">http://javamexico.org</a> y recibí ayuda del usuario cfpmx.
// El mismo usuario cfpmx me ha dado tips para compactar mi código (no usar tantas llaves en if y else)
// Para el error que se produce cuando se insertan letras, me base en la diapositiva de la primera clase

Saludos

Imagen de cfpmx

Hola que tal, Pues ya quedó

Hola que tal,

Pues ya quedó mejor tu código sólo unas observaciones:

Sobre el Des, no es un error, sino que es un warning o advertencia. Los warnings o advertencias compilan y se ejecutan bien ya que tu código sigue correctamente las reglas de sintaxis del lenguaje Java. Y de hecho te seguirá arrojando el warning por que no has eliminado la variable Des en la declaración double Tab, Rue, Des;, lo raro es que JCreator no te lo detecte.

Sobre los paréntesis, no te lanza ni error de compilación y tampoco es un warning, ya que poner paréntesis en los if o else cuando únicamente tienes UNA instrucción es OPCIONAL. En esos casos para mayor claridad en tu código, pues es preferible no ponerlos. Por ejemplo en tu segundo else puedes eliminar los paréntesis por que únicament tienes una instrucción.

Listo

Pues me di cuenta de cual era el error. Mi programa no hacia lo que me pidieron desde un principio, me faltaba un valor de double y hacer la comparación correspondiente, y ya pude eliminar las llaves que me hacian falta. Ahora si creo que puede correr sin problemas

import javax.swing.JOptionPane;

public class patin{

        public static void main(String[] args)
        {
                String Tablas, Ruedas;
                double Tab, Rue, Des, Per;
               
                Tablas= JOptionPane.showInputDialog("Indica el número de tablas:");
                Ruedas= JOptionPane.showInputDialog("Indica el número de ruedas:");
               
        try{
                Tab= Double.parseDouble(Tablas);
                Rue= Double.parseDouble(Ruedas);
               
                Des= (Tab / 2);
                Per= (Rue / 4);
                                       
                if( Tab <= 0  ||  Rue <= 0 )
                        JOptionPane.showMessageDialog(null, "Introduzca valores válidos (Números mayores que cero)");
                else{
                if (Des>Per)
                        JOptionPane.showMessageDialog(null, "El número de patinetas depende de las ruedas");
                else{
                        JOptionPane.showMessageDialog(null, "El número de patinetas depende de las tablas");
                }
                }
                }catch(Exception e){
                        JOptionPane.showMessageDialog(null, "No coloques letras en los datos");
                }
        }
        }

Saludos

Imagen de cfpmx

Pues parece que ya quedó

Pues parece que ya quedó entonces.

Imagen de ezamudio

Más vale tarde...

que nunca. Otra opción para tomar el número menor es Math.min() que toma dos parámetros y te devuelve el menor de los dos.

Otra recomendación es que no caches Exception; cacha las excepciones específicas que se puedan arrojar (puedes irte un poco genérico pero no a ese grado). Si hay varias excepciones en el bloque de código, puedes poner varios bloques de catch y en cada uno puedes hacer cosas distintas (manejar cada error como mejor se deba).

Ok

Gracias por los tips ezamudio, pero como te podrás dar cuenta, soy muy nuevo en esto.. a duras penas supe como poner un catch Exception... ahora usar más me es aún increiblemete dificil... la verdad es que mi catch me salio de churrazo y despues de 100 intentos haha.... más adelante tal vez usaré varios, no por ahora... pero recordare tu consejo.

Saludos

Imagen de benek

Herramientas

Hay herramientas que te facilitan ese trabajo... Por ejemplo si programas con Netbeans o con Eclipse al poner un código "susceptible" a alguna excepción te dan el tip de poner el try/catch por ti, además de que también te ayudan a poner las excepciones específicas para código que pusiste.

Salute.

Re: Herramientas

Rayos benek. Qué respuesta de tan mal gusto. Se supone que quieren aprender a programar en Java. Deberías recomendarle usar un buen editor mientras aprende el lenguaje, ¿no? :-P

Saludos

Javier Castañón

Imagen de benek

Eclipse/Netbeans

Eclipse/Netbeans son IDE's malos?

Ni modo que le recomiende leer toda la API de excepciones para que busque entre todas la que necesita, pero me queda la duda... Qué editor le recomiendas?

Imagen de ezamudio

whooooosh

Así sonó el chiste cuando pasó sobre tu cabeza, Benek...

Pues sí le deberías recomendar que lea toda la API de excepciones, porque ese tipo de jaladas preguntan en la certificación, no? por eso nunca me he certificado, se me hace tan inútil tener que saberse de memoria ese tipo de cosas, aprenderse todo java.util y cosas así, cuando cualquier IDE moderno te lo resuelve y aunque estuvieras usando vi tendrías a tu disposición todo el JavaDoc del API en linea o en tu compu...

Re: Eclipse/Netbeans

Eclipse/Netbeans son IDE's malos?

No sé, tu dime ;-)

El muchacho quiere aprender Java, opino que que no debería ser el IDE el que le corrija lo que aún no entiende.

Ni modo que le recomiende leer toda la API de excepciones para que busque entre todas la que necesita,

No hace falta, el compilador y un IDE indicarán cuál es la excepción que no se ha cachado. Lo indispensable sería conocer al menos la sintaxis del lenguaje y de qué se tratan las excepciones. No sería cuestión de JavaDoc ni de editores.

Qué editor le recomiendas?

Cualquiera, desde uno que coloreara la sintaxis hasta un IDE. Pero que no pierda de vista aprender el lenguaje y sus librerías más básicas primero. Los IDEs como Eclipse y NetBeans no dejan de ser complicados para un novato, muchos menús con muchas opciones, vistas, ventanas, etc. Otros IDEs no son usados realmente por desarrolladores por falta de características. Mientras da sus primeros pasos no le haría daño usar un editor con coloración de texto y aprender a compilar desde la línea de comandos. Lo peor que le podría pasar sería que aprendiera qué es eso del classpath :-)

En el futuro, ya en sus proyectos reales podrá discernir la opción más adecuada contenida en un foquito o globo con sugerencias.

Saludos

Javier Castañón

Re: whooooosh

En lo personal, si hiciera un examen de evaluación para entrar a trabajar como programador Java, muy probablemente no lo pasaría sin tener el JavaDoc a la mano. Curiosamente me parece que para aprobar un examen de certificación no hay que memorizar tantas cosas, en realidad con suficiente experiencia es muy factible pasar sin estudiar demasiado.

Saludos

Javier Castañón

Imagen de ezamudio

habrá cambiado?

Hace unos añitos empecé a leer una guía para certificación y la dejé porque casi todas las preguntas eran de tipo "qué método de InputStream sirve para leer un solo byte" o "qué devuelve el método OutputStream.write(byte[])", etc...

En ese curso que te comenté de PSP que tomé, no nos dejaban usar Eclipse, porque "compila todo solito" y como una parte del PSP es tomar el tiempo que tarda todo en compilar, no lo ibamos a poder medir. ouch.

Pero me desvío del tema. OK, puede ser bueno que al principio uses un editor que nada más te coloree la sintaxis y te ayude a indentar, algo como jEdit... sirve que tienes que ver cómo compilar el código, dónde acomodar las clases según sus paquetes (qué son los paquetes), y hasta le puedes echar un ojo a Ant el día que te hartes de tener que hacer tus scripts para compilar.

Imagen de benek

Al contrario

No creo que haya cambiado... Yo también sabía que preguntaban por ejemplo sobre las 49 palabras reservadas de Java... y eso no lo sabe con exactitud un desarrollador promedio por más experiencia que tenga, por lo que tendrá que estudiar eso y varias cosas más que la certificación considera pero casi no se usan en la práctica.

En el caso contrario, hay muchos recién egresados que obtienen su certificación, pero al entrar en el terreno laboral de Java se encuentran con la dificultad de que lo estudiado para la certificación es un porcentaje mínimo de lo que ocupará laboralmente.

Imagen de ezamudio

exacto! es como los que

exacto! es como los que sacan 10 en la universidad y a la hora de entrar a chambear no saben nada de nada porque resulta que nunca te enseñan en la escuela nada de administración de proyectos (real), trabajar en equipo con sistemas de control de versiones, frameworks de software libre más populares, metodologías más recientes, etc etc. Al menos yo recuerdo que muchas de esas cosas las aprendí en la chamba y no en la uni, espero que los planes de estudio se vayan actualizando para incluir ese tipo de enseñanzas, aunque por otro lado está el argumento de que eso es muy técnico y en la universidad deberías ver cosas más... universales...

Pero lo cierto es que sí me he topado con varios programadores certificados en distintas cosas y resulta que no quieren trabajar con nada más. Cuando lo único que sabes usar es un martillo, a todo le ves cara de clavo.

re: Al contrario

hay muchos recién egresados que obtienen su certificación

Por eso, si hasta un chavo universitario sin experiencia laboral saca una certificación Java, entonces no debe ser mucho problema para un programador experimentado pasar el mismo examen. Lo digo por experiencia:

"Chavos, la empresa va a entrar a una licitación que requiere 'n' programadores certificados. Tienen 'x' tiempo para preparar su examen y aprobarlo."

Invariablemente lo aprueban con un poco de estudio. ¿Se les va a aumentar el sueldo? Seguro que no. ¿Serán más solicitados en el mercado laboral? Lo dudo. ¿Tuvieron que memorizar ciertas cosas que el compilador/IDE normalmente resuelve, o que se consultan normalmente en la documentación? Seguro que sí, pero no he observado efectos colaterales nocivos ni duraderos al respecto :-)

Saludos

Javier Castañón

re: exacto!

Bueno, yo creo que salgan de la universidad sin experiencia pero con certificación, no puede ser peor que salgan de la universidad sin experiencia y *sin* certificación. De hecho, me está gustando la idea de la certificación: si la obtienen aprueban la materia. No es mucho pedir. ¿O si?

Saludos

Javier Castañón