domingo, 16 de octubre de 2016

Java básico #15

Arrays de cáracteres

Si quereis estar informado de todos los post aqui os podeis bajar la app.

Antes de empezar con el temario de hoy, voy a hacer un pequeño inciso para explicar dos sentencias, que debería haber explicado cuando se dio las iteraciones, estas sentencias son break y continue.

La sentencia break, hace que se salga del bucle inmediatamente por lo que no se ejecutará ni el código que se encuentre después del break, en esa misma iteración ni ninguna de las posibles iteraciones restantes. Esta sentencia se puede usar en cualquier bucle, aunque es mucho más usada dentro de un switch.

Por ejemplo:

Calendar cal = Claendar.getInstance();
cal.setTimeInMillies(System.currentTimeMillis());
int dia = cal.get(Calendar.DAY_OF_WEAK);
 
for(int i = 1; i <= 7; i++){
    if(dia == i){
        System.out.println("Hoy es el " + i + "º día de la semana");
        break;
    }
    System.out.println("Día " + i);
}
System.out.println("Seguimos...");

Con este programa, obtendremos en que día de la semana nos encontramos (del 1 al 7) y si el día coincide con el del contador del bucle, se ejecutará el break. El resultado suponiendo que hoy es jueves, sería el siguiente: (Por defecto el primer día de la semana es el domingo, por eso nos dice que el jueves es el 5º día y no el 4º)

1. Día 1
2. Día 2
3. Día 3
4. Día 4
5. Hoy es el 5º día de la semana
6. Seguimos...

Como podemos ver, en el momento que se encuentra la sentencia break, automáticamente se sale del bucle y la ejecución continua en la línea siguiente al bucle.

Por otro lado, con la sentencia continue, se puede detener la iteración actual y saltar a la siguiente. El uso normal es cuando, dentro de un bucle estamos haciendo muchas comprobaciones y en caso de que se cumpla alguna no hace falta seguir comprobando el resto. La sentencia continue, debe estar siempre dentro de un bucle.

Vamos a ver un ejemplo similar al anterior:
Calendar cal = Claendar.getInstance();
cal.setTimeInMillies(System.currentTimeMillis());
int dia = cal.get(Calendar.DAY_OF_WEAK);
 
for(int i = 1; i <= 7; i++){
    if(dia == i){
        continue;
    }
    System.out.println("Día " + i);
}
System.out.println("Seguimos...");

El resultado, suponiendo que hoy es miércoles (y recordando que el primer día es el domingo), serñia el siguiente:
1. Día 1
2. Día 2
3. Día 3
4. Día 4
5. Día 6
6. Día 7
7. Seguimos...

Ahora vayamos con el temario de Arrays con caracteres

Un array de caracteres en un array que contiene datos de tipo char.
A diferencia de los demás arrays, se puede mostrar el contenido completo de un array de caracteres mediante la instrucción print(ln) o printf.

Ejemplo de array de caracteres con  5 vocales:

char[] vocales = {'a', 'e', 'i', 'o', 'u'};

Si usamos System.out.println(vocales);
Mostrará:
aeiou

¿Se puede convertir un String a un array de caracteres?

Si, con el método toCharArray().

Ejemplo:

String s = "Java";
char [] palabra = s.toCharArray();

Cuyo array en memoria sería:
palabra[0] --> J
palabra[1] --> a
palabra[2] --> v
palabra[3] --> a

¿Se puede convertir un array de caracteres a un String?

Si, también se puede, veamos un ejemplo:

char [] palabra2 = {'h', 'o', 'l', 'a'};
String s2 = new String(palabra2);

Vamos a recorrer un array de caracteres unidimensional

Con ciclo for:

char [] s = new char[10];

for(int i = 0; i <= s.length; i++){
    System.out.println(s[i] + " ");
}

Con ciclo foreach:

for(char j : s){
    System.out.println(s[j] + " ");
}


NOTA: Para que el valor de los objetos de tipo char sean también de tpo char deben ir entre comillas simplas.
'd' --> tipo char
"d" --> tipo String

Solución al ejercicio del tema anterior:

package ArraysUnidimensionales;
 
import java.util.Scanner;
 
public class Main {
 
 static Scanner sc = new Scanner(System.in);
 static String personas[] = new String[50];
 static String opc, persona;
 static int k = -1;
 
 public static void main(String[] args) {
  preguntar();
 }
 
 public static void preguntar(){
  System.out.println("Desea introducir nombres [i] o ver los nombres [n]");
  opc = sc.nextLine();
 
  if(opc.equalsIgnoreCase("i")){
   introducirNombre();
  }else if(opc.equalsIgnoreCase("n")){
   mostrarNombres();
  }else{
   System.out.println("Opcion no valida");
   System.exit(0);
  }
 }
 
 public static void introducirNombre(){
  System.out.println("Introduzca el nombre");
  persona = sc.nextLine();
 
  personas[k+1] = persona;
  k++;
 
  preguntar();
 }
 
 public static void mostrarNombres(){
  if(personas.length > 0){
   for(String s : personas){
    if(s == null){
    }else{
    System.out.println(s);
    }
   }
  }else{
   System.out.println("No hay valores");
   preguntar();
  }
 }
 
}

Ejercicio:

Escribe un programa, que el pida a un usuario una frase y la guarde en un array de caracteres, y después muestre por pantalla el array cuando el valor sea 'a', es decir:
cuando array[indice] == 'a' --> "El valor de array[indice] es +"

No hay comentarios:

Publicar un comentario