Autor Tema: Ejercicio CU00676B método fill clase Arrays java  (Leído 4002 veces)

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Ejercicio CU00676B método fill clase Arrays java
« en: 21 de Julio 2014, 22:35 »
Hola. Presento clase con main, como práctica del método 'fill' de la clase 'Arrays'
Clase RellenarIntervalosArray
Código: [Seleccionar]
package CU00676B;
import libToni.varios.*;
import java.util.Arrays;
/**
 * Detalles de la clase.
 * @author (Toni)
 * @version (0)
 */
public class RellenarIntervalosArray {           

    public static void main (String [] args) {
        int numeroSellos = 0, desde = 0, hasta = 90, reemplazo = 33; // valores indices de relleno y valor de relleno
        boolean dentroDelBucle = true;
        String respuesta = "",separacion = "-------------------------------------";
        EnteroIntervalos numero = new EnteroIntervalos();
        Mensaje mensaje = new Mensaje (separacion + "\nVamos a poner pegatinas (sellos numerados) en la pared.");
        numeroSellos = numero.enteroAceptado(
                mensaje.responde ("Digame. Hasta un máximo de 90 sellos. ¿Cuantos vamos a preparar?",0),1,91);
        if (numeroSellos < 1) {
            mensaje.muestra ("Valor numérico incorrecto. Se toma el valor por defecto '30'");
            numeroSellos = 30;
        }
        int [] s = new int [numeroSellos];   // declara array de (int) de nombre 's'
        for (int i = 0; i < s.length; i++) { // inicializa array s
            s[i] = i;
        } // fin del for
        int [] respaldoSello = Arrays.copyOf(s, s.length); // duplicado del array para recuperar
        mensaje.muestra ( separacion + "\n" +
        "A continuación el array con valores inicializados listo para ser manipulado.\n" +
        separacion );
        do {
            presentaValores (s);
            desde = numero.enteroAceptado(
                mensaje.responde (separacion + "\nAhora vamos a cambiar los valores de algunos sellos.\n" +
                    "Primero, introduzca el primer índice donde efectuar el cambio entre " +
                    desde + " y " + numeroSellos +":",0), desde, numeroSellos);
            if (desde < 0) {
                mensaje.muestra ("Valor inválido. Se toma el valor por defecto. '0'");
                desde = 0;
            }
            hasta = numero.enteroAceptado(
                mensaje.responde ("Y ahora, introduzca el último índice donde efectuar el cambio entre " +
                    desde + " y " + numeroSellos + ":",0), desde, numeroSellos+1);
            if (hasta < desde) {
                mensaje.muestra ("Valor inválido. Se toma el valor por defecto. '" + numeroSellos + "'");
                hasta = numeroSellos;
            }
            reemplazo = numero.enteroAceptado(
                mensaje.responde ("Y finalmente.\n" +
                    "Introduzca el valor que reemplazará los valores del rango seleccionado, entre 0 y 89:",0),0,90);
            if (reemplazo < 0) {
                mensaje.muestra ("Valor inválido. Se toma el valor por defecto. '33'");
                reemplazo = 33;
            }
            Arrays.fill (s, desde, hasta, reemplazo);
            // muestra array [] modificado con 'fill'
            mensaje.muestra ("He aquí el array de " + numeroSellos + " elementos. Donde se han cambiado sus valores desde...\n" +
                "El elemento " + desde + " (incluido), hasta el " + hasta + " (excluido), con el valor " + reemplazo + ".");
            presentaValores (s);
            respuesta = mensaje.responde ("Para realizar más cambios con este array pulse:\n" +
                "(C/c) = cambios\t(R/r) = recuperar valores iniciales\t(INTRO) = salir",0);
            if (respuesta.length() == 0) {                    // saliendo
                dentroDelBucle = false;
            } else if (respuesta.substring(0,1).toUpperCase().equals("C")) {
                mensaje.muestra ("\nEl array ha quedado así.");
            } else if (respuesta.substring(0,1).toUpperCase().equals("R")) {
                s = Arrays.copyOf(respaldoSello, respaldoSello.length);
                mensaje.muestra ("\nArray recuperado.");
            } else {}
            // valores desde y hasta reiniciados
            desde = 0;
            hasta = numeroSellos;
        } while (dentroDelBucle);
        System.out.println ("Saliendo de la manipulación de sellos numerados.");
    } // fin del main

    private static void presentaValores (int [] peg) {
        String salto ="";
        for (int i = 0; i < peg.length; i++) {
            if ( ((i+1) % 10 > 0) ) { salto = " "; } else { salto = "\n"; }
            System.out.print ("s[" + i + "]=" + peg[i] + salto);
        } // fin del for
        if ((peg.length) % 10 >0) { System.out.println(); }
        char c = ' ';
        for (int i = 0; i < peg.length; i++) {
            if ( ((i+1) % 10 > 0) ) { salto = ""; } else { salto = "\n"; }
            c = (char) (peg[i] + 33);
            System.out.print ( c + salto);
        }
        if ((peg.length) % 10 >0) { System.out.println(); }
        int lineasMostradas = peg.length / 10;
        if ( peg.length % 10 >0) { lineasMostradas++; }
        System.out.println ("Las últimas " + lineasMostradas + " líneas representan los valores del 'array' en formato de 'char'.");
    } // fin de presentaValores
} // Fin de la clase RellenarIntervalosArray
Clase Mensaje. Presenta mensajes y devuelve entradas de teclado
Código: [Seleccionar]
package libToni.varios;
import java.util.Scanner;
/**
 * Detalles de la clase. El método presenta mensajes por pantalla... y devuelve entradas de teclado
 * @author (Toni)
 * @version (0)
 */
public class Mensaje { // Atributos de la clase Mensaje
    private String texto;
    private int valor;
    /**
     * Mostrará el texto con salto de línea final.
     */
    public Mensaje (String frase) { //Constructor 1 parámetro para objetos de la clase Mensaje. Inicializa atributos
        texto = frase;
        valor = 1;
        muestra (texto, valor);
    }

    /**
     * Muestra el texto con salto de línea o no según param.
     * Valores param:
     * 0 = Sin salto de línea.
     * 1, u otro valor = Con salto de línea.
     */ 
    public Mensaje (String frase, int param) {
        texto = frase;
        valor = param;
        muestra (texto, valor);
    }
    // Siguen los setters para los atributos de la clase Mensaje
    public void setTexto (String texto) { this.texto = texto; }

    public void setValor (int valor)    { this.valor = valor; }
    // Ahora los getters para los atributos de la clase Mensaje
    public String getTexto ()           { return texto; }

    public int getValor ()              { return valor; }

    // Y seguidamente, procedimientos y funciones varios.
    /**
     * Mostrar el texto con salto de línea (sin segundo parámetro)
     */   
    public void muestra (String frase) {
        muestra (frase, 1);
    }// fin de muestra 1 parámetro

    /**
     * Valores param:
     * 0 = Sin salto de línea.
     * 1, u otro valor = Con salto de línea.
     */   
    public void muestra (String frase, int param) {
        texto = frase;
        valor = param;
        if (valor == 0) { System.out.print (texto + " ");
        }          else { System.out.println (texto); }
    }// fin de muestra 2 parámetros

    /**
     * Sin segundo parámetro el mensaje incluirá salto de línea. Devuelve entrada de teclado
     */
    public String responde (String frase) {
        return responde (frase, 1);
    }// fin de responde 1 parámetro

    /**
     * Valores param:
     * 0 = Sin salto de línea + entrada por teclado.
     * 1, u otro valor = Con salto de línea + entrada por teclado.
     */
    public String responde (String frase, int param) {
        texto = frase;
        valor = param;
        muestra (texto, valor);
        Scanner entradaEscaner = new Scanner(System.in);
        return entradaEscaner.nextLine();
    }// fin de responde 2 parámetros
} // Fin de la clase Mensaje
Clase EnteroIntervalos. Devuelve entero entre intervalos determinados.
Código: [Seleccionar]
package libToni.varios;
/**
 * Detalles de la clase.
 * @author (Toni)
 * @version (0)
 */
public class EnteroIntervalos {             
    public int enteroAceptado (String entrada, int desde, int hasta) {
        int entero = 0;
        char c =' ';
        entrada = entrada.trim();
        if (entrada.length() == 0) { return desde - 1;  }
        for (int i = 0; i < entrada.length(); i++) {
            c = entrada.charAt(i);
            if (c==48 || c==49 || c==50 || c==51 || c==52 || c==53 || c==54 || c==55 || c==56 || c==57) {  // solo dígitos del 0 al 9
            } else    { return desde - 1; } // ha aparecido un caracter no dígito
        }
        entero = (int)Integer.valueOf(entrada);
        if (entero < desde || entero >= hasta) { return desde - 1; } // entero fuera del rango desde-hasta
        return entero;       
    } // fin de enteroAceptado
} // Fin de la clase EnteroIntervalos
« Última modificación: 31 de Agosto 2014, 18:49 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Ejercicio CU00676B
« Respuesta #1 en: 21 de Julio 2014, 23:58 »
Hola de nuevo, pocas objeciones habría que ponerle al código. Felicitarte porque se ve que estás trabajando y estás agarrando bien los conceptos. Además de seguir contenidos es muy importante practicar y crear nuestros propios programas de prueba... así que "fetén".

Por comentar algo, en vez de usar desde y hasta yo hubiera usado limiteInferior o numeroDeComienzo y limiteSuperior o numeroDeTerminacion... algo más descriptivo. También teniendo en cuenta que desde y hasta son palabras clave en pseudocódigo y verlo como nombres de variables en código se hace un poco extraño. Pero no es una objeción "seria" al código, es un simple comentario.

Nota para quienes intenten compilar con BlueJ: al estar declarados packages, salta un error (para compilar sin problemas eliminar estas declaraciones, o bien crear los packages).

Igual hay alguna manera de que BlueJ cree los packages automáticamente pero ahora mismo no lo recuerdo  ???

Si alguien sabe cómo crearlos automáticamente que avise  :D

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:Ejercicio CU00676B
« Respuesta #2 en: 22 de Julio 2014, 21:28 »
Hola Alex.

Lo de los nombres de las variables es un lastre que arrastro, pongo nombres para mí, pero se que si quiero entender el código un mes más tarde, tengo que hacer lo que dices.
Poner nombres que se expliquen solos, así de fácil. :)

En cuanto a los packages. Voy a poner todas las clases en el package por defecto, y listo.

Gracias por tus comentarios
Saludos.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".