Leer desde teclado en Java??

Publicado en 'Programación' por situation, 2 Ago 2013.





  1. situation

    situation Suspendido

    Registro:
    4 Jul 2011
    Mensajes:
    318
    Likes:
    8




    Estoy resolviendo problemas en Java para así ir aprendiendo y desarrollando mi lógica.. y pues como les comenté solo sé lo básico hasta if-else,while,do-while, switch-case, continue y break.

    Tengo dudas sobre estos dos problemas



    A que se refieren con cuadrados? raiz cuadrada? y que significa desde teclado?

    Y de paso aver si me ayudan a resolver, porque me he confundido un poco.

    :hi:
     


  2. omgdinosaur

    omgdinosaur Miembro maestro

    Registro:
    9 Jun 2011
    Mensajes:
    659
    Likes:
    112
    el cuadrado de un numero 2^2 = 4 ; 3^2 = 9

    o mejor dicho haces un for que arranque en i = 1 que imprima i*i
    si aun no has visto que es un for te recomiendo le des una ojeada

    leer desde teclado quiere decir que te permita escribir el numero con el teclado
     
  3. dsk

    dsk Miembro frecuente

    Registro:
    24 May 2011
    Mensajes:
    195
    Likes:
    6
    No se java pero lo que tienes que hacer es un ciclo for:

    Código:
    for(i=1; i<=30; i++) {
          x = i*i;
          imprimir x;
    }
    y para lo segundo capturar el valor del numero en una variable, otra variable para la suma y un ciclo for:

    Código:
    int x = 30; //variable que captura el numero
    int y = 0; //variable que contendra el resultado de la suma
    for(i=x+1; i<=x+100; i++) {
        y = y + i;
    }
    imprimir y;
     
    Última edición: 2 Ago 2013
  4. situation

    situation Suspendido

    Registro:
    4 Jul 2011
    Mensajes:
    318
    Likes:
    8

    El primero lo hize solo.. antes de que respondieran y me salió pero de otra forma:

    Me podrías explicar ambos problemas.. el primero y el segundo por favor?
     
  5. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Hola que tal. Te sugiero seguir algún curso o tutorial, hay muchos por la Web. Los 2 problemas que planteas son súmamente sencillos, si conoces bucles, no deberías tener dificultad alguna en resolverlos.
    - El cuadrado de un número se refiere al resultado de elevarlo a la potencia 2, o lo que es lo mismo multiplicarlo por si mismo. En Java puedes aplicar Math.pow(elNumero, 2) o simplemente elNumero * elNumero.
    - En programación cuando se dice desde teclado, se refiere a que el usuario debe proporcionar algunos datos a la aplicación para que esta pueda procesarlos, y la forma más simple es a través del teclado.

    Te planteo una solución a tus 2 ejercicios, creo que con los comentarios ya no requiere explicación, pero si hay algo que no entiendes avisas y yo o algún forero te estará respondiendo.

    EJERCICIO 1
    Código:
    // Todo programa Java debe contener por lo menos una clase
    public class Cuadrados
    {
    	// El método main es el punto de entrada al programa
    	public static void main(String[] args)
    	{
    		// Declaramos una constante para indicar el lìmite inferior
    		final int LIM_INFEROR = 1;
    	
    		// Declaramos una constante para indicar el lìmite superior
    		final int LIM_SUPERIOR = 30;
    	
    		// Pintamos cabecera
    		System.out.println("Numero\tCuadrado\n----------------");
    		
    		// Iteramos desde  LIM_INFEROR hasta LIM_SUPERIOR
    		for (int i = LIM_INFEROR; i < LIM_SUPERIOR; ++i)
    			// Calculamos e imprimos el cuadrado de "i" en cada iteración
    			System.out.printf("%6d\t%8d\n", i, i * i);
    	}
    }
    EJERCICIO 2
    Código:
    import javax.swing.JOptionPane;
    import java.util.Scanner;
    
    // Clase principal
    public class CienSiguientes
    {
    	// Método de entrada al programa
    	public static void main(String[] args)
    	{
    		// Para leer desde teclado podemos usar la clase Scanner (disponible desde Java 5)
    		Scanner teclado = new Scanner(System.in);
    		
    		// Declaramos una variable para almacenar el valor a solicitar al usuario (cadena)
    		String cadena;
    	
    		// Declaramos una variable para almacenar el valor convertido a numérico
    		int numero = 0;
    		
    		// Declaramos una variable para validar ingreso correcto
    		boolean correcto;
    		
    		do
    		{
    			// Bloque para capturar error de conversión
    			try 
    			{
    				System.out.print("\nIngrese un numero entero: ");
    				cadena = teclado.nextLine();
    				
    				// Realizamos la conversiòn
    				numero = Integer.parseInt(cadena);
    				
    				correcto = true;
    			}
    			catch (NumberFormatException ex)
    			{
    				JOptionPane.showMessageDialog(null, "Error de formato\n" + ex.toString());
    				correcto = false;
    			}
    			
    		} while (!correcto);
    		
    		// Hasta aquí se ha ingresado un valor válido, procedemos a iterar
    		
    		// Declaramos una variable para acumular la suma en cada iteración
    		int suma = 0;	// Es importante inicializarla
    		
    		
    		System.out.println("\nLos numeros son:");
    		
    		// Aplicamos while
    		int i = 1;
    		while (i <= 100)
    		{
    			System.out.printf("%d", numero + i);
    			suma += numero + i;
    			
    			if (i < 100) System.out.print(" + ");
    			
    			++i;
    		}
    			
    		System.out.println("\n\nLa suma es: " + suma);
    	}
    }
    En Java es necesario que los nombres de las clases públicas tengan el mismo nombre que el archivo que las contiene.

    Saludos.
     
    A situation le gustó este mensaje.
  6. situation

    situation Suspendido

    Registro:
    4 Jul 2011
    Mensajes:
    318
    Likes:
    8
    Eres un capo!!!
    Yo lo hize con "Math.pow()" y con una sintaxis básica nomás...

    Me podrías explicar que significa FINAL, "LIM_INFEROR", "LIM_SUPERIOR", Integer.parseInt, teclado.nextLine(), catch (NumberFormatException ex), JOptionPane.showMessageDialog(null, "Error de formato\n" + ex.toString()), try-catch y esos signos que has puesto: (%d%t).

    que significa "iterar" y esas cosas??Yo estoy siguiendo videos de un usuario de Youtube.. y nunca he visto esas cosas :(
     
    Última edición: 3 Ago 2013
  7. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Hola. En realidad no veo Java hace varios años ya que últimamente programo en C#. Vamos a ver si me acuerdo algo de teoría, si me equivoco alguien ya me corregirá XD.

    final es una palabra clave que abarca varios contextos y por lo que general significa que un objeto o variable sólo se puede definir o inicializar una vez: Se aplica a variables de instancia, es decir, aquellas variables que tienen ámbito de clase (Por aquí ya nos desviaríamos a temas más avanzados, tendrías que leer e investigar un poco más), Tambien se aplica a clases para indicar que dicha clase no se puede heredar, es decir no puede tener subclases; Se aplica a métodos para indicar que un método no se puede reescribir en una subclase y por último se aplica a variables locales (como en el primer ejemplo), las variables final sólo se pueden incializar una vez.

    En programación es muy común trabajar con tipo de datos numéricos para realizar cálculos, no es posible realizar cálculos con variables de cadena (String). Si tenemos un valor entero o real, almacenado en una variable de cadena y necesitamos realizar un cálculo con dicho valor, necesariamente debemos castearlo (convertirlo) en un tipo adecuado: En el ejemplo 2, el método nextLine() de la clase Scanner, devuelve una linea como cadena desde un flujo, en nuestro caso desde el flujo de entrada Estándar que se corresponde con el teclado y como el programa necesita tratar ese valor como un valor numérico entero, es necesario realizar el proceso de conversión, y esto se consigue con ayuda de la clase Integer y su método estático parseInt. Cabe mencionar que de manera análoga existen otros tipo numéricos como float, double y sus respectivas "clases conversoras" Float y Double con sus respectivos método parseFloat y parseDouble respectivamente.

    Los programas deben ser tolerantes a fallos, ya sea que estos fallos sean provocados por el usuario o por el mismo sistema. El programa debe saber cómo tratar estos errores y reaccionar de alguna manera. En el ejemplo 2, el usuario interactúa con la aplicación, por tanto existe una enorme posibilidad que un usuario quiera juguetear con la misma, proporcionando datos incorrectos para ver qué ocurre, por ejemplo, en nuestro caso, el programa le indica que ingrese un número entero, pero el usuario curioso o despistado puede proporcionar datos de cadena o reales; el programa atrapa este error justo en el momento de la conversión. Para atrapar un error, muchos lenguajes POO utilizan bloques try ... catch
    Código:
    try
    {
    	// Aquí van las sentencias que pueden provocar un error de tipo TipoExcepcion (o subclase)
    }
    catch (TipoExcepcion ex)
    {
    	// Ingresa aquí si ocurrió error para su tratamiento
    }
    finally
    {
    	// Esto se ejecuta siempre ocurra o no un error, pero finally es opcional
    }
    JOptionPane es una clase de Java que permite visualizar cuadros de diálogo, que son ventanas modales para proporcionar información al usuario, en nuestro caso utilizamos el método estático showMessageDialog para mostrar un cuadro con un botón aceptar que al pincharlo, el diálogo se cierra. Existen varias sobrecargas para para cada método de esta clase, con la finalidad de mostrar diferentes características en los diálogos (sobrecarga significa que un método puede definirse varias veces con el mismo nombre, diferenciándose por el número de parámetros que tienen).

    printf es un método inspirado en la función del mismo nombre de Lenguaje C y está disponible a partir de la versión 5 de Java. Es un método muy flexible para visualizar datos formateados. Te sugiero echar un vistazo en la documentación de Java.
    Bueno creo que esto ya se hizo largo.

    Saludos.
     
    A situation le gustó este mensaje.
  8. situation

    situation Suspendido

    Registro:
    4 Jul 2011
    Mensajes:
    318
    Likes:
    8
    Excelente!
    Me podrías explicar para que sirve lo que pones en "%6d" y otros mas que no recuerdo. En dónde aprendiste Java ? por lo que veo profundizan bien, enseñan cosas que no he visto y por eso te pido la web o en dónde? por favor.

    :hi:
     
  9. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Hola.
    printf es un método que permite volcar datos sobre un dispositivo de salida, es decir ya sea la pantalla o un archivo de disco. La declaración general del método según la definición en la documentacion del API es la siguiente:

    public PrintStream printf(String format, Object... args)

    El primer parámetro indica la cadena de formato y el segundo es un VarArg (Argumento variable), esto último indica que pueden pasarse 0, 1, .. N argumentos. Los cuales pasan a reemplazar a los espedificadores de formato correspondientes en la cadena de formato. Los especificadores de formato son grupos de caracteres especiales que se utilizan para representar tipos de datos específicos. Por ejemplo:
    %d se corresponde con los enteros (base decimal)
    %f se corresponde con números flotantes (float, double)
    %c se corresponde con datos de caracter
    %s se corresponde con datos de cadena
    Creo que existen otros más pero esos son los más básicos.

    Te posteo un ejemplo de uso:
    Código:
    public class TestPrintf
    {
    	public static void main(String[] args)
    	{
    		// Sólo tiene especificador de formato, no tiene ningún argumento adicional
    		// ya que no hay ningún especificador de formato en la cadena
    		System.out.printf("\nEsto es una cadena de texto sin especificador de formato\n");
    		
    		int miEdad = 30;
    		
    		// Cadena de fomato y un argumento para reemplazar el especificador %d
    		System.out.printf("Mi edad es %d\n", miEdad);
    		
    		String miNombre = "Edinson Aldaz";
    		System.out.printf("Mi nombre es %s y mi edad es %d\n", miNombre, miEdad);
    		
    		// También podemos hacer algo así
    		System.out.printf("%s %s. Bienvenido!!\n", "Hola", miNombre);
    		
    		float pi = 3.14159f;	// Es necesario indicar que se trata de un flotante de precisión simple
    		
    		// Podemos indicar también la cantidad de posiciones decimales en números de punto flotante
    		System.out.printf("pi = %5.2f (un ancho de 5 y 2 decimales)\n", pi);
    		System.out.printf("pi = %7.3f (un ancho de 7 y 3 decimales)\n", pi);
    		System.out.printf("pi = %9.4f (un ancho de 9 y 4 decimales)\n", pi);
    		System.out.printf("pi = %11.5f (un ancho de 11 y 5 decimales)\n", pi);
    		
    		// Para lo anterior, es importante mencionar que cuando especificamos la cantidad de decimales
    		// en los números de punto flotante, se aplican las reglas de redondeo como para el segundo y 
    		// tercer valor de pi, si ejecutas el programa
    		
    		int codigo = 25;
    		
    		// También podemos aplicar formato para rellenar con ceros
    		System.out.printf("Codigo = %03d\n", codigo);
    		System.out.printf("Codigo = %04d\n", codigo);
    		System.out.printf("Codigo = %05d\n", codigo);
    		System.out.printf("Codigo = %06d\n", codigo);
    		System.out.printf("Codigo = %07d\n", codigo);
    		
    		double subTotal = 1852.30;
    		double igv = 333.414;
    		
    		// Incluso podemos justifcar a izquierda para cadenas con el signo (-)
    		System.out.printf("%-20s = %08.3f\n", "SubTotal", subTotal);
    		System.out.printf("%-20s = %08.3f\n", "Igv", igv);
    	}
    }
    Saludos.
     
    A situation le gustó este mensaje.
  10. situation

    situation Suspendido

    Registro:
    4 Jul 2011
    Mensajes:
    318
    Likes:
    8
    Perfecto.. entendi todo.
    Conoces alguna web, canal de youtube o libro donde profundizen todos los temas desde cero?? y muestren cosas que no muestran en youtube, como lo que me explicaste?? por favor en español.

    En dónde estudiaste??? crees que en CIBERTEC enseñen todo esto???

    Disculpa...
    He estado analizando la sintaxis del segundo problema y no entiedo muy bien al final cuando abres el while. Mi pregunta es.. por qué en el IF no se abre las llaves {} y aparte no entiendo todo esto:

    yo le puse las llaves y funciona normal.. pero por qué no las pusiste?
     
  11. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    En mi experiencia personal, primero empecé con Algoritmos y Estructuras de Datos con un libro de Joyanes Aguilar, luego aprendí Lenguaje C con un gran libro de Deitel & Deitel, luego Java también con Deitel y Javier Ceballos, finalmente C# con un libro de Javier Ceballos y otro libro de Deitel. Si quieres material que profundice bastante, la mejor vía son los libros grandes y voluminosos, cuyo número de páginas no baja de 1000. Estos tocan muchos temas que otros libros más pequeños pasan por alto. Por supuesto que no vas a leer el libro de principio a fin, tengo como 20 libros de estas características y ninguno lo he leído por completo. Lo ideal es tocar temas puntuales, saltar aquello que ya conoces o reforzarlo en todo caso e ir avanzando. Estos libros los puedes conseguir en Wilson, frente al Cesca . En la Web hay varios tutoriales, de momento te puedo linkear este. Hace un tiempo solía descargar libros completos en formato pdf desde esta Web aunque se debe lidiar un poco para encontrar enlaces que no estén rotos, prueba a ver.
    Es difícil que un instituto te profundice en la teoría, eso debes hacerlo por cuenta propia. Me imagino que en las universidades sí lo harán.

    Saludos y suerte en tu aprendizaje.

    Cuandos estructuras repetitivas como while/for o estructuras condicionales como if/else van a contener una sola sentencia en su interior, no se necesitan las llaves, son necesarias sólo cuando van a contener más de una linea. Ejemplos:
    Código:
    // Una sola sentencia, no requiere llave
    for (int i = 0; i < N; ++i)
    	System.out.println(i);
    	
    // Dos sentenciaas, las llaves son necesarias
    for (int j = 100; j > 0; --j) {
    	suma += j;
    	producto *= j;
    }
    
    // Una sola sentencia, no requiere llave
    if (cuenta > 0)
    	System.out.println("Elementos encontrados");
    	
    // if con una sentencia, no requiere llave, else si requiere
    if (centinela == -1)
    	System.out.println("Encontrados");
    else
    {
    	contar++;
    	leerCentinela();
    }
    Algunos consideran que es una buena práctica colocar siempre las llaves, aún tratándose de una sola sentencia, eso ya queda a criterio siempre y cuando se tenga muy claro lo que se está realizando.

    Saludos.
     
    A situation le gustó este mensaje.
  12. situation

    situation Suspendido

    Registro:
    4 Jul 2011
    Mensajes:
    318
    Likes:
    8
    Muchas gracias.
    Bro tengo un problema.. me cuesta resolver estos tipos de problemas y al parecer son bien faciles... hay un problema similiar al segundo.. solo que es multiplicacion y no es desde teclado... y no puedo hacerlo.. no se como hacerlo..

    qué me recomiendas?? qué me falta?? o empiezo con otro lenguaje? etc