Hola necesito ayuda para aprender a programar

Hola saludos a todos

Soy un programador novato con deseos de aprender a programar (por supuesto en java), estoy utilizando como referencia el libro de deitel deitel, quisiera saber si alguien me puede a ayudar a aprender dandome cursos en linea, dandome tips, apoyo didactico o algun programa o metodo de aprendizaje, estare dandole duro por mi cuenta, pero siempre es bueno tener un respaldo experimentado para que aprenda a progaramar bien, actualmente estoy en el capitulo 7 arreglos tratando de resolver los distintos ejercicios.

Les agradecere todo el apoyo que me brinden gracias

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 Tolkien

Bienvenido

Te recomiendo utlizar un emulador para Java, BluJj (http://www.bluej.org/), yo lo utilice en mis tiempos de profesor para mis alumnos.
Es un poco ñoño cuando lo miras de lejos, pero si le pones atencion a los detalles, te sirve para entender como funciona la maquina virtual.
Te dejo la liga de otro libro, que te recomiendo de manera especial: no sirve de mucho que programes si no sabes modelar, y en este caso se usa UML: UML for Java Programmers (http://rapidshare.com/files/3788002/0131428489.zip). Para que vayas sacandole filo a tu ingles.

saludos

Ayuda

alguien me puede ayudar tengo que hacer un programa que cuente las vocales por Ej Adam Eva es decir me debe entregar a=3 e=1
yo tengo esto avanzado pero no logro la respuesta
package domApli;
import javax.swing.JOptionPane;
public class Vocales {
private static int i;

public static void main (String args[]) {
String nom;
int contaA=0, contaE=0, contaI=0, contaO=0, contaU=0;
nom=JOptionPane.showInputDialog("Ingresar nombtres y apellidos").trim().toLowerCase();
for(int i=0; i

Imagen de XinefPro

Hola =)

Te voi a dar una ayudita, recuerdo que una vez hice un programa parecido, lo que puedes hacer es recorrer todos los caracteres del String, tomas el primer caracter y te fijas si es una 'a', si es asi aumentas el contador contA, sino es 'a' te fijas si es 'e' y si es una 'e' aumentas el contador contaE, etc....., luego tomas el segundo caracter y haces lo mismo que para el primer caracter, luego tomas el siguiente caracter y asi sucesivamente .

Haces asi hasta que acabes de recorrer todo el String, ah porcierto para acceder a un caracter de un String puedes usar el metodo "charAt( int posicion )" el cual te devuelve el caracter de la posicion que le hayas enviado como parametro .

Eso es solo una forma de hacerlo, en si es la forma clasica, pero hay formas mas elegantes de resolver ese problema ... Weno ojala que te haya servido XD

Imagen de Jvan

Algo así sería:      

Algo así sería:

        public void procesaFrase(String frase){
                for(int i=0; i<frase.length(); i++){
                        if(frase.charAt(i)=='a'){
                                cantA++;
                        }
                        if(frase.charAt(i)=='e'){
                                cantE++;
                        }
                        if(frase.charAt(i)=='i'){
                                cantI++;
                        }
                        if(frase.charAt(i)=='o'){
                                cantO++;
                        }
                        if(frase.charAt(i)=='u'){
                                cantU++;
                        }
                }
                JOptionPane.showMessageDialog(null, "Frase: "+frase+"\nCantidad de A="+cantA+"\nCantidad de E="+cantE+"\nCantidad de I="+cantI+"\nCantidad de O="+cantO+"\nCantidad de U="+cantU);
        }

Antes de procesar la frase deberás usar el metodo .toLowerCase() para que no tengas problemas con las mayúsculas en los if.

Imagen de XinefPro

Otra forma para

hallar el numero de veces que se repite cada vocal es esta :

public static void procesarFrase( String cadena )
{
                cantA = cadena.length() - cadena.replace( "a", "" ).length();
                cantE = cadena.length() - cadena.replace( "e", "" ).length();
                cantI = cadena.length() - cadena.replace( "i", "" ).length();
                cantO = cadena.length() - cadena.replace( "o", "" ).length();
                cantU = cadena.length() - cadena.replace( "u", "" ).length();
                 
                System.out.println( "Cant. de A:" + cantA + "\nCant de E:" + cantE + "\nCant de I:" + cantI + "\nCant de O:" + cantO + "\nCantU:" + cantU );
}

PDT: Cuidado con las vocales con tildes

UNMSM - FISI

Imagen de ezamudio

Jvan

La solución de Jvan es mucho mejor, no usa tanta memoria. Si le pasas a tu método una cadena muy larga, se va a ocupar muchísima memoria en estar haciendo cadenas nuevas, cuando no tienes por qué modificar la cadena, solamente contar las vocales que contiene.

Sin embargo menciona que deberías usar toLowerCase() antes de pasar la cadena al método lo cual es un error de diseño en el método; si se requiere, entonces hay que llamarlo dentro del método. Pero no es realmente necesario, solamente se necesita agregar el OR a cada condición de vocal para compararla con la mayúscula, y de paso primero poner el caracter actual en una variable para no pedirlo tantas veces a la cadena:

char c = frase.charAt(i);
if (c == 'A' || c == 'a') {
  cantA++;
} else if (c == 'E' || c == 'e') {
  cantE++;
} //etc

Con eso se elimina la necesidad de crear una nueva cadena en minúsculas. Recuerden que las cadenas son inmutables y cualquier método de los de replace, toLowercase(), etc crea una nueva cadena, utilizando memoria en este caso de manera innecesaria.

Imagen de XinefPro

Es cierto que

el otro algoritmo es mejor, el algoritmo que puse que puse era para hacerle ver que hay muchas formas de resolver un problema, ah x cierto para el algoritmo de Jvan le añadiria solo una linea en el for :

           if( cadena.charAt( i ) % 2 == 0 )
                     continue;

Con lo cual se evita de hacer 5 comparaciones innecesarias en el 50% de los caracteres, esto se da ya que las vocales tienen como codigo ascci unos numeros impares, por lo tanto al hacer esa restriccion solo vas a comparar los caracteres cuyo codigo ASCII sean numeros impares.

Pero en si la mejora se ve si es que llamas una cantidad muy alta de veces a ese metodo en un programa, pero en tu caso es innecesario ya que es una tarea y tu la usaras un par de veces para comprobar si esta bien el codigo.

UNMSM - FISI