Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - daenius

Páginas: [1] 2
1
Comunidad / Re: Feliz Navidad y Próspero Año Nuevo para todos
« en: 24 de Diciembre 2020, 09:37 »
Feliz Navidad foro  8)

2
Son varias horas lo que un usuario puede editar un mensaje publicado (creo que tres horas). Lo que sí puede haber es una limitación para hacer publicaciones o ediciones muy seguidas para evitar robots, así por ejemplo si intentas publicar muy seguido o editar muy seguido te puede decir que no ha transcurrido el tiempo mínimo entre publicaciones o ediciones que está en torno a 30 segundos. Esto para evitar robots que pueden intentar publicar varios mensajes por segundo o así.
Ok, gracias de nuevo. Perdona por seguir una conversación que se sale del topic del hilo principal, pero me ha servido mucho.

Saludos.

3
Ok, gracias Ogramar. ¿De cuánto tiempo disponemos para la edición? ¿5 minutos?

4
Ok, aunque veo que está muy estandarizado escribir "de forma libre" sin atender a las pautas establecidas. De cualquier forma, espero que si alguna vez respondo a alguien no se me borre mi post por ello.

Aprovecho para preguntar cómo se puede editar tu mensaje. No me veo la opción para ello y la verdad, me vendría bien.

5
Hola,

juraría que había visto este mismo post hace unos días y desapareció de pronto. En fin, lo acabo de retocar, ahora ya funciona perfectamente:

Código: [Seleccionar]
public static void mostrarMatriz(Integer[][] array) {

System.out.println("Sacando la matriz:\n");
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.println(array[i][j] + "  ");
}
System.out.println(); // salto de linea
}
}

public static void main(String[] args) {
/*
* Pedir al usuario numeros por consola hasta llenar una matriz de 4x4
* Cambiar los numeros de las diagonales por 1 Sacar por consola las 2
* matrices
*/

Integer array[][] = new Integer[4][4];

Scanner sc = new Scanner(System.in);

// Llenamos la matriz
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.println("Introduzca el valor " + i + " - " + j + ":");
array[i][j] = sc.nextInt();
}
}

sc.close();

// Mostrar la matriz introducida
mostrarMatriz(array);

// Cambiar las diagonales de la matriz a 1

array[0][0] = 1;
array[1][1] = 1;
array[2][2] = 1;
array[3][3] = 1;

mostrarMatriz(array);

}

Comentarios:

Antes del main he creado un método auxiliar en privado para que sea llamado cuando se imprima la matriz. No me gusta cómo la imprime la consola, esto es, como una tira vertical de números, a ver si encuentro otra manera, porque con las que he dado solamente sirven para una cadena de String.

Sobre el código poco hay que hablar, se hace lo que pides, esto es, preguntarle al usuario por consola los 16 números para la matriz de 4x4 que vamos almacenando en el array bidimensional. Luego, cambiamos las diagonales y volvemos a mostrar la matriz ya cambiada.

6
Yo lo he entendido pero igual es tonta la pregunta, ¿la cadena de números debe comenzar por esa coma? ¿Se le pide al usuario por consola? ¿Es a través de un fichero?

7
Hola,

mil gracias kabuto. Ya sé lo que me fallaba entonces. Lo que más coraje me da es que lo he usado en más de una ocasión....

En fin, he hecho además algunas modificaciones por aquí y por allá. No está lo más perfecto que podría estar pero supongo que algo es algo, ya digo, el factor tiempo me es limitado:

Código: [Seleccionar]

public class Ejercicio6Bien {

static String  palabra="";

static List<String>  palabras = new ArrayList<String>();

static Scanner q = new Scanner(System.in);

// Comprobar si hay digitos en la palabra input
public static Boolean tieneDigitos(String palabra, List<String> l) {

Boolean res = false;

for (int i = 0; i < palabra.length(); i++) {
char c = palabra.charAt(i); // Caracter i-esimo de la palabra
if (Character.isDigit(c)) {
System.out.println("La palabra introducida contiene un numero\n Pruebe de nuevo");
res = true;
break;
}
}

l.add(palabra);

return res;

}

// Numero de veces que una palabra esta en la lista
public static Integer vecesPalabra(String palabra, List<String> l) {
Integer res = 0;

for (int i = 0; i < l.size(); i++) {
if (l.contains(palabra)) {
res++;
}
}
return res;
}

// Sacar las palabras que empiezan por una letra determinada
public static void contieneLetra(String letra, List<String> l) {

String cambiada="";

Boolean chivato =true;
if(chivato){
for (int i = 0; i < l.size(); i++) {
if (l.get(i).startsWith(letra)) {

System.out.println("Introduzca la palabra por la que la quiere cambiar:\n");
cambiada= q.nextLine();
palabras.remove(l.get(i));
palabras.add(cambiada);
System.out.println("La nueva palabra es: " + cambiada);
}
chivato=false;
}
}else{
System.out.println("La palabra buscada no existe");
}



}

public static void main(String[] args) {

Integer n = 0;
while (n != 5) {


System.out.print("\nMenú\n");
System.out.print("\n1. Ingresar palabra");
System.out.print("\n2. Mostrar palabras");
System.out.print("\n3. Buscar palabra");
System.out.print("\n4. Modicar palabra");
System.out.print("\n5. salir");
System.out.print("\nOpción: ");
Integer a = q.nextInt();



if (a == 1) { // Comprobar que la palabra no tiene numeros
System.out.print("\n1. Ingresar palabra:\n" );
q.nextLine();
palabra = q.nextLine();
Boolean c = tieneDigitos(palabra, palabras);
if (c == false) {
System.out.println("La palabra no contenia numeros, añadida correctamente");

}

} else if (a == 2) {
System.out.print("\n2. Mostrar palabras");
// Mostramos las palabras de la lista
if (palabras.isEmpty()) {
System.out.println("\nLa lista esta vacia");
} else {
System.out.println("\nMostrando lista:\n" + palabras);
}
} else if (a == 3) {
System.out.print("\n3. Buscar palabra");
System.out.println("\nIntroduzca la palabra que quiere buscar:\n");
q.nextLine();
palabra = q.nextLine(); // guardamos la palabra que
// queremos buscar
Integer suma = vecesPalabra(palabra, palabras);
if (suma == 0) {
System.out.println("La palabra seleccionada no esta en la lista");
} else {
System.out.println("La palabra seleccionada esta " + suma + " veces en la lista");
}
} else if (a == 4) {
System.out.print("\n4. Modificar palabra");
System.out.println("\nIntroduzca la letra por la que buscar palabras:");
// Modificamos una palabra
String letra;
q.nextLine();
letra = q.nextLine();
contieneLetra(letra, palabras);

} else if (a == 5) {
break;
} else {
System.out.println("Introduce un numero del 1 al 5");
}

}

}

}


8
Hola,

¿en qué lenguaje tienes que crearlo? y, ¿qué llevas intentado?

9
Hola,

Respecto al ejercicio anterior era eso precisamente. Al menos hay captura de lo que me salía por consola. Esperemos que algún crack de Java se pase por aquí.

Respecto al nuevo ejercicio: es tontería que me ponga con ese ya que habría que hacer algo muy similar que el anterior, pero en vez de usar objetos clásicos del lenguaje habría que invocar a un objeto nuestro.

Lo que sí remarcaría de la clase que has subido es que le añaderas un equals() y la función hashcode() por motivos de seguridad. En Internet seguro debes tener información sobre ello, además que si programas desde Eclipse, se hacen solos al invocarlos.

10
Hola,

El código que has puesto estaba lleno de errores por todas partes. Te he puesto comentarios por varios sitios. En especial mencionarte que el do necesitaba la sentencia del while. Ahí se escribe la sentencia booleana que cada vez que sea cierta se ejecute todo lo que tienes dentro del bloque del do. Te dejo más información sobre ello aquí

Ten en cuenta que pusiste el código sin la premisa de indicar el paquete en el que estaba. No sé si lo hiciste a propósito o no, pero yo por ejemplo lo he dejado indicado a continuación. Por si no sabes a lo que me refiero, es lo indicado en la primera línea como
Citar
package aprendeaprogramar;

Y otra cosa, cuando declares un array, nunca lo hagas con la clase Object. Usa la suya, eso era otro de los errores que había. Bueno, asando a ponerte el código comentado:

Código: [Seleccionar]
package aprendeaprogramar;

import java.util.ArrayList; //Esto nunca se usa
import java.util.Arrays;
import java.util.Scanner;

public class Ejercicio6 {
public static void menu() {
System.out.print("\nMenú\n");
System.out.print("\n1. Ingresar palabras");
System.out.print("\n2. Mostrar palabras");
System.out.print("\n3. Buscar número"); //no era buscar palabra?
System.out.print("\n4. Modicar número"); //no era modificar numero?
System.out.print("\n5. salir");
System.out.print("\nOpción: ");
}

public static void main(String[] args) {
String palabra;
Scanner sc=new Scanner(System.in);
//El Scanner nunca se cierra

String[] arra= new String[20];
//La creacion de un array como Object es erronea
//Se pide una lista, no un array
int opcion;
do {
menu();
opcion=sc.nextInt();
switch(opcion) {
case 1:
System.out.println("Introduzca la palabra:");
for(int i=0; i<=20; i++) {
palabra=sc.nextLine();
arra[i]=palabra;
}
case 2:
System.out.println("Las palabras ingresadas es: \n"+ Arrays.toString(arra));


}
}

//Totalmente inventado
while(opcion<2);
System.out.println("Hola");



}
}

Ok, entonces una vez visto que nada me funcionaba he metido bulldozer y me he creado el ejercicio desde 0. Sin embargo, después de estar todo el día haciendo cambios aquí y allá no consigo que me funcione del todo.

Y me dirás "ay (insulto), no me eches la bronca si tu tampoco lo tienes bien". Ya, pero espero que se entienda mejor. De todas formas, no tengo mucho tiempo ahora mismo, y lo suyo es que alguien más diestro que yo postee en donde me estoy equivocando o, en otras palabras, por qué demonios no me funciona el scanner para capturar la palabra que quiero preguntarle al usuario y me vuelve a sacar el menú.

En fin, pongo mi código:

Código: [Seleccionar]
public class Ejercicio6Bien {

// Comprobar si hay digitos en la palabra input
public static Boolean tieneDigitos(String palabra, List<String> l) {

Boolean res = false;

for (int i = 0; i < palabra.length(); i++) {
char c = palabra.charAt(i); // Caracter i-esimo de la palabra
if (Character.isDigit(c)) {
System.out.println("La palabra introducida contiene un numero\n Pruebe de nuevo");
res = true;
break;
}
}

l.add(palabra);

return res;

}

// Numero de veces que una palabra esta en la lista
public static Integer vecesPalabra(String palabra, List<String> l) {
Integer res = 0;

for (int i = 0; i < l.size(); i++) {
if (l.contains(palabra)) {
res++;
}
}
return res;
}

// Sacar las palabras que empiezan por una letra determinada
public static void contieneLetra(String letra, List<String> l) {

for (int i = 0; i < l.size(); i++) {
if (l.get(i).startsWith(letra)) {
System.out.println(l.get(i));

} else {
System.out.println("No hay ninguna palabra que comience por esa letra");
}
}

}

public static void main(String[] args) {

Integer n = 0;
while (n != 5) {
Scanner q = new Scanner(System.in);

System.out.print("\nMenú\n");
System.out.print("\n1. Ingresar palabra");
System.out.print("\n2. Mostrar palabras");
System.out.print("\n3. Buscar palabra");
System.out.print("\n4. Modicar palabra");
System.out.print("\n5. salir");
System.out.print("\nOpción: ");
Integer a = q.nextInt();

String palabra="";

List<String> palabras = new ArrayList<String>();

if (a == 1) { // Comprobar que la palabra no tiene numeros
System.out.print("\n1. Ingresar palabra:\n" + palabra);
palabra = q.nextLine();
Boolean c = tieneDigitos(palabra, palabras);
if (c == false) {
System.out.println("La palabra no contenia numeros, añadida correctamente");
}

} else if (a == 2) {
System.out.print("\n2. Mostrar palabras");
// Mostramos las palabras de la lista
if (palabras.isEmpty()) {
System.out.println("\nLa lista esta vacia");
} else {
System.out.println("Mostrando lista:\n" + palabras);
}
} else if (a == 3) {
System.out.print("\n3. Buscar palabra");
System.out.println("Introduzca la palabra que quiere buscar:\n");
palabra = q.nextLine(); // guardamos la palabra que
// queremos buscar
Integer suma = vecesPalabra(palabra, palabras);
if (suma == 0) {
System.out.println("La palabra seleccionada no esta en la lista");
} else {
System.out.println("La palabra seleccionada esta " + suma + " veces en la lista");
}
} else if (a == 4) {
System.out.print("\n4. Modificar palabra");
System.out.println("Introduzca la letra por la que buscar palabras:");
// Modificamos una palabra
String letra;
letra = q.nextLine();
contieneLetra(letra, palabras);

} else if (a == 5) {
break;
} else {
System.out.println("Introduce un numero del 1 al 5");
}

}

}

}

Para que se entienda:

En el main he hecho el programa principal, el cuál llama a métodos privados dependiendo de la opción que el usuario elija (las del menú). Para ello he diseñado un while-true que va a ir lanzando por consola el menú de opciones una vez el usuario haya terminado de elegir una opción (para que quiera seguir operando en vez de volver a correr el programa y así, se pierda todo).

De la misma forma, he optimizado un poco el menú de opciones. Así, si el usuario introduce un 5, el while se vuelve a false y se termina el programa. Y si mete un número que no sea del 1 al 5 pues lanza un error. Esto es totalmente opcional y está más enfocado ya a la mejora y detalles de implementación del programa.

En fin, lo dicho, a ver si alguien más se une.

Me da lástima publicarlo así, pero es que no dispongo de mucho más tiempo y si te corre prisa, tienes ya algo.

11
no me deja subir una foto pero el error es este
Multiple markers at this line
   - Syntax error on token ".", @ expected after
    this token
   - Syntax error on tokens, SimpleName expected
    instead
   - Syntax error on token ".", @ expected after
    this token
sale por todo el codigo

Solo para descartar, cada ejercicio lo realicé en el main de clases independientes. Esto es, te creas una clase, le metes main y copias mi código. Funcionar ya te digo yo que funciona porque lo he probado mil veces.

Por cierto, para meter imágenes tienes que subirlas a un host, darle al icono de unos prismáticos (el de la izquierda del todo, encima de los emojis) y pegar ahí la url de la foto

12
hola amigo por algun motivo tus ejercicios me salen con error :c

Pues a mí me funcionan perfectamente. Pasa captura de tu error

13
Hola, te traigo los ejercicios resueltos (del 2 al 5):

>Sobre el ejercicio 2:

Código: [Seleccionar]
public static void main(String[] args) {

String palabra;
Scanner sc = new Scanner(System.in);
String array[] = new String[10];

System.out.println("Introduzca 10 palabras:");

for (int i = 0; i <= 9; i++) {
palabra = sc.nextLine();
array[i] = palabra;


}

// Imprimir el array:
System.out.println("El array con las palabras ingresadas es: \n" + Arrays.toString(array));

/*
* Pedir letra:
* Se reutiliza el scanner anterior. Una vez encontradas las palabras,
* se sacan por pantalla. En caso de no haber ninguna, se lanza un mensaje.
*/
String letra;


System.out.println("Introduzca la letra por la que buscar palabras:");
letra = sc.nextLine();

for (int i = 0; i < array.length; i++) {
if (array[i].startsWith(letra)) {
System.out.println(array[i]);

} else {
System.out.println("No hay ninguna palabra que comience por esa letra");
}
}

sc.close();
}

>Sobre el ejercicio 3:

Código: [Seleccionar]
public static void main(String[] args) {

// 1.- Pedir el texto por consola
String texto;
Scanner sc = new Scanner(System.in);

System.out.println("Introduzca el texto deseado:\n");
texto = sc.nextLine();

// 2.- Transformar las minusculas por mayusculas

String array[] = texto.split(" ");
sc.close();
List<String> palabras_cambiadas= new ArrayList<>();

String palabra_mayus="";
for (int i = 0; i < array.length; i++) { //Para cada una de las palabras en el array
String palabra= array[i];

for (int j = 0; j < palabra.length(); j++) { //Para todos las letras en cada palabra

char caracter= palabra.charAt(j); //guardamos el caracter para reusarlo
char caracter_mayus=' '; //la proxima vocal en mayusculas

if(!(Character.isUpperCase(caracter))  //el caracter es minusculo

&& (caracter =='a' || caracter=='e' || caracter=='i' || caracter=='o' || caracter=='u')){ //ese caracter en minuscula es vocal

if(caracter=='a'){   //Identificamos el tipo de vocal y cambiamos a mayusculas
caracter_mayus='A';
}else if(caracter == 'e'){
caracter_mayus='E';
}else if(caracter == 'i'){
caracter_mayus = 'I';
}else if(caracter == 'o'){
caracter_mayus = 'O';
}else if(caracter == 'u'){
caracter_mayus='U';
}


palabra_mayus= palabra.replace(caracter, caracter_mayus); //reemplazamos la antigua vocal minuscula por la actual mayusucula

palabra=palabra_mayus; //repito la operacion para las demas posibles vocales
}



}
palabras_cambiadas.add(palabra); //una vez que la palabra ha sido totalmente cambiada, se mete en la lista de salida

}


System.out.println("El texto inicial era: " +Arrays.toString(array));
System.out.println("Nuevo texto transformado: " + palabras_cambiadas);
}


>Sobre el ejercicio 4:

No lo he hecho porque es idéntico al apartado anterior a excepción de que en vez de cribar por vocales en minúscula, ahora se trata de caracteres especiales. Es más de lo msimo, dale un intento.

>Sobre el ejercicio 5:

Código: [Seleccionar]
public static void main(String[] args) {

//1.- Declaro elementos a usar
String palabra;
Scanner sc = new Scanner(System.in);
List<String> palabras_guardadas = new ArrayList<>();
List<String> palabras_elegidas = new ArrayList<>();

//2.- Pido palabras
System.out.println("Introduce palabras: ");


//3.- Las meto en la lista si no es stop
for (int j = 0; j < 20; j++) { //Tenemos de tope meter 20 palabras, esto es un ejemplo
palabra= sc.nextLine();
if(!palabra.equals("stop")){
palabras_guardadas.add(palabra);
}else{ //4.- En el caso de que sea stop paro y saco las que empiecen por vocal
for (int i = 0; i < palabras_guardadas.size(); i++) {
if(palabras_guardadas.get(i).startsWith("a") ||
palabras_guardadas.get(i).startsWith("e") ||
palabras_guardadas.get(i).startsWith("i") ||
palabras_guardadas.get(i).startsWith("o") ||
palabras_guardadas.get(i).startsWith("u")){
palabras_elegidas.add(palabras_guardadas.get(i));
}
}
System.out.println("Listado de palabras que comienzan por vocal:\n" + palabras_elegidas);
break;


}
}


sc.close();
}

Notas finales:

Como cualquiera pueda apreciar no se han hecho de la mejor de las maneras posibles, y tampoco me he molestado en ello. Me refiero propiamente a los grandes "if-else" para comprobar las vocales. Sé que se puede hacer de otras maneras más cortas y elegantes pero para empezar a entender conceptos tan básicos como los que se pide no creo que esté tan mal del todo.

Cualquier duda, ya sabes, pregunta.

Por otro lado, he de reconocer que me ha venido bien para volver a retormar la programación, que la tenía abandonada desde hace mucho ya, y mañana empiezo de nuevo las clases...

Saludos.

14
OP, di en qué lenguaje necesitas el código, ya que el sub foro acoge una gran variedad de ellos.

15
Aprender a programar desde cero / Re:Duda con un código - Java
« en: 22 de Julio 2020, 09:40 »
Entonces tu solución al problema está en el link de SO que te dejé anteriormente. Tomando dicha página como ejemplo, aunque la respuesta ganadora es la primera, para mi gusto la que proporciona "spuente" es la más acertada a la hora de entenderla completamente:

El primer bucle for te recorre el array entero, pero para cada iteración, el segundo bucle recorre y comparar cada par de números adyacentes del array. Tomando de muestra el array que proporciona el usuario:

Código: [Seleccionar]
int [] a  = {7,2,4,8,3,9,1,5,10,6};
Y haciendo una pequeña traza de lo dicho:
Para la primera iteración del programa tendríamos lo siguiente:
i=0, es decir, el primer bucle está parado en la primera posición del array, "apuntando" al 7
j=1, es decir, el segundo bucle está parado en la segunda posición del aray, "apuntando" al 2

Código: [Seleccionar]
if (a[j - 1] > a[j]) {"Si el elemento en j-1, es decir, el 7, es mayor que el elemento que está en j, es decir, el 2"
entonces, se realiza el cambio de las variables. Esta metodología se denomina "asignación en paralelo". Se guarda el mayor elemento en una variable auxiliar, se cambia la menor donde estaba la mayor, y en donde estaba la menor antes, se mete lo guardado en la variable auxiliar, o séase, el mayor valor.

Para la segunda iteración en la traza:
i=0, nada cambia
j=2, es decir, apunta al 4
el array queda modificado así: {2,7,4,8,3,9,1,5,10,6};
En el "if" se comparan los elementos de las posiciones "j-1" y "j", respectivamente. Esto es, si el 7 es mayor que el 4.

Sin embargo, es necesario un primer bucle, aquel que va iterando sobre cada elemento del array, ya que, no necesariamente, el array se va a quedar perfectamente ordenado en la primera "vuelta", por así llamarla. Con el bucle anidado, o el más interno, comparamos pares de elementos consecutivos sí, pero, ¿ya queda ordenado de buenas el array? No.
Una vez que el segundo bucle haya terminado, la "i" del primer bucle cambia a "1" y ahora va estudiando los siguientes pares de numeros. Si te fijas, el orden respecto al estudio de los números ha cambiado y así, quién es menor y el mayor. Por ello mismo hace falta repetir esto "n" veces por "n-1" veces.
Y, a la vez, se van dejando a la izquierda la secuencia ordenada de números con cada iteración del bucle primero.

16
Aprender a programar desde cero / Re:Duda con un código - Java
« en: 21 de Julio 2020, 20:16 »
Buenas, espero que se encuentren bien.
Buenas, espero que tú también estés bien.

No me ha quedado del todo claro, pero creo que no entiendes cómo realizar el código para reordenar un array en Java. Bueno, para ello hay varias formas, las formas cortas y rápidas y las más largas y "tediosas". Te paso lo que he hecho:

Código: [Seleccionar]
               // Empecemos con un array cualesquiera al que llamamos "CoduJ"
int coduj[] = { 2, 3, 4, 1, 8, 9, 4 };
System.out.println("Array al principio: " + Arrays.toString(coduj));
// Extraccion y simplificacion de codigo repetitivo y largo
int len = coduj.length - 1;
// Correcciones pertinentes
for (int j = 0; j < len; j++) {
for (int i = 0; i < len; i++) {
if (coduj[i] > coduj[i + 1]) {
int aux = coduj[i];
coduj[i] = coduj[i + 1];
coduj[i + 1] = aux;
}
}

}
// Reordenar un array de menor a mayor:
Arrays.sort(coduj);
System.out.println("Array una vez ordenado: " + Arrays.toString(coduj));

Pasando a comentar, me gustaría saber qué es eso de "Array" en tu porción de código que pasaste antes, ya que a no ser que se trate de una clase tuya propia, la de Java se llama "Arrays". Pero de todas formas, no entiendo cómo no te daba fallos en el IDE donde programas con Java, ya que al copiarme tu código a mi espacio de trabajo eso era una sangría.

Por otra parte, dentro del código tienes tanto las correcciones que tuve que hacer para que me funcionara antes de nada en mi IDE y acto seguido, mi solución aportada.

Sé que todo esto que te he escrito solamente está relacionado con el problema base en sí, esto es, cómo ordenar un array de menor a mayor. Sin embargo, me gustaría responderte a lo que comentaste hacia el final del post. No te enfoques a una sola manera de resolver un problema, ya sea ordenar una array, sacar los primos de una lista de reales, o cómo sacar el índice del menor número de una lista usando la Búsqueda Binaria. En la programación hay más de un camino que lleva a Roma, y en el enlace de SO se puede apreciar eso.

Volviendo al código que proporciono es la que prefiero y sobretodo porque no me gusta "re inventar la rueda". Aquí tienes un enlace de alguien que tuvo tu misma duda y, como puedes ver, la gente aporta gran variedad de opciones.

17
Comunidad / Re:Presentación
« en: 13 de Julio 2020, 12:01 »
Bienvenido al foro!

18
Hola, me ha gustado mucho tu forma de programar. Muy ordenada, limpia y entendible; te felicito! Sin embargo el programa no está del todo bien. Te pongo primero el código con algunas anotaciones y cambios:

Código: [Seleccionar]
import java.util.Scanner;

class Agenda {
public static void main(String args[]) {
// int AgendaDatos[][] = new int[7][24]; No se ha usado nunca
Integer hora = 12;
Integer OP = 0;
/*
* Estas dos variables ya se han usado en "hora" y en "IndiceDia"
*
* Integer HorasColumnas = 0; Integer DiasFilas = 0;
*/
Integer IndiceDia = 0;
String DiasSemana[] = new String[7], DiasDatos[] = new String[168], Formato = "A.M";
DiasSemana[0] = "Lunes";
DiasSemana[1] = "Martes";
DiasSemana[2] = "Miercoles";
DiasSemana[3] = "Jueves";
DiasSemana[4] = "Viernes";
DiasSemana[5] = "Sabado";
DiasSemana[6] = "Domingo";
boolean prog = true;
Scanner InputInt = new Scanner(System.in);
Scanner InputStr = new Scanner(System.in);

for (int i = 0; i < 168; i++) {
DiasDatos[i] = "(Vacio)";
}
while (prog == true) {
System.out.println("\t\t\t--- Agenda ---");
System.out.println("Que desea hacer: 1: Ver mi agenda | 2: Agregar algo a la agenda | 3: Salir");
OP = InputInt.nextInt();
while (OP < 1 || OP > 3) {
System.out.println("No ha seleccionado de manera correcta. . .");
System.out.println("Que desea hacer: 1: Ver mi agenda | 2: Agregar algo a la agenda | 3: Salir");
OP = InputInt.nextInt();
}
switch (OP) {
case 1: // mostrar agenda
System.out.println(
"1: Lunes | 2: Martes | 3: Miercoles | 4: Jueves | 5: Viernes | 6: Sabado | 7: Domingo");
System.out.print("Dia: ");
IndiceDia = InputInt.nextInt();
while (IndiceDia < 1 || IndiceDia > 7) {
System.out.println("No ha seleccionado correctamente. . .");
System.out.println(
"1: Lunes | 2: Martes | 3: Miercoles | 4: Jueves | 5: Viernes | 6: Sabado | 7: Domingo");
System.out.print("Dia: ");
IndiceDia = InputInt.nextInt();
}

for (int j = 0; j < 24; j++) {
System.out.println("El dia " + DiasSemana[IndiceDia - 1] + " a las " + hora + " " + Formato + ": "
+ DiasDatos[j]);
hora++;
if (hora == 13) {
hora = 1;
}
if (Formato.equals("A.M") && hora == 12) {
Formato = "P.M";
} else if (Formato.equals("P.M") && hora == 12) {
Formato = "A.M";
}
}

break;

case 2: // agregar algo a la agenda
System.out.println(
"1: Lunes | 2: Martes | 3: Miercoles | 4: Jueves | 5: Viernes | 6: Sabado | 7: Domingo");
System.out.print("Dia: ");
IndiceDia = InputInt.nextInt();
while (IndiceDia < 1 || IndiceDia > 7) {
System.out.println("No ha seleccionado de manera correcta. . .");
System.out.println(
"1: Lunes | 2: Martes | 3: Miercoles | 4: Jueves | 5: Viernes | 6: Sabado | 7: Domingo");
System.out.print("Dia: ");
IndiceDia = InputInt.nextInt();
}

/*
* El sistema de agregado de tareas esta bien, pero ¿es
* necesario rellenar la agenda entera para todo un dia? Podria
* preguntarle al usuario que me diga que hora y horas desea
* agregar informacion.
*/
for (int j = 0; j < 24; j++) {
System.out.println("El dia " + DiasSemana[IndiceDia - 1] + " a las " + hora + " " + Formato + ": "
+ DiasDatos[j]);
DiasDatos[j] = InputStr.nextLine();
if (DiasDatos[j].equals("")) {
DiasDatos[j] = "(Vacio)";
}
hora++;
if (hora == 13) {
hora = 1;
}
if (Formato.equals("A.M") && hora == 12) {
Formato = "P.M";
} else if (Formato.equals("P.M") && hora == 12) {
Formato = "A.M";
}
}
break;

case 3: // salir
prog = false;
System.out.println("Usted ha salido de su agenda. . .");
break;
}
}

InputInt.close();
InputStr.close();
}

Voy a comentarte dos puntos solamente:

1.- Hay 3 variables que no se usan en todo el código, estas son, respectivamente "AgendaDatos", "HorasColumnas", y "DiasFilas". De hecho, fíjate que al quitarlas o comentarlas, no aparece ningún fallo y el programa sigue funcionando igual. Para un ejercicio donde te piden expresamente el uso de un array bidimensional y al final no usarlo... es un fallo grande, ya que no cumples con lo exigido. De hecho, en vez de usar el array has escogido una gran sentencia de switches con multitud de opciones.

2.- De cara sobretodo al futuro, ten presente una cosa: cuando te veas que haces varios casos para cada una de las posibilidades que se te presentan, piensa que no lo estás haciendo bien. Bueno, igual "no hacer bien" es falso, digamos que no estás programando de la mejor de las maneras. Una forma más genérica que aglutine todos los casos que quieres comprobar, o una simplificación del código a algo más simple e igual de válido no sólo te ahorrará tiempo, sino que también líneas y líneas de código.

Por ejemplo, para cada vez que querías mirar la agenda o modificarla, escribías los 7 case de la semana entera, ¿y si te pidieran hacer la agenda de un mes? ¿Escribirías 30 case? No, ¿verdad? A eso mismo me refería. Además de que dentro de cada case siempre hacías lo mismo, ya fuera para simplemente ver la agenda de ese día o para agregar entradas. Cuando te veas en estas circunstancias (de repetir lo mismo muchas veces) piensa en lo que te he comentado en el párrado anterior.
Si te fijas, he borrado todos los case dejando solamente lo que hacías dentro de uno, e igualmente funciona todo correcto.


Por último, y esto ya es una sugerencia para mejorar tu programa (independientemente de que te lo pida o no el ejercicio), me he fijado que cuando quiero agregar datos a un día en concreto, tengo que rellenar la agenda completa para ese día. ¿Crees que es realmente necesario? ¿Y si el usuario solamente quiere anotar lo que va a hacer un viernes a las 3 PM? ¿Tiene que recorrer la agenda entera? Resulta bastanta trabajoso. Te he puesto una anotación sobre ello en el código de arriba.


Para no terminar con un mal sabor de boca te digo lo que al principio, me ha gustado mucho tu manera de presentar el programa (al margen de que esté bien o no), y eso suma muchos puntos en cuando a calidad y entendimiento (igual algunas que otras anotaciones a los márgenes hubieran venido bien). Te animo a que sigas haciendo ejercicios y practicando, que es como mejor se aprende!

Y gracias por pasar la web, me la he guardado. Seguro que me servirá!

19
Bueno, tras googlear un rato he descubierto algo que ni sabía y quizás me ponga con ello más adelante.

Como explicación general de los patrones existentes y la clasificación que tienen.

Sobre el patrón MVC que me comentaste y que puede aplicarse a algo más que la web. También explica el DAO y el DTO

Patrón Strategy. El artículo tiene enlaces a otros más.

Es un curso de pago en Udemy, pero la presentación de lo que dan es bastante atractiva, y si no, pues de orientación creo que está bastante bien.

Estas cosas simplemente las he sacado de Google, nada mío porque como dije, no sabía ni de esto. Para un programador, la curiosidad es fundamental, por ello te recomiendo que antes de preguntar algo....vamos a llamarlo "genérico" pruebes a buscarlo en Internet.

20
No entiendo del todo a qué te refieres con "patrones en proyectos Java", ¿podrías poner algunos links a más info? Desconozco eso de "MVC".

Por otra parte, si tuviera que hacer algo relacionado con un banco, así como las operaciones posibles (algo como un cajero electrónico, por ejemplo), debería de hacerme clases que me identifiquen perfectamente lo que quiero. Una clase cliente por ejemplo, la clase trabajador, una clase para las operaciones disponibles con mi saldo actual, etc.

No sé exactamente lo que pides, pero con lo que sea ya dices.

Páginas: [1] 2

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".