martes, 25 de noviembre de 2008

Operaciones matemáticas de potencia, raíz cuadrada y redondeo en Java

Además de las operaciones matemáticas básicas que ya conocemos como sumar, multiplicar, etc., es posible hacer otro tipo de cálculos más complejos.

Para ello se dispone de la clase Math en Java que nos ofrece una serie de métodos para operar con valores numéricos, cuya lista completa puedes ver aquí.

Algunos de los más comunes pueden ser:
  • Potencia (base elevado a exponente):
    • Math.pow(base, exponente);
    • Ejemplo: Math.pow(5,2);
      Equivale a 5 al cuadrado.
  • Raíz cuadrada:
    • Math.sqrt(radicando);
    • Ejemplo: Math.sqrt(9);
      Equivale a la raíz cuadrada de 9.
  • Redondeo:
    • Math.round(número);
    • Ejemplo1: Math.round(5.2);
      Equivale a 5
    • Ejemplo2: Math.round(5.7);
      Equivale a 6

Números aleatorios en Java

En Java, como en la mayoría de los lenguajes de programación, se pueden obtener números aleatorios, es decir, al azar. Para ello se dispone en este caso del método random() de la clase Math.

Este método genera un número aletorio de tipo double entre 0 y 1, por ejemplo 0.4150224193182078.

Se puede probar con:
System.out.println(Math.random());

Pero lo normal es que se desee obtener un número entero entre un valor mínimo y otro máximo. Por ejemplo, entre 1 y 6 para simular el lanzamiento de un dado.

Para ello se puede utilizar esta fórmula, en la que se le asigna ese número a la variable dado:
dado = (int)(Math.random()*6)+1;

Es decir, se multiplica por el valor máximo que se desea obtener, se convierte a entero y se le suma el valor mínimo.

De forma general se podría decir:
variable = (int)(Math.random()*numValores)+mínimo;

Programa para comprobar si un número es primo

Diagrama de flujo


Java
import java.util.Scanner;
public class EsPrimo
{
public static void main(String args[])
{
int num, i;
boolean primo;
Scanner teclado = new Scanner(System.in);

//Se espera que el usuario introduzca un número correcto
do
{
try
{
System.out.print("\nIntroduzca un número entero positivo: ");
num = teclado.nextInt();
}
catch(Exception e)
{
teclado.nextLine();
num = -1; //Se asigna un valor negativo para que continúe en el bucle
}
if(num<=0)
System.out.println("ERROR: no ha introducido un número entero positivo");
}while(num<=0);

if(num==1)
primo = true; //Caso especial
else
{
i = 2;
//Se comprueba si hay algún divisor a partir del 2
while (num%i!=0)
i++;
//Si el divisor encontrado es el mismo número, es primo
if (num==i)
primo=true;
else
primo=false;
}
System.out.print("\nEl número "+num);
if(!primo)
System.out.print(" no");
System.out.println(" es primo");
}
}

Herramientas para "embellecer" el código fuente de los programas

Los siguientes enlaces son herramientas para dar formato al código fuente de los programas realizados en Java y en algún otro lenguaje de programación. Con ello se puede conseguir mantener una correcta sangría e incluso colorear el código para colocarlo en un editor de textos o en una página web.
  • Code Beautifier Plus: Sangrado y coloreado del código, convirtiendo las tabulaciones en espacios. Para los lenguajes ActionScript, C# y Java. Tamaño y tipo de fuente seleccionables.
  • Lorin's code beautifier: Sangrado automático del código con tabuladores para lenguajes C++, C#, Java, y Javascript.
  • Code to HTML converter: Coloreado del código para Java, C, JavaScript, HTML, etc con posibilidad de subir el archivo.
  • Quick Highlighter: Coloreado de código para un gran número de lenguajes, con posibilidad de separar el formato en una hoja de estilo.
Más herramientas en ribosomatic.

lunes, 24 de noviembre de 2008

Operaciones básicas con cadenas de caracteres en Java

  • cadena.charAt(pos): Devuelve el carácter que se encuentra en la posición pos que se indica como parámetro, dentro de cadena. El primer carácter de la cadena corresponde a la posición 0.
    • Ejemplo: "hola".charAt(1) equivale a 'o'.

  • cadena.compareTo(otraCadena): Compara cadena con otraCadena y devuelve:
    • 0: si son iguales.
    • >0: si cadena es mayor que otraCadena.
    • <0: si cadena es menor que otraCadena.

  • cadena.compareToIgnoreCase(otraCadena): Hace lo mismo que compareTo pero sin tener en cuenta las diferencias de mayúsculas y minúsculas.

  • cadena.concat(otraCadena): Concatena otraCadena detrás de cadena.
    • Ejemplo "cad".concat("ena") equivale a "cadena".

  • cadena.equals(otraCadena): Devuelve true si cadena es igual que otraCadena y false en caso contrario.

  • cadena.equalsIgnoreCase(otraCadena): Hace lo mismo que equals pero sin tener en cuenta las diferencias de mayúsculas y minúsculas.

  • cadena.length(): Devuelve el número de caracteres que forman la cadena.

  • cadena.replace(antChar, nuevoChar): Sustituye cada aparición del carácter antChar por nuevoChar en la cadena.

  • cadena.substring(posInicio, posFin): Devuelve una subcadena de cadena, formado por los caracteres que hay desde la posición posInicio hasta posFin-1.
    • Ejemplo: "hamburguesa".substring(4, 8) devuelve "urgu".

  • cadena.toLowerCase(): Convierte la cadena a minúsculas.

  • cadena.toUpperCase(): Convierte la cadena a mayúsculas.

  • cadena.valueOf(número): Convierte el valor numérico de número a una cadena de caracteres.
Todos los métodos de la clase String los puedes encontrar en la API de Java.

viernes, 21 de noviembre de 2008

Ordenar los nombres de dos personas (Java)

import java.util.Scanner;
public class Ejercicio5_6
{
public static void main(String args[])
{
String per1Ape1, per1Ape2, per1Nom;
String per2Ape1, per2Ape2, per2Nom;
Scanner teclado = new Scanner(System.in);

System.out.println("Datos de la primera persona");
System.out.print("Primer apellido: ");
per1Ape1 = teclado.nextLine();
System.out.print("Segundo apellido: ");
per1Ape2 = teclado.nextLine();
System.out.print("Nombre: ");
per1Nom = teclado.nextLine();

System.out.println("\nDatos de la segunda persona");
System.out.print("Primer apellido: ");
per2Ape1 = teclado.nextLine();
System.out.print("Segundo apellido: ");
per2Ape2 = teclado.nextLine();
System.out.print("Nombre: ");
per2Nom = teclado.nextLine();

if(per1Ape1.compareToIgnoreCase(per2Ape1)<0 ||
(per1Ape1.compareToIgnoreCase(per2Ape1)==0 && per1Ape2.compareToIgnoreCase(per2Ape2)<0) ||
(per1Ape1.compareToIgnoreCase(per2Ape1)==0 && per1Ape2.compareToIgnoreCase(per2Ape2)==0 && per1Nom.compareToIgnoreCase(per2Nom)<0))
{
System.out.println("1: "+per1Ape1+" "+per1Ape2+", "+per1Nom);
System.out.println("2: "+per2Ape1+" "+per2Ape2+", "+per2Nom);
}
else
{
System.out.println("1: "+per2Ape1+" "+per2Ape2+", "+per2Nom);
System.out.println("2: "+per1Ape1+" "+per1Ape2+", "+per1Nom);
}
}
}

 

Contador de visitas