Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: toni_apr 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
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
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.
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
-
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
-
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.