Trabajar con Objetos Strings en JAVA:

Los caracteres especiales se imprimen en pantalla usando la siguiente forma:


Caracteres especiales


Salida en pantalla


\'


Comillas simples


\"

Comillas dobles


\\

Barra inclinada


\t

Tabulador


\b

Retroceso (Backspace)


\r

Retorno de Carro


\f

Salto de Linea


\n

Nueva Linea




Para realizar un ejemplo de estos elementos crearemos un nuevo programa llamado CaracteresEspeciales:



Al intentar colocar comillas dentro del mismo mensaje marca un error ya que no es posible colocar 4 comillas dobles, ya que solo se aceptan un para para cada string de salida.



Para solucionar esto usaremos la secuencia de comillas dobles que se presentó en la tabla anterior es decir en lugar de poner “ usaremos \” y veamos loa que sucede con el IDE de NetBeans 8.2



No se detecta error en el código por lo cual es mejor usar este tipo de códigos para mostrar secuencias especiales, y el resultados sera como esto:



Podemos incluir otros caracteres especiales de string incluyamos \n según la tabla presentada al inicio de este capítulo será:

Puedes probar los caracteres especiales para strings por tu cuenta prueba algunos de ellos según te imágenes como podrás usarlos.

Usemos el primer ejemplo de concatenación aplicando el signo ( + ) para unir 2 o más strings, en el ejemplo vemos que a pesar que se interrumpe el string este se ve como si fuere un solo texto.



Ahora usaremos la combinación de strings con números y caracteres en una sola secuencia, agreguemos al programa lo siguiente:

        String ecuacion = "E=mc2"; // formamos la variable ecuacion que es un string

        double vel_luz = 300000; // asignamos a la variable vel_luz tipo doble el valor 300000

        System.out.println("La ecuacion de Einstein "+ ecuacion + " considera que "

        + "la velocidad de la luz es de "+ vel_luz +" Km por segundo");

Observemos como se acomoda esta secuencia de strings y variables en el resultado de esto (debemos ser cuidadosos al asignar varibles de tipo string la declaracion debemos hacerla con mayusculas al comienzo de la declaración tipo String:




La concatenación tiene otras utilidades cuando queremos unir secuencia tras secuencia, tenemos un proceso de unión del mismo string con más secuencias:

Se puede simplificar este proceso con el operador += que se vio anteriormente, véase el ejemplo, en el mismo programa:



El manejo de strings se puede ampliar con una comparación entre ellos usando la instrucción equals, hagamos un ejemplo para apreciar mejor esto:



al proceso de comparación que realiza equals se le llama método, equals solo regresa true y false.

Otro método útil es el conocer la longitud del string con length(), este método no tiene argumentos por eso lleva un () al final, pero lleva como prefijo el objeto "respuesta", usaremos este para conocer la longitud de un string, aprovechando el objeto string de respuesta:


Usemos ahora una conversión que es útil al trabajar strings, y son toUperCase() que pasa el string a mayúsculas , y toLowerCase() que pasa el string a minúsculas:



Otro método que se usa en los strings es el de buscar strings en otro string, es el método indexOf(), este regresa la posición de un string dentro de otro, si no lo encuentra regresa el valor de -1.



Usa el ejemplo que hemos utilizado, y compara los resultados, ahora tu modifica el programa para realizar pruebas,  y modifícalo agregando o quita elementos, mejóralo.

el programa completo es el siguiente:

package caracteresespeciales;

/**
 *
 * @author Miguel
 */
public class CaracteresEspeciales {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        System.out.println("La programación es un\n \"Arte\" ");
        System.out.println(" \'La teoria del Big Bang esta más cerca de \n ser probada y corroborada "
                + "por las investigaciones en el \"CERN\" en Suiza\'");
//uso del signo + es para unir dos o mas strings como si fuera uno.
        String ecuacion = "E=mc2"; // formamos la variable ecuacion que es un string
        double vel_luz = 300000; // asignamos a la variable vel_luz tipo doble el valor 300000
        System.out.println("La ecuacion de Einstein "+ ecuacion + " considera que "
        + "la velocidad de la luz es de "+ vel_luz +" Km por segundo");
       
        String AgregarString = "";
        AgregarString = AgregarString + "Se pueden ir agregando ";
        AgregarString = AgregarString + "palabras al string inicial o concatenado ";
        AgregarString = AgregarString + "a la anterior ";
        System.out.println(AgregarString);
       
        String AgregarOtroString = "";
        AgregarOtroString += "Se pueden ir agregando ";
        AgregarOtroString += "palabras al string inicial o concatenado ";
        AgregarOtroString += "a la anterior, usando el operador += ";
        System.out.println(AgregarOtroString);
       
        String respuesta = "amarillo";
        String resultado = "verde";
        System.out.println("Has respondido que el color es "+respuesta+ "? ");
        System.out.println("Lo correcto es "+ resultado + " por lo que es " +respuesta.equals(resultado) );
       
        int tam = respuesta.length();
        System.out.println("La longitud del string "+respuesta+" es de : "+tam+" caracteres");
       
        String nombre = "Miguel Santos Montoya";
        String minusculas = nombre.toLowerCase();
        String mayusculas = nombre.toUpperCase();
        System.out.println("En misnusculas el nombre es asi : "+minusculas);
        System.out.println("En mayusculas el nombre es asi  : "+mayusculas);
       
        String texto = "\"Nunca pienso en el futuro. Llega demasiado pronto\"";
        int busca = texto.indexOf("futuro");
        System.out.println("El texto a revisar es: "+texto+" y lo que busco es :futuro y ");
        System.out.println("La posicion donde coincide es :"+busca);
       
    }
   
}

Toma de decisiones

El primer elemento para toma de decisiones es el condicionante if, este es para evaluar si la operación es verdera o falsa, este debe de comparar dos valores, expresiones para que regrese si es (true) verdadero (false) falso, y dependiendo de esto tome una acción determinada.

En Java disponemos de los operadores lógicos habituales en lenguajes de programación como son “es igual”, “es distinto”, menor, menor o igual, mayor, mayor o igual, and (y), or (o) y not (no). La sintaxis se basa en símbolos como veremos a continuación y cabe destacar que hay que prestar atención a no confundir (= =) (deben estar escritos una a continuación del otro) con este signo (=) porque implican distintas cosas.

Los operadores && y || se llaman operadores en cortocircuito porque si no se cumple la condición de un término no se evalúa el resto de la operación. Por ejemplo: (a == b && c != d && h >= k) tiene tres evaluaciones: la primera comprueba si la variable a es igual a b. Si no se cumple esta condición, el resultado de la expresión es falso y no se evalúan las otras dos condiciones posteriores.


En un caso como ( a < b || c != d || h <= k) se evalúa si a es menor que b. Si se cumple esta condición el resultado de la expresión es verdadero y no se evalúan las otras dos condiciones posteriores.


El operador ! recomendamos no usarlo hasta que se tenga una cierta destreza en programación. Una expresión como (!esVisible) devuelve false si (esVisible == true), o true si (esVisible == false). En general existen expresiones equivalentes que permiten evitar el uso de este operador cuando se desea.




OPERADOR

DESCRIPCIóN

==

Es igual

!=

Es distinto

<, <=, >, >=

Menor, menor o igual, mayor, mayor o igual

&&

Operador and (y)

||

Operador or (o)

!

Operador not (no)



ESTRUCTURA O ESQUEMA DE DECISION EN JAVA. IF ELSE , IF ELSE IF.

La instrucción if … else permite controlar qué procesos tienen lugar, típicamente en función del valor de una o varias variables, de un valor de cálculo o booleano, o de las decisiones del usuario. La sintaxis a emplear es:

/* Ejemplo Estructura IF -  */

if (condición) {   //los parentesis deben agrupar la condición.

        instrucciones

} else

{

  instrucciones

}

Esquemáticamente en forma de diagrama de flujo:



La cláusula else (no obligatoria) sirve para indicar instrucciones a realizar en caso de no cumplirse la condición. Java admite escribir un else y dejarlo vacío: else { }. El else vacío se interpreta como que contemplamos el caso pero no hacemos nada en respuesta a él. Un else vacío no tiene ningún efecto y en principio carece de utilidad, no obstante a veces es usado para remarcar que no se ejecuta ninguna acción cuando se alcanza esa situación.

No son obligatorias las llaves { } inmediatamente después del if pero, si son convenientes cuando realizamos varios if anidados.


Cuando se quieren evaluar distintas condiciones una detrás de otra, se usa la expresión else if { }. En este caso no se admite elseif todo junto como en otros lenguajes. De este modo, la evaluación que se produce es: si se cumple la primera condición, se ejecutan ciertas instrucciones; si no se cumple, comprobamos la segunda, tercera, cuarta… n condición. Si no se cumple ninguna de las condiciones, se ejecuta el else final en caso de existir.

Crearemos un nuevo proyecto que llamaremos condiciones y a continuacion haremos ejemplos, todos las explicaciones y códigos serán en el mismo proyecto, con el fin de comparar las diferentes estructuras.

Observemos lo siguiente:



Modifiquemos el anterior ejercicio incorporando en else una instrucción para saber cuando es falsa la expresion evaluada en if


Se presenta claramente que ha cambiado la respuesta de no presentar, a mostrar un resultado.

Realicen este ejercicio antes de proseguir, cambien las variables y los valores.

Declaracion IF con otra IF.

Comenzemos a declarar otra variable para este caso y una conicion que sea ahora como esta forma:



Ahora vemos que tenemos un if para comparar un valor "si es igual a", vease que es ( = = ) para relizar la comparación no confundir con ( = ) que es asignacion de valor a una variable, (puedes ver que otra diferncia hay con respecto al anterior ?)

Agregemos otro if ... else




La pregunta si no necesito el else entonces los puedeo omitir ?

si realizo unos comentaros en la sección del else sucede esto:



Funciono ! porque si ya hemos establecidos que necesitamos el else, comenta esto.

Modifiquemos una vez mas el codigo:



Hemos colocado un mensaje en la sección de else y ve como ha cambiado la respuesta.

Comenta esto

Incluiremos algo más elaborado usando otra variable que llamaremos puntuacion_2 y agregemos una variable char.

según el código que se presenta aquí, como puedes definir lo que está sucediendo:



Modifiquemos el código para que el resultado sea cuando la condición sea verdadera.


Con este ejemplo demostramos como se aplica la estructura if – else…

 Pero podemos complicar más esto usando, la estructura:

if

else if

Esto significa que después del else podemos realizar otra condición para separar aún más los elementos para tomar decisiones después de que la primera condición sea falso.



Con esto que podemos concluir, que cuando la condición se competa else queda ignorado (else if) puesto que la condición es verdadera y no pasa a la fase de falso.

Que haríamos para que la condición if else fuera tomada, modifica el este último código para lograr este propósito.

Declaracion de switch.

La instrucción switch es una forma de expresión de un anidamiento múltiple de instrucciones if ... else. Su uso no puede considerarse, por tanto, estrictamente necesario, puesto que siempre podrá ser sustituida por el uso de if. No obstante, a veces nos resultará útil al introducir mayor claridad en el código.

La sintaxis será:

switch (expresión) {

         case valor1:

        instrucciones;

        break;

         case valor2:

        instrucciones;

        break;

        .

        .

        default:

        sentencias;

        break;

  }

realiza el codigo:



La variable curso_programacion es de tipo char (carácter), se define inicialmente y se asigna con el valor C, entonces cuando switch realiza la comparaciones a través de case, que cuando el valor de la variable coincide case efectúa lo que está en la sección, si por el contrario no coinciden con algo, la estructura tiene una final alternativa llamada default: donde realiza un acción cuando no hay valor que coincida con los case anteriores.

Esquemáticamente en forma de diagrama de flujo:



La cláusula default es opcional y representa las instrucciones que se ejecutarán en caso de que no se verifique ninguno de los casos evaluados. El último break dentro de un switch (en default si existe esta cláusula, o en el último caso evaluado si no existe default) también es opcional, pero lo incluiremos siempre para ser metódicos.


Switch solo se puede utilizar para evaluar ordinales (por ordinal entenderemos en general valores numéricos enteros o datos que se puedan asimilar a valores numéricos enteros). Por tanto no podemos evaluar cadenas (String) usando switch porque el compilador nos devolverá un error de tipo “found java.lang.String but expected int”. Sí se permite evaluar caracteres y lo que se denominan tipos enumerados, que veremos más adelante. Switch solo permite evaluar valores concretos de la expresión: no permite evaluar intervalos (pertenencia de la expresión a un intervalo o rango) ni expresiones compuestas.

Para el caso de valores numéricos:



Operador ternario

Calcular el mayor de dos números con Java es una cosa realmente sencilla con Java. Si preguntas a cualquier programador te dirá que puedes utilizar un simple if-then-else. Quedando un programa de pocas líneas.

if (x>y){

   mayor = x;}

else

  { mayor = y;}

existe un operador condicional ternario ?: que nos ayuda a realizar estas operaciones con mucho menor código.

La estructura del operador ternario ?: es la siguiente:

resultado = (condicion)?valor1:valor2;

Donde a la variable resultado recibirá el valor1 en el caso de que la condición sea true o bien el valor2 en el caso de que la condición sea false.
Así, si queremos calcular el mayor de dos números tendremos el siguiente código:

mayor=(x>y)?x:y;

El operador ternario ?: en programación es una forma de hacer operaciones condicionales con 3 parámetros. La forma básica de aplicarlo es la siguiente:

expresión1 ? expresión2 : expresión3

el símbolo (?) es para realizar la evaluación de la expresion1 y expresion2 y ( : ) es para asignar el resultado de las expresiones a la expresion 3, donde puede ser un mensaje u otra estructura.

Se evalúa la expresión1, y si su resultado es verdadero, entonces se evalúa y devuelve como resultado la expresión2. Si expresión1 es falso, se evalúa y devuelve expresión3.




A continuación el código del programa:

package condiciones;

/**
 *
 * @author Miguel
 */
public class Condiciones {

     /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       int puntuacion = 4; // el valor es 4
       if (puntuacion >=5) // compara contra un numero tambien puese ser contra una variable
                           // y regresa un valor booleano, donde se dirigen las posibles
                           // respuestas si es verdadero va a la siguiente linea y si es
                           // falso a la seccion del else (en caso contrario)
           System.out.println("Has logrado pasar la materia ");
       else
              {
                  System.out.println("Has reprobado... ");
        // es convemiente colocar estas llaves { y } despues del else para organizar
        // esto funciona cuando esta vacio else y no muestra nada de resultado
        // ya que si la toma de decicion es false (falsa) llega aqui.
              }
      
       int puntuacion_1 = 6;
       if (puntuacion_1 == 7){
           System.out.println("Has superado el minimo de calificacion ");
         }
       if (puntuacion_1 == 3){
           System.out.println("No es suficiente para acreditar ...");
       }    
        else
       {
           System.out.println("Tu calificacion :"+puntuacion_1);
       }
        int puntuacion_2 = 3;
        char grupo = 'C';
        if (puntuacion_2 >= 5){
            System.out.println("Has aprobado el curso ! ");
            System.out.println("Tu calificacion final es de :"+puntuacion_2);
            grupo = 'A';
        }
       
            else
        {
            System.out.println("formas parte del grupo :"+grupo);
        }
       
        int puntuacion_3 = 6;
        char grupo_1 = 'C';
       
        if (puntuacion_3 >= 5){
            System.out.println("Has aprobado el curso ! ");
            System.out.println("Tu calificacion final es de :"+puntuacion_3);
            grupo_1 = 'C';
        }
        else
        {
            System.out.println("formas parte del grupo :"+grupo);
        }
   
        int puntuacion_4 = 6;
        char grupo_2 = 'C';
       
        if (puntuacion_4 >= 5){
            System.out.println("Has aprobado el curso de lenguaje C++");
            System.out.println("Tu calificacion final es de :"+puntuacion_4);
            grupo_2 = 'A';
        }
       
        else if (grupo_2 == 'C'){
            System.out.println("Necesitas estudiar mas ");
        }
        else
        {
            System.out.println("Estas en el grupo "+grupo_2+" necesitas estudiar mas");
        }
       
        // Estructura switch
       
        char grupo_programacion = 'C';
       
        switch (grupo_programacion){
            case 'A':
                System.out.println("Curso de C++");
                break;
            case 'B':
                System.out.println("Curso de PHP");
                break;
            case 'C':
                System.out.println("Curso de Java");
                break;
            case 'D':
                System.out.println("Curso de JBuilder");
                break;
            default:
                System.out.println("No se definio el curso ....");
                break;
        }
        // Para los casos que se un valor numerico (estos valores deben ser enteros
        int grupo_programacion_1 = 2;
       
        switch (grupo_programacion_1){
            case 1:
                System.out.println("Curso de C++");
                break;
            case 2:
                System.out.println("Curso de PHP");
                break;
            case 3:
                System.out.println("Curso de Java");
                break;
            case 4:
                System.out.println("Curso de JBuilder");
                break;
            default:
                System.out.println("No se definio el curso ....");
                break;
        }
       
        //operador ternario
        int numero = 5;
                System.out.println(numero > 10 ? "El número es mayor a 10." : "El número es menor o igual a 10.");
   
   
    }
}


Realizaremos un programa con cierta utilidad, que llamaremos a este proyecto como Reloj:

incluiremos una forma adicional en Java, que importa bibliotecas de la siguiente manera:



java.util.*; nos indica que cargamos todos aquellas bibliotecas del java util (utilerías) particularmente nos interesa el de Calendar.

El elemento "ahora" es un objeto que se instancia (objeto que es preparado para recibir diversos valores, en forma que los valores son asignados bajo el mismo tipo de entorno.. "Objeto"), y usamos la biblioteca "Calendar" para asignar un valor al objeto instanciado.





El programa completo es el siguiente, escriban este código, compilen y ejecuten:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package reloj;

/**
 *
 * @author Miguel
 */
import java.util.*;

public class Reloj {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       Calendar ahora = Calendar.getInstance(); // llama a la instancia Calendar
       int hora = ahora.get(Calendar.HOUR_OF_DAY); //obtiene la hora del dia de  Calendar
       int minuto = ahora.get(Calendar.MINUTE); // obtiene minuto del dia de Calendar
       int mes = ahora.get(Calendar.MONTH);// obtiene el mes de Calendar comienza en 0 Enero en Java
       int dia = ahora.get(Calendar.DAY_OF_MONTH);//obtiene el dia del mes de Calendar
       int an = ahora.get(Calendar.YEAR);// obtiene el año de Calendar
      
       // mostrar saludo
      
       if (hora < 12){
           System.out.println("Buenos dias ");
       } else if (hora < 17){
           System.out.println("Buenas tardes ");
       }
       else{System.out.println("Buenas noches "); }
      
      
     // mensaje de hora
        System.out.print("La hora es ");
        System.out.print(" ");
        System.out.print( (hora > 12) ? (hora - 12): hora );// operador ternario
                                                                                    // para mostrar la hora en
                                                                                    // formato de 12 hrs.
        System.out.print(" horas ");
        // mostrando los minutos
        if (minuto != 0){
            System.out.print(minuto + " ");
            System.out.print( (minuto != 1)? " minutos " : " minuto ");
           }
        //mostrar el dia
        System.out.print(" del dia "+dia+" de ");
        // mostrar el mes el mes de inicio es 0 Para enero esto se debe que es un
        // arreglo cuando se inicia por lo que se inicia en 0
       
        switch (mes){
            case 0:
                System.out.print("Enero");
                break;
            case 1:
                System.out.print("Febrero");
                break;
            case 2:
                System.out.print("Marzo");
                break;
            case 3:
                System.out.print("Abril");
                break;
            case 4:
                System.out.print("Mayo");
                break;
            case 5:
                System.out.print("Junio");
                break;
            case 6:
                System.out.print("Julio");
                break;
            case 7:
                System.out.print("Agosto");
                break;
            case 8:
                System.out.print("Septiembre");
                break;
            case 9:
                System.out.print("Octubre");
                break;
            case 10:
                System.out.print("Noviembre");
                break;
            case 11:
                System.out.print("Diciembre");
                break;
          
            }
       
        // mostrar el año
       
        System.out.println(" del año "+ an);
    }
}

CICLOS WHILE, FOR DO .. WHILE

Antes de escribir un programa que dé solución a un problema, es imprescindible tener una comprensión detallada de todo el problema, además de una metodología cuidadosamente planeada para resolverlo. Al escribir un programa, es también esencial comprender los tipos de bloques de construcción disponibles, y emplear las técnicas comprobadas para construir programas.

Cualquier problema de computación puede resolverse ejecutando una serie de acciones en un orden específico.

Un procedimiento para resolver un problema en términos de

1. las acciones a ejecutar y

2. el orden en el que se ejecutan estas acciones

se conoce como un algoritmo.

Es común en un programa que las instrucciones se ejecuten una después de otra, en el orden en que están escritas. Este proceso se conoce como ejecución secuencial. Varias instrucciones en Java, que pronto veremos, permiten al programador especificar que la siguiente instrucción a ejecutarse tal vez no sea la siguiente en la secuencia. Esto se conoce como transferencia de control.

Java cuenta con tres instrucciones de repetición (también llamadas instrucciones de ciclo) que permiten a los programas ejecutar instrucciones en forma repetida, siempre y cuando una condición (llamada la condición de continuación del ciclo) siga siendo verdadera. Las instrucciones de repetición son whi1e, do.. .whi1e y for.

Las instrucciones while y for realizan la acción (o grupo de acciones) en sus cuerpos, cero o más veces; si en un principio la condición de continuación del ciclo es falsa, no se ejecutará la acción (o grupo de acciones).

La instrucción do ... while realiza la acción (o grupo de acciones) en su cuerpo, una o más veces.

Las palabras if , else, switch, whi1e, do y for son palabras clave en Java.

Comenzaremos con la instruccion while, creamos un nuevo proyecto Juego



Este programa genera un número aleatorio del 1 al 10. Para después solicitarnos un valor e ir adivinado el valor producido con datos que le escribirá el usuario.

La sentencia while es la más sencilla de las estructuras de iteración. La iteración continuará hasta que su condición sea falsa.

 while ( condición ) sentencia ;

La condición tiene que tomar un valor booleano (verdadero o falso). Si este valor es verdadero, se ejecutará la sentencia. Concluida esta acción se vuelve a evaluar la condición. Proseguirán los ciclos hasta que la condición no cambie a falso.

Esta es una estructura de iteración preprueba, es decir primero se evalúa la condición antes de realizar cualquier acción. Si de entrada la condición es falsa nunca ejecutará el conjunto de sentencias.

 while (numeroEscrito != numeroAleatorio) {    //inicio del while se realiza hasta que la condición sea falsa

        out.println();

        out.println("Intentalo de nuevo ..");

        out.println(" Escribe un nuemto entre 1 y 10 ");

        numeroEscrito = miScanner.nextInt();

        numeroIntentos++; //incrementa el valor por cada ciclo, el contador suma un 1 a cada vuelta

        } //termina el ciclo while

He aquí el programa completo:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package juego;

/**
 *
 * @author Miguel
 */
import static java.lang.System.out; // importamos bibliotecas lang, util.
import java.util.Scanner; // este es para tomar valores y pasarlos a las variables
import java.util.Random;  // es para generar los numeros aleatorios

public class Juego {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner miScanner = new Scanner(System.in); //instancia que define la forma de aceptar valores
        int numeroIntentos = 0; //inicializa el contador para los inentos de adivinar
        Random rnd = new Random(); //genera numero aleatorio
      
        int numeroAleatorio = (int)(rnd.nextDouble()*10 + 1);
        // es para generar un valor entre 1 y 10
        // la forma es (int) (rnd.nextDouble() * cantidad_números_rango + término_inicial_rango)
        // donde (int) al inicio, transforma un número decimal double en entero int, eliminando
        // la parte decimal.
        // para verificar esto usemos  System.out.println(numeroAleatorio);
        out.println("   ********** *************** ");// al usar java.lang.System.out reduce las
                                                                                    // instrucciones para mostrar salida de datos.
        out.println("Bienvenido al juego !Adivina el numero ");
        out.println("   ********** *************** ");
        out.println();
        out.println(" Escribe un numero del 1 al 10 ");
        int numeroEscrito = miScanner.nextInt();
        numeroIntentos++;
       
        while (numeroEscrito != numeroAleatorio) {             //inicio del while
        out.println();
        out.println("Intentalo de nuevo ..");
        out.println(" Escribe un nuemto entre 1 y 10 ");
        numeroEscrito = miScanner.nextInt();
        numeroIntentos++; //incrementa el valor por cada ciclo, el contador suma un 1 a cada vuelta
       
        } //termina el ciclo while
        out.print("Has ganado despues de ");
        out.println(numeroIntentos + " Intentos ");
              
    }
   
}

El resultado del programa esta aqui.

Uso del ciclo for

Un ciclo FOR es una estructura iterativa para ejecutar un mismo segmento de código una cantidad de veces dada; conociendo previamente un valor de inicio, un incremento y un valor final.

La Sintaxis empleada por el ciclo for es la siguiente:


for (valores de entrada ; condición de terminación ; iteración por ciclo)

Las tres partes del ciclo se encuentran separadas por ; (punto y coma)

La primer parte del ciclo especifica valores previo a su inicio.

La segunda parte indica la condición de terminación para el ciclo, la cual esta directamente relacionada con los valores iniciales.

Finalmente, la última parte especifica como serán manipulados los valores iniciales en cada iteración del ciclo.

Para demostrar la funcionalidad de FOR creamos un nuevo proyecto, que llamaremos CicloFor:




Realizaremos el siguiente programa para demostrar lo que hace el ciclo FOR:


y el programa:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ciclofor;

/**
 *
 * @author Miguel
 */
import static java.lang.System.out;

public class CicloFor {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       for (int contador =1;contador <=10;contador++)
       {
        out.println("El valor de la variable llamada contador es: "+contador+" . ");
       }
    // la variable contador se inicializa en 1
    // evalua la variable cuando el valor sea menor o igual a 10, el ciclo continua
    // mientras que esta condicion sea verdadera
    // se incrementa la variable en un 1.
    }
}

la sentencia for me permite repetir un ciclo n veces, en donde se debe determinar el valor inicial y cuantas veces se repetira.

sintaxis:

for(valor inicial;condición de termino;factor de incremento del valor inicial)

{

  //aquí va lo que se repetirá n veces de acuerdo a la condición de termino

}

Tambien se puede realizar un Bucle infinito: no hay control, entonces no se detiene

 for ( ;;){}


Veamos otro ejemplo de FOR:



Puedes explicar este programa.

Ahora crea un ciclo FOR como tu decidas

Hay que considerar estos elementos sobre for (mejorado)

Supongamos que tenemos un arreglo de enteros que deseamos presentar en pantalla, usando la orden for tradicional (en cuyo caso solo se realizará la primera linea de códigos que tengamos debajo de la sentencia), el código, podría quedar así:

 int[] Enteros = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

 for (int i = 0; i < 10; i ++)

     System.out.println (Enteros[i]);


Java ofrece una funcionalidad extra para la orden FOR, mediante la que se puede simplificar notablemente el codigo anterior, quedando así:

 int[] Enteros = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

 for (int Elemento : Enteros)

     System.out.println (Elemento);

En este caso, Elemento toma el valor de cada uno de los elementos de Enteros, permitiendo una navegación más simple, puesto que se evitan posibles errores derivados del uso de los arreglos en forma directa. También se puede usar esta forma, para estructuras más complejas como objetos de la clase Collection


 public void Presenta (Collection <Integer> Conjunto){

    for (Iterator <Integer> Elemento : Conjunto)

        System.out.println (Elemento)

 }

Ciclo do .. while

La sentencia de iteración do-while es de tipo posprueba. Primero realiza las acciones luego pregunta. La sintaxis es la siguiente:

  do sentencia while ( condición );

Observamos que es como un while pero al revés. Primeramente se ejecuta la sentencia y luego evalúa la condición. Si la expresión de la condición es verdadera vuelve a dar un ciclo. De lo contrario, termina. Esto nos garantiza que la sentencia se ejecute al menos una vez.

Resulta útil para los casos en donde tendremos que realizar ciertas acciones antes de verificar una condición.

Hagamos un  nuevo proyecto llamado Ciclodowhile para esto:





Al entrar a la instrucción do.. .while, la línea 24 imprime el valor de contador y la 27 incrementa a contador. Después, el programa evalúa la prueba de continuación de ciclo al final de1 mismo (línea 28). Si la condición es verdadera, el ciclo continúa a partir de la primera instrucción del cuerpo (línea 25). Si la condición es falsa, el ciclo termina y el programa continúa con la siguiente instrucción después del ciclo.



No es necesario utilizar llaves en la estructura de repetición do.. .whi le si sólo hay una instrucción en el cuerpo. Sin embargo, la mayoría de los programadores incluyen las llaves para evitar la confusión entre las instrucciones whi 1 e y do.. .whi 1 e. Por ejemplo:


while ( condición )


es por lo general la primera línea de una instrucción while. Una instrucción do... whi le sin llaves, alrededor de un cuerpo con una sola instrucción, aparece así:


do

{

    instruccion

}

while (condicion );


lo cual puede ser confuso. Un lector podría malinterpretar la última línea [whi1e ( condición ) ; ], como una instrucción while que contiene una instrucción vacía (el punto y coma por sí solo). Por ende, la instrucción do.. .whi1e con una instrucción en su cuerpo se escribe generalmente así:


do

{

instrucción

} while ( condición );

de forma grafica se puede ver asi:




En la linea 26 presenta un %d , esto es para cuando se quiere mostrar un numero entero se establece como %d. se usa con printf.

para tener la secuencia correcta de formatos vease lo siguiente:


Si queremos mostrar el número 12.3698 de tipo double con dos decimales:


System.out.printf("%.2f %n", 12.3698);


El primer % indica que en esa posición se va a escribir un valor. El valor a escribir se encuentra a continuación de las comillas.

.2 indica el número de decimales.

La f indica que el número es de tipo float o double. En la tabla que aparece más adelante podeis ver todos los carateres de conversión para todos los tipos de datos.

%n indica un salto de línea. Equivale a \n. Con printf podemos usar ambos para hacer un salto de línea.

La salida por pantalla es:

12,37

Comprobamos que printf realiza un redondeo para mostrar los decimales indicados.

Lo más común será que tengamos el valor en una variable, en ese caso si queremos escribir el valor de n con tres decimales:

double n = 1.25036;

System.out.printf("%.3f %n", n);

Salida:

1,250

Para mostrar el signo + en un número positivo:

double n = 1.25036;

System.out.printf("%+.3f %n", n);

Salida:

+1.250

Si el número a mostrar es un entero se utiliza el caracter d:

int x = 10;

System.out.printf("%d %n", x);

Salida:

10

Para mostrarlo con signo:

int x = 10;

System.out.printf("%+d %n", x);

Salida:

+10

Para mostrar varias variables pondremos tantos % como valores vamos a mostrar. Las variables se escriben a continuación de las comillas separadas por comas:


double n = 1.25036;

int x = 10;

System.out.printf("n = %.2f x = %d %n", n, x);

Salida:

n = 1,25 x = 10

Arreglos (Arrays)

Un array es un medio de guardar un conjunto de objetos de la misma clase.

Se accede a cada elemento individual del array mediante un número entero denominado índice.

0 es el índice del primer elemento y n-1 es el índice del último elemento, siendo n, la dimensión del array.

 Los arrays son objetos en Java y como tales vamos a ver los pasos que hemos de seguir para usarlos convenientemente :

Declarar y crear un array
Para declarar un array se escribe

tipo_de_dato[] nombre_del_array;

Para declarar un array de enteros escribimos

    int[] numeros;

Para crear un array de 4 número enteros escribimos

    numeros=new int[4];

La declaración y la creación del array se puede hacer en una misma línea.

    int[] numeros =new int[4];

Inicializar y usar los elementos del array


Para inicializar el array de 4 enteros escribimos


    numeros[0]=2;

    numeros[1]=-4;

    numeros[2]=15;

    numeros[3]=-25;

Se pueden inicializar en un bucle for como resultado de alguna operación


    for(int i=0; i<4; i++){

        numeros[i]=i*i+4;

    }

No necesitamos recordar el número de elementos del array, su miembro dato length nos proporciona la dimensión del array. Escribimos de forma equivalente


    for(int i=0; i<numeros.length; i++){

        numeros[i]=i*i+4;

    }

Los arrays se pueden declarar, crear e inicializar en una misma línea, del siguiente modo


    int[] numeros={2, -4, 15, -25};

    String[] nombres={"Juan", "José", "Miguel", "Antonio"};

Para imprimir a los elementos de array nombres  se escribe


    for(int i=0; i<nombres.length; i++){

        System.out.println(nombres[i]);

    }

Java verifica que el índice no sea mayor o igual que la dimensión del array, lo que facilita mucho el trabajo al programador.


Para crear un array de tres objetos de la clase Rectangulo se escribe


Declarar

    Rectangulo[] rectangulos;

Crear el array

    rectangulos=new Rectangulo[3];

Inicializar los elementos del array

    rectangulos[0]=new Rectangulo(10, 20, 30, 40);

    rectangulos[1]=new Rectangulo(30, 40);

    rectangulos[2]=new Rectangulo(50, 80);

O bien, en una sola línea


    Rectangulo[] rectangulos={new Rectangulo(10, 20, 30, 40), new Rectangulo(30, 40), new Rectangulo(50, 80)};

Usar el array

Para calcular y mostrar el área de los rectángulos escribimos


    for(int i=0; i<rectangulos.length; i++){

        System.out.println(rectangulos[i].calcularArea());

    }

Iniciemos la creación de arreglos (Arrays)



En este ejemplo vemos que podemos asignar los elementos del array, sin necesidad de establecer un número especifico de elementos a tomar por el array, pero el limite de esto es de 8 (0 - 7).



String [] marcasImpresoras ={"Brother","Canon","Dell","Epson","HP","Lexmark","Olivetti"}; // en esta linea se instancia el array

Hagamos otro ejemplo de arrays usando un truco, emplearemos un string para almacenar una frase y esta será acomodada en un array, donde se revisará si hay espacios en blanco y estos sean cambiados por un símbolo.



el código sera:

// ejemplo de array para retirar espacios de un string y substituirlo por algun caracter
     //en este string se recibe un mensaje
     String citaDiaria = "La educacion consiste en enseñar en no lo que deben pensar, sino a pensar por "
             + "si mismos";
     char [] convertir =citaDiaria.toCharArray();// transforma del string a caracteres .toCharArray
                                                 // se recibe como char en la variable convertir
      // se dice entonces que el string, pasa a caracteres uno a uno
     
      System.out.println("El string inicial es :"+citaDiaria);
     for (int dex =0; dex < convertir.length; dex++){ //en este ciclo revisa caracter a caracter
                                                      // que longitud tiene
         char current = convertir[dex];
         if (current != ' '){ // si la secuencia en un caracter se imprime en caso contrario
             System.out.print(current);
             }
             else // imprime un * en lugar del espacio
             {
              System.out.print('*');
                     }
                  }
              System.out.println();
}

Para crear un objeto arreglo, debemos especificar el tipo de cada elemento y el número de elementos que se requieren para el arreglo, como parte de una expresión para crear un arreglo que utiliza la palabra clave new. Dicha expresión devuelve una referencia que puede almacenarse en una variable tipo arreglo. La siguiente declaración y expresión crea un objeto arreglo, que contiene 12 elementos int y almacena la referencia del arreglo en la variable c:

int [ ] c = new int [ 12 ];

Al crear un arreglo, cada uno de sus elementos recibe un valor predeterminado: cero para los elementos numéricos de tipos primitivos, false para los elementos boolean y null para las referencias.

Cuando sólo se expone una variable en cada declaración, los corchetes se pueden colocar después del tipo o del nombre de la variable, como en:

String b[] = new String [ 100 ]; / / crea el arreglo b

String x[] = new String [ 27 ] ; / / crea el arreglo x

Ejemplo con nun array tipico


La sintaxis general de printf es:

printf (String de formato, Object … datos);

El String de formato es una cadena de caracteres que contiene:

- texto fijo que será mostrado tal cual

- especificadores de formato que determinan la forma en que se van mostrar los datos.

datos representa la información que se va a mostrar y sobre la que se aplica el formato. El número de datos que se pueden mostrar es variable.





La sintaxis para los especificadores de formato de printf es:

%[posición_dato$][indicador_de_formato][ancho][.precision]carácter_de_conversión

Los elementos entre corchetes son opcionales.

posición_dato: indica la posición del dato sobre el que se va aplicar el formato. El primero por la izquierda ocupa la posición 1.

indicador_de_formato: es el conjunto de caracteres que determina el formato de salida.

Ahora otro ejemplo de arrays:


Puedes explicar esto ?

Cálculo de los valores aguardar en un arreglo

La aplicación de la figura anterior crea un arreglo de 10 (0 - 9) elementos y asigna a cada elemento uno de los enteros. Después, la aplicación muestra el arreglo en formato tabular.

En el siguiente es la forma de asignar a cada uno de los arreglos un valor pero definiendo el tamaño total del arreglo.


Para obtener los datos almacenados en el array anterior :



en la presentación de datos de salida podrías hacer alguna operación para que se notaran estos datos, como que podrías hacer.

Para almacenar información en strings (serie de caracteres) hacemos lo siguiente:

Java Scanner para lectura de datos

Para utilizar Scanner en el programa tendremos que hacer lo siguiente:

1. Escribir el import

La clase Scanner se encuentra en el paquete java.util por lo tanto se debe incluir al inicio del programa la instrucción:

import java.util.Scanner;

2. Crear un objeto Scanner

Tenemos que crear un objeto de la clase Scanner asociado al dispositivo de entrada.

Si el dispositivo de entrada es el teclado escribiremos:

Scanner sc = new Scanner(System.in);

Se ha creado el objeto sc asociado al teclado representado por System.in

Una vez hecho esto podemos leer datos por teclado.

Ejemplos de lectura:

Para leer podemos usar el método nextXxx() donde Xxx indica en tipo, por ejemplo nextInt() para leer un entero, nextDouble() para leer un double, etc.

Ejemplo de lectura por teclado de un número entero:

int n;

System.out.print("Introduzca un número entero: ");

n = sc.nextInt();


Ejemplo de lectura de un número de tipo double:

double x;

System.out.print("Introduzca número de tipo double: ");

x = sc.nextDouble();


Ejemplo de lectura de una cadena de caracteres:

String s;

System.out.print("Introduzca texto: ");

s = sc.nextLine();





para recuperar y verificar que efectivamente se almacenaron estos datos (strings) estan en el arreglo:



Funcionamiento la clase Java Scanner.

De forma resumida podemos decir que cuando se introducen caracteres por teclado, el objeto Scanner toma toda la cadena introducida y la divide en elementos llamados tokens.

El carácter predeterminado que sirve de separador de tokens es el espacio en blanco.

Por ejemplo, si introducimos:

Esto es un ejemplo, lectura de datos.

Scanner divide la cadena en los siguientes tokens:

Esto
es
un
ejemplo,
lectura
de
datos.

Si introducimos la cadena:

12 20.001 Lucas w

Los tokens que se crean son:

12
20.001
Lucas
w

A continuación, utilizando los métodos que proporciona la clase Scanner se puede acceder a esos tokens y trabajar con ellos en el programa.
Ya hemos visto el método nextXxx(). Además la clase Scanner proporciona otros métodos, algunos de los métodos más usados son:


Se debe limpiar el buffer de entrada si se van a leer datos de tipo carácter a continuación de la lectura de datos numéricos.

La forma más sencilla de limpiar el buffer de entrada en Java es ejecutar la instrucción:

sc.nextLine();

  System.out.print("Introduzca un número entero: ");
           n = sc.nextInt();
           System.out.println("El cuadrado es: " + Math.pow(n,2));
           sc.nextLine(); // aqui se debe de colocar antes de solicitar el string
           System.out.print("Introduzca su nombre: ");      
           nombre = sc.nextLine();
           System.out.println("Hola " + nombre + "!!!");

Ordenar un array

Ahora tenemos que echar mano de la clase Arrays . Esta clase contiene un conjunto de métodos estáticos que nos permiten manipular los arrays. Uno de estos métodos es el método .sort() . Mediante el método .sort() conseguiremos ordenar un array en Java.

en primer lugar debemos importar la clase Array con:

import java.util.Array;

que también podríamos usar

import java.util.*;

con esto usamos todas las clases definidas en esta biblioteca, y sin necesidad de estar llamando una a una, pero estaríamos usando menoría de forma innecesaria ya que se cargan todas las clases de la biblioteca .util, podemos solo llamar las clases que sean necesarias.

por lo que solo imcluiremos las que sean utilizadas:


package arreglos;
// desde aqui se comienza a usar import
/**
 *
 * @author Miguel
 */
import java.util.Scanner; // este es para tomar valores y pasarlos a las variables
import java.util.Arrays; // solicita el objeto Arrays
//hasta este lugar

public class Arreglos {

Usando el último de los ejemplos de arreglos tenemos:



  Arrays.sort(arreglo4); 

Esta es usada para ordenar el arreglo, este solo se ordena de forma ascendente, no hay mas forma de hacerlo, si desea mostrar los datos de forma descendente deberá usar un ciclo for inverso comenzando del ultimo al primero.

  System.out.println(Arrays.toString(arreglo4)); // presenta el arreglo ordenado

Si hay duda que sea asi mostramos como se presenta el arreglo



Esta forma de ordenar usa mucha memoria en la computadora, es conveniente usar otros métodos que se aplican almacenado datos en el disco, (SQL, MySQL) donde los procesos liberan memoria y nos dejan trabajar de forma más libre en el programa que queremos implementar.

El programa final de este capitulo:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package arreglos;

/**
 *
 * @author Miguel
 */
import java.util.Scanner; // este es para tomar valores y pasarlos a las variables
import java.util.Arrays;// solicita el objeto Arrays
public class Arreglos {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
     String [] marcasImpresoras ={"Brother","Canon","Dell","Epson","HP","Lexmark","Olivetti"};
     System.out.println("Hay "+marcasImpresoras.length+" marcas de impresoras");
    
     // ejemplo de array para retirar espacios de un string y substituirlo por algun caracter
     //en este string se recibe un mensaje
     String citaDiaria = "La educacion consiste en enseñar en no lo que deben pensar, sino a pensar por "
             + "si mismos";
     char [] convertir =citaDiaria.toCharArray();// transforma del string a caracteres .toCharArray
                                                                      // se recibe como char en la variable convertir
                                                                      // se dice entonces que el string, pasa a caracteres uno a uno
     
      System.out.println("El string inicial es :"+citaDiaria);
     for (int dex =0; dex < convertir.length; dex++){ //en este ciclo revisa caracter a caracter
                                                                            // que longitud tiene
         char current = convertir[dex];
         if (current != ' '){ // si la secuencia en un caracter se imprime en caso contrario
             System.out.print(current);
             }
             else // imprime un * en lugar del espacio
             {
              System.out.print('*');
                     }
                  }
              System.out.println();
   
    // inicializacion de arreglos de fdorma tipica
   
    int[] arreglo; // declara un array llamado arreglo
    arreglo = new int[10];//crea el objeto arreglo
    System.out.printf("%s%8s\n","Indice","Valor"); //metodo printf para encabezado de columnas
  
    //imprime el valor de cada elemento
    for (int contador=0;contador < arreglo.length;contador++){
        System.out.printf("%5d%8d\n",contador,arreglo[contador]);
    }
    // otra forma de arrays
    int[] arreglo2 = {32,56,89,42,23,12,78,33,58,99};//inicializa un arreglo
    System.out.printf("%s%8s\n","Indice","Valor");
    //imprime el valor de cada elemento
    for (int contador2=0;contador2 < arreglo2.length;contador2++){
        System.out.printf("%5d%8d\n",contador2,arreglo2[contador2]);
    }
   // en este arreglo se especifica el tamaño total del arreglo, lo que si se
   // pasa marcara un error.

   int[] arreglo3 = new int[10]; //se crea el arreglo de tamaño fijo (0-10)
   // importante el formato int []
   int jj=1; //este array es para recibir numeros enteros
   for (int ii=0;ii<10;ii++){ //considere la condicion que debe ser menor a 10 para no caer en un error
      arreglo3[ii] = jj;
      System.out.println("Posicion del arreglo "+ii+" Valor asignado a esta posicion  "+jj);
      jj=jj+1;
      }
   System.out.println(" "); //es para separar visualmente los datos
  
   //para mostrar los valores almacenados
   for (int ii=0;ii<10;ii++){
      System.out.println("Presentando el valor "+arreglo3[ii]+" en la posicion "+ii);
    }
      Scanner nombrePersona = new Scanner(System.in); // se crea el objeto nombrePersona
                                                                                     // no olvidar importar: import java.util.Scanner;
                                                                                    // despues de package y antes de class
     
      String[] arreglo4 = new String[10];
      String s; // creamos una variable para recibir el nombre de forma intermedia
     
      for (int tt=0;tt<10;tt++){
          System.out.print(" Nombre a guardar en la posicion del arreglo : "+tt+" ");
          s = nombrePersona.nextLine(); //metodo para recibir texto
          System.out.println("");
          arreglo4[tt]=s; //asignar nombre al arreglo
                }
     
      for (int tt1=0;tt1<10;tt1++){
          System.out.println("En la posicion del arreglo "+tt1+" con el dato "+arreglo4[tt1]);
      }
      Arrays.sort(arreglo4); // cuando ya se tiene los datos almacenados son
                                        // ordenados con Arrays.sort usamos java.util.Arrays
                                        // se agrega con import al inicio del programa
                                        // despues de package y antes de class.

      System.out.println(Arrays.toString(arreglo4)); // presenta el arreglo ordenado
                                                                           // pasando el array a string
      for (int tt2=0;tt2<10;tt2++){
          System.out.println("Posicion en arreglo "+tt2+" Valor en esa posicion "+arreglo4[tt2]);
      }
    }
}


Termina Capitulo 2