Java - PROBLEMA CON UN EJERCICIO

 
Vista:
Imágen de perfil de Rocio rojas

PROBLEMA CON UN EJERCICIO

Publicado por Rocio rojas (30 intervenciones) el 14/02/2023 16:39:21
Hola buenas tardes tengo un problema con un ejercicio que necito hacer para un trabajo importante y el ejercicio es el siguiente.

Crea una clase llamada PERSONA con las siguientes propiedades: nombre, apellido, nacionalidad y una función que se llame saludar que muestre un saludo
por pantalla.
Después crearás una clase llamada ITALIANO, subclase de PERSONA, que tendrá como propiedad: idioma principal cuyo valor estará ya definido y será italiano. Además, la clase ITALIANO establecerá que el valor de la nacionalidad
(propiedad que hereda de la clase PERSONA) estará ya definido y será siempre:
italiana. Por último, la clase incorporará un método llamado saludar que mostrará por pantalla un saludo similar a: “Bonjorno! Mi nombre es: ……... ……… , soy
de nacionalidad italiana y mi idioma principal es italiano.”
Tras la creación de las dos clases, deberás crear un programa que:
◼ Solicite al usuario los datos necesarios para crear un objeto de la clase Italiano. Recuerda que el idioma y la nacionalidad ya tienen valores
definidos por lo que no se le deberían preguntar al usuario.
◼ El programa deberá contener un método que reciba los datos introducidos por el usuario para crear con ellos un objeto/instancia de la
clase italiano.
◼ Por último, se deberá mostrar por pantalla el mensaje del saludo,
llamando a la función saludar desde el objeto de la clase ITALIANO
que se ha creado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON UN EJERCICIO

Publicado por Kabuto (1383 intervenciones) el 14/02/2023 17:23:35
¿Y cuál es el problema? ¿Dónde te atascas?
Muestra el código que tengas, hasta donde hayas llegado y te ayudamos a partir de ahí.
Al menos la clase Persona, no deberías tener problemas para crearla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON UN EJERCICIO

Publicado por Rocio (30 intervenciones) el 14/02/2023 17:37:58
Hola buenas no me deja subir la imagen para enviarte por donde me quede estancada y necesito hoy urgentemente el ejercicio hecho por favor ayúdeme
escríbame a mi correo electronico:[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON UN EJERCICIO

Publicado por Kabuto (1383 intervenciones) el 15/02/2023 17:43:55
A ver, la clase Persona puede ser tan simple como esto.
Ni siquiera requiere de un constructor.

1
2
3
4
5
6
7
8
9
10
11
12
public class Persona {
 
	protected String nombre;
	protected String apellido;
	protected String nacionalidad;
 
	public void saludar() {
		System.out.println("Hola, soy " + nombre + " " + apellido +
				" y mi nacionalidad es " + nacionalidad);
	}
 
}

La clase Italiano, simplemente ha de heredar de Persona.
Añade un atributo con valor constante(no debe ser posible modificarlo) y sobre escribe(Override) el método saludar() que está heredando.
Aquí si pondremos un constructor que reciba nombre y apellidos. El atributo "nacionalidad" no se pide al usuario, irá predefinido en el constructor.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Italiano extends Persona {
 
	final private String IDIOMA = "italiano";
 
	public Italiano(String nombre, String apellido) {
		this.nombre = nombre;
		this.apellido = apellido;
		this.nacionalidad = "italiana";
	}
 
	@Override
	public void saludar() {
		System.out.println("Bonjorno! Mi nombre es: " + nombre + " " + apellido +
				" , soy de nacionalidad " + nacionalidad + " y mi idioma principal es " + IDIOMA);
	}
 
}


Y ahora un programa "main" donde pedir datos y mediante un método, crear un italiano para que nos salude en pantalla.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Main {
 
	public static void main(String[] args) {
 
		Scanner teclado = new Scanner(System.in);
 
		System.out.print("Indique nombre: ");
		String nom = teclado.nextLine();
		System.out.print("Indique apellido: ");
		String ape = teclado.nextLine();
 
		Italiano personaItal = crearItaliano(nom, ape);
 
		System.out.println();
		personaItal.saludar();
 
		teclado.close();
 
	}
 
	private static Italiano crearItaliano(String nombre, String apellido) {
		return new Italiano(nombre, apellido);
	}
 
}

Al ejecutarlo, podemos crear un italiano que nos saludará:

imagen_2023-02-15_174517366


Y ya está, con esto se cumplen los objetivos del enunciado.

En este caso, al "italiano" le estamos dando los valores de sus atributos mediante el constructor.
También se podría añadir métodos "set", como setNombre() y setApellidos() para darle los valores sin usar un constructor.

Ambas posibilidades son válidas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

PROBLEMA CON UN EJERCICIO

Publicado por rociorojas (1 intervención) el 15/02/2023 17:47:26
MUCHÍSIMAS GRACIAS DE VERDAD TE LO AGRADEZCO MUCHÍSIMO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON UN EJERCICIO

Publicado por Rocio (30 intervenciones) el 15/02/2023 22:19:10
image
Hola buenas mira ise lo que usted me dijo pero me sigue saliendo error
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON UN EJERCICIO

Publicado por Kabuto (1383 intervenciones) el 16/02/2023 18:03:56
Es mejor si creas el proyecto con los tres archivos separados, uno para cada clase:
-Persona.java
-Italiano.java
-Main.java

Y todos dentro del mismo package:

imagen_2023-02-16_173832285


¿Se puede hacer todo dentro de un único archivo?
Sí, no es lo óptimo, pero puede hacerse.

En ese caso, no hagas clase Main, y haz que Persona tenga los métodos estáticos de main() y crearItaliano().

Así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import java.util.Scanner;
 
public class Persona {
 
	protected String nombre;
	protected String apellido;
	protected String nacionalidad;
 
	public void saludar() {
		System.out.println("Hola, soy " + nombre + " " + apellido +
				" y mi nacionalidad es " + nacionalidad);
	}
 
 
 
	public static void main(String[] args) {
 
		Scanner teclado = new Scanner(System.in);
 
		System.out.print("Indique nombre: ");
		String nom = teclado.nextLine();
		System.out.print("Indique apellido: ");
		String ape = teclado.nextLine();
 
		Italiano personaItal = crearItaliano(nom, ape);
 
		System.out.println();
		personaItal.saludar();
 
		teclado.close();
 
	}
 
	private static Italiano crearItaliano(String nombre, String apellido) {
		return new Italiano(nombre, apellido);
	}
 
}
 
class Italiano extends Persona {
 
	final private String IDIOMA = "italiano";
 
	public Italiano(String nombre, String apellido) {
		this.nombre = nombre;
		this.apellido = apellido;
		this.nacionalidad = "italiana";
	}
 
	@Override
	public void saludar() {
		System.out.println("Bonjorno! Mi nombre es: " + nombre + " " + apellido +
				" , soy de nacionalidad " + nacionalidad + " y mi idioma principal es " + IDIOMA);
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON UN EJERCICIO

Publicado por Rocio (30 intervenciones) el 20/02/2023 16:44:09
Hola buenas perdón por no responder antes mira hice exactamente lo que me dijiste y esto me salió, creo que fallo en algo
image
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON UN EJERCICIO

Publicado por Kabuto (1383 intervenciones) el 21/02/2023 11:17:40
Comprueba que la palabra "Italiano" está escrita con la I mayúscula en todas partes.

También el archivo "Italiano.java", que parece que lo has escrito con la i minúscula.

Los nombres de las clases, y sus correspondientes archivos, siempre se han de escribir con la primera letra mayúscula.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON UN EJERCICIO

Publicado por Rocio (30 intervenciones) el 21/02/2023 14:00:06
Ah ok muchas gracias ahora en la tarde lo compruébalo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON UN EJERCICIO

Publicado por Rocio (30 intervenciones) el 21/02/2023 17:24:21
Muchas gracias ahora si me salió el ejercicio correctamente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 21/02/2023 17:46:22
Hola buenas tardes ante todo, mira sé que me vas a mandar bien lejos pero de los 20ejercicio que debería de entregar tenia duda con 3 y uno de ello pude solucionarlo independientemente y el otro fue el que usted me ayudo pero sería tan amable de ayudarme con el último y entrego ya el trabajo
image
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 22/02/2023 08:52:17
No voy a mandarte lejos por pedir ayuda..., aunque quizás sí por poner las fotos con el texto girado ja ja...

La tupla con los números premiados, como habrás imaginado, la representaremos con un vector.
Usando la clase Random, la llenaremos con 15 valores aleatorios entre 0 y 100

Una de las cosas que nos piden es buscar el valor mayor y menor dentro de la tupla.
Esto podemos hacerlo con sendos métodos, para separar código y no sobrecargar el método main principal.

Ahora el proceso es pedirle al usuario un número y comprobar que premio tiene según las veces que se repita su número en la tupla.
Nos dicen que en el caso de no tener premio, podrá volver a intentarlo con otro número si así lo desea.
Así que este proceso debería ir dentro de un bucle while() para poder repetirlo si el usuario lo solicita.

Para poder reintentarlo ha de responder "si" o "no". Si responde otra cosa hemos de volver a preguntarle.
Esto podríamos hacerlo con un bucle, pero fíjate que para esto he usado un "método recursivo".
En método recursivo es una función que se llama a sí misma hasta que se cumpla una condición. En este caso, lo que hago es que si responde bien "si" o "no", retorno esa respuesta y el método termina.
Pero si responde cualquier otra cosa, lo que retorno es una llamada recursiva, es decir, el método se llama a sí mismo para volver a ejecutarse y se retornará el resultado de esta llamada recursiva (que podría ser de nuevo otra llamada recursiva...)

No se si te han explicado ya la "recursividad". Si no lo han hecho, en algún momento lo harán, así que recuerda que en este ejercicio tienes un ejemplo sencillo de recursividad.


Aquí te dejo el código, en este caso será todo en un único archivo ya que no hay otra clase más que la principal.

Revisa bien el código y pregunta tantas veces como necesites lo que no entiendas.
No te conformes solo con tener una solución, asegúrate de que la comprendes y te sirve de aprendizaje.
Un saludo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import java.util.Random;
import java.util.Scanner;
 
public class TuplaLoteria {
 
	//Vector/Tupla que contendrá los 15 valores premiados
	private static int[] tupla = new int[15];
	//Scanner para leer por teclado
	private static Scanner teclado = new Scanner(System.in);
 
	public static void main(String[] args) {
 
		//Creamos números ganadores en la Tupla
		Random azar = new Random();
		for (int i = 0; i < tupla.length; i++)
			tupla[i] = azar.nextInt(101);
		//Buscamos en la tupla el valor menor y el mayor
		int menor = buscarMenor(tupla);
		int mayor = buscarMayor(tupla);
 
		//Comienza proceso, puede repetirse si el usuario no resultó premiado
		boolean repetir = true;
 
		while (repetir) {
 
			//Pedimos un positivo
			int valor = 0;
			do {
				System.out.print("Introduzca un valor positivo: ");
				valor = Integer.parseInt(teclado.nextLine());
			}while(valor < 0);
 
			/*
			 *Recorremos la tupla para mostrar los valores en pantalla.
			 *De paso, aprovechamos ese recorrido para comprobar cuantas veces
			 *se repite el valor del usuario en la tupla
			 */
			int vecesRepite = 0;
			System.out.println("\n\tNumeros premiados:");
			for (int valorTupla: tupla) { //Usamos un "for each"
				System.out.print(valorTupla + " ");
				if (valorTupla == valor)
					vecesRepite++;
			}
			//También mostramos el menor y el mayor
			System.out.println("\n\nNumero premiado menor: " + menor);
			System.out.println("Numero premiado mayor: " + mayor);
 
			//Por último, comprobamos si el usuario ha sido premiado y cuántas veces
			System.out.println("\n\t\tRESULTADO");
			if (vecesRepite == 1) {
				System.out.println("Felicidades!! Su numero: " + valor + " esta en la lista de ganadores.");
				System.out.println("Importe del premio: 15€");
				repetir = false;
			}
			else if (vecesRepite > 1) {
				//Calculamos premio, son 15€ + 5€ por cada repeticion extra
				int premio = 15;
				premio += (vecesRepite - 1) * 5;
				System.out.println("Felicidades!! Su numero: " + valor + " esta en la lista de ganadores "
						+ " y se ha repetido " + vecesRepite + " veces.");
				System.out.println("Importe del premio: " + premio + " €");
				repetir = false;
			}
			else { //No ha sido premiado
				System.out.println("Su numero no ha sido premiado.");
				System.out.print("¿Probar con otro número?(SI/NO): ");
				String respuesta = pedirSioNo();
				if (respuesta.equals("NO"))
					repetir = false;
			}
		}
		System.out.println("\n\t\tFIN DE PROGRAMA");
		teclado.close();
 
	}
 
	private static int buscarMenor(int[] vector) {
		//Tomamos primer valor del vector como referencia
		int menor = vector[0];
		//Ahora comparamos con los siguientes valores, buscando el menor
		for (int i = 1; i < vector.length; i++)
			if (vector[i] < menor)
				menor = vector[i];
 
		return menor;
	}
 
	private static int buscarMayor(int[] vector) {
		//Tomamos primer valor del vector como referencia
		int mayor = vector[0];
		//Ahora comparamos con los siguientes valores, buscando el mayor
		for (int i = 1; i < vector.length; i++)
			if (vector[i] > mayor)
				mayor = vector[i];
 
		return mayor;
	}
 
	private static String pedirSioNo() {
		String resp = teclado.nextLine().toUpperCase();
		switch(resp) {
		case "SI":
		case "NO":
			return resp; //Respuesta es correcta
		default:
			System.out.print("No hemos logrado entender su respuesta. Repita por favor(SI/NO): ");
			return pedirSioNo(); //Llamada recursiva
		}
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 22/02/2023 16:08:25
Jejeje perdón por poner las fotos así es que es como me sale a la hora de hacerla pero para la próxima lo tengo en cuenta :) ahora a la tarde si tengo duda con el ejercicio algo que no entienda a la hora de terminarlo le digo, y MUCHÍSIMAS GRACIAS TE LO AGRADEZCO MUCHÍSIMO ERES UN AMOR DE PERSONA, No sabe lo importante que es esto. Gracias de verdad :):)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 24/02/2023 00:07:33
Hola buenas noches, perdón por las horas pero ando con el ordenador y no me sale el resultado que debería de salir creo que fue por la carpeta que creer o algo, porfavor si pudiera decirme donde fallo se lo agradecería, un saludo.
image
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 26/02/2023 10:30:06
Pues no sabría decirte donde está el problema.
Dice que no encuentra la clase principal.

En cualquier caso, como ya tienes el código escrito, quizás sea más fácil resolverlo creando un nuevo proyecto otra vez
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 26/02/2023 16:55:32
Ah ok, y como hago entonces para resolver eso
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 27/02/2023 17:40:09
Creas un proyecto nuevo.
Como si comenzases desde el principio, solo que ahora ya dispones del código del programa.

Nuevo proyecto, nuevo archivo .java, pegas el código que ya tenemos publicado en este tema y ya está. Si tampoco funciona, entonces quizás es problema de configuración del programa IDE que estés usando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

Ejercicio resuelto

Publicado por Rocio (30 intervenciones) el 02/03/2023 00:51:28
MUCHISIMAS GRACIAS! ya pude solucionar el problema como me dijiste creer otra carpeta y me salio correctamente el ejercicio resuelto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocío

PROBLEMA CON el último ejercicio

Publicado por Rocío (30 intervenciones) el 02/03/2023 01:12:23
Hola buenas noches perdón por las molestias pero es que tengo duda con dos ejercicio que no sé cómo resolverlo seria tan amable de ayudarme por favor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 03/03/2023 17:01:59
Publica aquí los enunciados y yo, o cualquier otro forero, intentaremos ayudarte si está en nuestras manos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 03/03/2023 17:38:24
Hola buenas tardes espero que estes muy bien, tengo tres ejercicio como el cual tengo mal pero solo dos de ellos son lo más importante porque el otro lo llego a entender y manejar, sería tan amable de ayudarme con los dos ejercicio porfavor
image
image
image
image
image
Los 3 últimos archivos csv son los programa que mientras información del último ejercicio
Porfavor ayudarme necesito urgentemente :(:(:(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 03/03/2023 19:27:07
Será más fácil ayudarte si adjuntas los archivos .csv en un mensaje (puedes agruparlos en un archivo zip).
Los adjuntas con el botón que hay debajo del cuadro texto cuando escribes un mensaje en el foro

imagen_2023-03-03_185008222


Tampoco me queda claro si necesitas ayuda en todos los ejercicios en los que hay que trata el archivo csv, o solo en algunos...

¿Has conseguido leer el archivo .csv?
Lo ideal sería leerlo y crear una matriz con todos los datos.

Para no repetir ese proceso en cada ejercicio, podemos crear una clase con un método que se encargue exclusivamente de leer el archivo csv que le indiquemos y retorne una matriz de String con todos los datos obtenidos.

Así en cada ejercicio podemos llamar a esta clase para que nos proporcione esa matriz.
Esta podría ser esa clase:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class ProcesadorCSV {
 
	public static String[][] procesar(String archivoCSV) throws IOException {
 
		String[][] datosCSV; //Matriz con los datos CSV procesados
		ArrayList<String> leidas = new ArrayList<String>(); //ArrayList para leer lineas del archivo antes de procesar
 
		//Hacemos lectura
		BufferedReader lector = new BufferedReader(new FileReader(archivoCSV));
		String linea = lector.readLine();
		while(linea != null) {
			leidas.add(linea);
			linea = lector.readLine();
		}
		lector.close();
 
		//Lectura finalizada, inicializamos matriz y comenzamos proceso
		datosCSV = new String[leidas.size()][14];
		for (int i = 0; i < datosCSV.length; i++)
			datosCSV[i] = leidas.get(i).split(",");//La , separa los datos CSV
 
		//Proceso terminado, retornamos matriz
		return datosCSV;
	}
 
}

Se trata de un método estático que lee el archivo completo y cuando tenemos todas las líneas, ya podemos inicializar la matriz porque ya podemos saber sus dimensiones, que será el nº de lineas obtenidas x 14 registros que tiene cada linea CSV.
Así que recorremos las líneas leídas y con el método split() separamos los datos delimitados por las comas del archivo csv.

El método lanzará una excepción en el caso de no encontrar o no poder leer el archivo.

Y así, en cada ejercicio lo invocamos al principio (capturando la posible excepción) y ya tendremos la matriz con la que trabajar.

Pongo de ejemplo el primer ejercicio que pide mostrar los 5 primeros registros. Lo de "comprobar los datos faltantes" no se que quiere decir.
Supongo que se refiere a que a las líneas del archivo CSV le faltan los 2/3 primeros datos. Pero no se que comprobación quiere hacer, esos datos no están y punto....

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.io.IOException;
import java.util.Arrays;
 
public class Ej01 {
 
	public static void main(String[] args) {
 
		try {
			//Obtencion de datos
			String[][] datosCSV = ProcesadorCSV.procesar("COVID_01-01-2021.csv");
 
			//Cabeceras de columnas
			System.out.println(Arrays.toString(datosCSV[0]));//Están en la primera línea
			System.out.println();
 
			//Mostramos 5 primeros registros, saltamos primera linea porque son la cabeceras ya mostradas
			for (int i = 1; i < 6; i++)
				System.out.println(Arrays.toString(datosCSV[i]));
 
		} catch (IOException e) {
			System.out.println("Archivo CSV no encontrado o ilegible");
			System.out.println(e.getMessage().toString());
		}
 
		System.out.println("\n\t\tFIN DE PROGRAMA");
 
	}
 
}


Y también el segundo ejercicio, que quizás muestra mejor como buscar y mostrar datos concretos
En este caso, pedimos un país y mostramos ciertos datos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.io.IOException;
import java.util.Scanner;
 
public class Ej02 {
 
	public static void main(String[] args) {
 
		try {
			//Obtencion de datos
			String[][] datosCSV = ProcesadorCSV.procesar("COVID_01-01-2021.csv");
			Scanner teclado = new Scanner(System.in);
 
			//Pedimos país
			System.out.print("Indique pais: ");
			String pais = teclado.nextLine();
			teclado.close();
 
			//Lo buscamos en los datos CSV
			boolean encontrado = false;
 
			for (int i = 1; i < datosCSV.length; i++) {
				if (datosCSV[i][3].equals(pais)) {
					encontrado = true;
					System.out.println("\nCasos confirmados: " + datosCSV[i][7]);
					System.out.println("Fallecidos: " + datosCSV[i][8]);
					System.out.println("Recuperados: " + datosCSV[i][9]);
					System.out.println("Casos activos: " + datosCSV[i][10]);
					break; //Fin de la búsqueda
				}
			}
 
			if (!encontrado)
				System.out.println("No hay datos para el pais indicado");
 
		} catch (IOException e) {
			System.out.println("Archivo CSV no encontrado o ilegible");
			System.out.println(e.getMessage().toString());
		}
 
		System.out.println("\n\t\tFIN DE PROGRAMA");
	}
 
}

Al ejecutarlo, en pantalla veremos que se muestran los datos del país solicitado:

imagen_2023-03-03_192122823


Me quedo sin tiempo, intenta subir los archivos csv, ya que no voy a escribirlos completamente a mano.
E indica si es algún ejercicio en concreto el que se te atasca o son todos.
Cuando pueda intentaré mostrar más ejercicios, pero quizás ahora consigas solucionarlos tomando como ejemplo los que he podido hacer ahora.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 03/03/2023 20:27:30
Holaa buenas tardes mira te dejo aqui el archivo del ejercicio 4, y con el cual tengo problema es con todo con los dos que puse. un saludo!
640221b15b7f6-image
ese es el ejercicio del archivo que añadí


64022197e15ee-image
y ese es el otro ejercicio con el cual no se como resolver. Pero ese no tiene archivos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 04/03/2023 14:11:03
A ver, sigamos con los CSV.

Ahora que dispongo de los archivos CSV, veo que un país, o una provincia..., puede aparecer en distintas líneas ya que pueden hacer referencia a una ciudad concreta.

Esto significa que el apartado 2 que hicimos antes, el de pedir un país y mostrar determinados datos, no es del todo correcto. Porque solo muestra los datos de la primera línea que encuentre para dicho país, pero ignora todas las demás.
Lo correcto sería recuperar los datos de todas las líneas de ese país, y sumarlos, para mostrar la información completa.

Así que vamos a reescribir el programa anterior.
Añadiremos 4 contadores y ya no interrumpiremos la búsqueda al encontrar una línea que coincida con el país, si no que la búsqueda continuará para ir sumando los nuevos datos que se puedan encontrar.

Ahora el ejercicio queda así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class Ej02 {
 
	public static void main(String[] args) {
 
		try {
			//Obtencion de datos
			String[][] datosCSV = ProcesadorCSV.procesar("COVID_01-01-2021.csv");
			Scanner teclado = new Scanner(System.in);
 
			//Pedimos país
			System.out.print("Indique pais: ");
			String pais = teclado.nextLine();
			teclado.close();
 
			//Lo buscamos en los datos CSV
			boolean encontrado = false;
			int casosConf = 0, fallecidos = 0, recuperados = 0, casosAct = 0;
 
			for (int i = 1; i < datosCSV.length; i++) {
				if (datosCSV[i][3].equals(pais)) {
					encontrado = true;
					//Acumulamos datos
					casosConf += Integer.parseInt(datosCSV[i][7]);
					fallecidos += Integer.parseInt(datosCSV[i][8]);
					recuperados += Integer.parseInt(datosCSV[i][9]);
					casosAct += Integer.parseInt(datosCSV[i][10]);
				}
			}
 
			if (!encontrado)
				System.out.println("No hay datos para el pais indicado");
			else {
				System.out.println("\nCasos confirmados: " + casosConf);
				System.out.println("Fallecidos: " + fallecidos);
				System.out.println("Recuperados: " + recuperados);
				System.out.println("Casos activos: " + casosAct);
			}
 
		} catch (IOException e) {
			System.out.println("Archivo CSV no encontrado o ilegible");
			System.out.println(e.getMessage().toString());
		}
 
		System.out.println("\n\t\tFIN DE PROGRAMA");
	}
 
}


Sigamos
El apartado 3 nos pide una lista de provincias en las que NO hayan pacientes recuperados, o sea, valor 0.
El valor de los pacientes recuperados lo tenemos en la columna 9 (contando desde 0) de la matriz y el nombre de la provincia lo tenemos en la columna 2.

Así que hay que recorrer cada fila de la matriz, coger el valor de la columna 9 y ver si es "0".
Si lo es, cogemos el valor de la columna 2 y introducimos en un ArrayList donde haremos el listado de provincias.

Pero no es tan fácil. Como dije antes, una misma provincia puede aparecer varias veces en el archivo CSV porque puede tener datos referentes a distintas ciudades. Y en una línea puede que tenga 0 pacientes recuperados, pero en otra puede que no, porque va a depender de la ciudad.

Como solucionar esto.
Bueno, podemos crear una pequeña clase interna con dos datos, nombre de provincia y pacientes recuperados.
Al recorrer la matriz iremos creando nuevos objetos de esta clase al encontrar una nueva provincia, y si encontramos una provincia ya registrada, lo que haremos será sumarle el número de pacientes recuperados que vayamos encontrando.

Así luego, de esta lista que hemos creado solo mostraremos las que hayan conservado 0 pacientes recuperados.


Esta clase interna puede ser muy sencilla, incluso con atributos públicos para no tener que escribir getters/setters.
Pero si le daremos un método equals(). Con este método, será muy fácil comprobar si ya existe una provincia en el ArrayList y saber en que posición se encuentra para poder sumarle pacientes.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import java.io.IOException;
import java.util.ArrayList;
 
public class Ej03 {
 
	//Clase interna para representar una provincia y sus pacientes recuperados
	private static class Provincia {
		public String nombre;
		public int recuperados;
 
		public Provincia(String prv, int recup) {
			nombre = prv;
			recuperados = recup;
		}
 
		@Override
		public boolean equals(Object obj) {
			if (obj instanceof Provincia) {
				Provincia otraProv = (Provincia) obj;
				return nombre.equals(otraProv.nombre);
			}
			else
				return false;
		}
	}
 
	//Método principal
	public static void main(String[] args) {
 
		try {
			String[][] datosCSV = ProcesadorCSV.procesar("COVID_01-01-2021.csv");
 
			//Buscamos provincias sin pacientes recuperados
			var provincias = new ArrayList<Provincia>();
 
			for (int i = 1; i < datosCSV.length; i++) {
 
				//Creamos una provincia temporal con esta fila de la matriz
				Provincia temp = new Provincia(datosCSV[i][2], Integer.parseInt(datosCSV[i][9]));
 
				//Comprobamos si ya existe en el listado
				if (provincias.contains(temp)) {
					//Ya existe, no la añadimos pero sumamos sus pacientes recuperados
					int posicion = provincias.lastIndexOf(temp);
					provincias.get(posicion).recuperados += temp.recuperados;
				}
				else //No existe, la añadimos
					provincias.add(temp);
 
			}
 
			//Mostramos resultados
			System.out.println("\tLISTA DE PROVINCIAS SIN PACIENTES RECUPERADOS\n");
			for (Provincia prv: provincias)
				if (prv.recuperados == 0) //Solo provincias sin recuperados
					System.out.println("--> " + prv.nombre);
 
			System.out.println("\n\t\tFIN DE PROGRAMA");
 
		} catch (IOException e) {
			System.out.println("Archivo CSV no encontrado o ilegible");
			System.out.println(e.getMessage().toString());
		}
 
	}
 
}

Cuando pueda iremos viendo los siguientes.
Pero ahora que se va viendo más claro como consultar datos de la matriz que obtenemos al procesar el archivo CSV, no dudes en ir intentando por tu parte hacer los otros apartados.
No importa si no lo consigues, se aprende mucho más cometiendo errores y atascándose que no interpretando las soluciones que den otros.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 04/03/2023 23:16:54
Muchas gracias! Si el caso que lo intente unas cuantas de veces y lo entregue pero estaba mal entero por eso pedí ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 05/03/2023 00:35:53
Cuarto apartado.
Es parecido al anterior, de nuevo podemos ayudarnos creando una clase llamada Pais con los atributos nombre, casos confirmados, fallecidos y recuperados.
Crearemos una lista de Paises donde acumulemos los valores de esos datos.

De esa lista, se nos pide que mostremos los 10 con más casos confirmados. Para esto nos interesa ordenar la lista de mayor a menor número de casos y para facilitarlo, a la clase Pais le podemos implementar la interfaz Comparable y en el método compareTo() escribir el código necesario para indicar que los objetos Pais se han de ordenar según el atributo de "casos" y además de mayor a menor.

Una vez ordenada, solo tendremos que mostrar los 10 primeros de la lista.

Este sería el código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import java.io.IOException;
import java.util.ArrayList;
 
public class Ej04 {
 
	private static class Pais implements Comparable<Pais> {
		public String nombre;
		public int casos;
		public int fallecidos;
		public int recuperados;
		public Pais(String nombre, int casos, int fallecidos, int recuperados) {
			this.nombre = nombre;
			this.casos = casos;
			this.fallecidos = fallecidos;
			this.recuperados = recuperados;
		}
		//Dos paises se consideran iguales si tienen el mismo nombre
		@Override
		public boolean equals(Object obj) {
			if (obj instanceof Pais) {
				Pais otroPais = (Pais) obj;
				return nombre.equals(otroPais.nombre);
			}
			else
				return false;
		}
		//Esto ayudará a ordenar el ArrayList según casos confirmados
		@Override
		public int compareTo(Pais otroPais) {
			return Integer.compare(casos, otroPais.casos) * -1;// -1 para que ordene de mayor a menor
		}
		//Construimos un String para mostrar en pantalla
		@Override
		public String toString() {
			return String.format("--> Nombre: %s Casos confirmados: %d\nFallecidos: %d Recuperados: %d\n",
					nombre, casos, fallecidos, recuperados);
		}
	}
 
	public static void main(String[] args) {
 
		try {
			String[][] datosCSV = ProcesadorCSV.procesar("COVID_01-01-2021.csv");
 
			var paises = new ArrayList<Pais>();
			//Creamos lista de paises
			for (int i = 1; i < datosCSV.length; i++) {
 
				Pais temp = new Pais(datosCSV[i][3], Integer.parseInt(datosCSV[i][7]),
						Integer.parseInt(datosCSV[i][8]), Integer.parseInt(datosCSV[i][9]));
 
				if (paises.contains(temp)) {
					int posicion = paises.indexOf(temp);
					paises.get(posicion).casos += temp.casos;
					paises.get(posicion).fallecidos += temp.fallecidos;
					paises.get(posicion).recuperados += temp.recuperados;
				}
				else
					paises.add(temp);
			}
 
			//Lista creada, pedimos al ArrayList que ordene sus elementos
			paises.sort(null);//Indicando null, el orden se hará según hemos escrito en el compareTo() de la clase Pais
 
			//Lista ordenada de mayor a menor numero de casos confirmados. Mostramos los 10 primeros
			System.out.println("\t10 PAISES CON MAYOR NUMEROS DE CASOS CONFIRMADOS");
			for (int i = 0; i < 10; i++)
				System.out.println(paises.get(i));
 
			System.out.println("\n\t\tFIN DE PROGRAMA");
 
		} catch (IOException e) {
			System.out.println("Archivo CSV no encontrado o ilegible");
			System.out.println(e.getMessage().toString());
		}
 
	}
 
}

Si lo ejecutamos...., pues resulta que nos salta una excepción


excepcion


¿Qué está pasando?
Pues que al construir un pais, se ha encontrado con un dato que no se ha podido convertir a Integer, porque en realidad es un Double (un valor con punto decimal)

¿Y por qué se ha encontrado con eso?
Pues resulta que en el archivo CSV, algunos campos para el nombre de país usan una coma para separar dos palabras.
Esto confunde a nuestro "procesador", ya que él separa los datos según las comas que encuentra, así que las líneas que están usando estas comas "extra", sus datos no están siendo bien ubicados en la matriz de datos.

datosMal

¿Cómo solucionamos esto?

Pues a ver.
Se podría intentar mejorar el Procesador para que analice si una línea tiene estos nombres compuestos con una coma en medio y a ver entonces como hacer para recoger correctamente los datos.
Pero me parece que sería complicar demasiado las cosas y no creo que el propósito de este ejercicio sea construir un procesador de textos avanzado.

Podemos hacer un "parche".
El crear el Pais "temporal", que es donde puede producirse la excepción, lo haremos dentro de un try catch.
En caso de producirse la excepción, volveremos a intentar crear el objeto pero esta vez cambiaremos los números de las columnas. Como sabemos que es una (puñetera) coma en medio del "nombre de pais" la que nos está fastidiando, pues basta con que ahora lo intentemos en las siguientes columnas.

Es decir, si normalmente nuestros datos estarían en las columnas 7, 8 y 9..., pues en caso de excepción los vamos a buscar en 8, 9 y 10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public static void main(String[] args) {
 
		try {
			String[][] datosCSV = ProcesadorCSV.procesar("COVID_01-01-2021.csv");
 
			var paises = new ArrayList<Pais>();
			//Creamos lista de paises
			for (int i = 1; i < datosCSV.length; i++) {
				Pais temp = null;
				try {
					temp = new Pais(datosCSV[i][3], Integer.parseInt(datosCSV[i][7]),
							Integer.parseInt(datosCSV[i][8]), Integer.parseInt(datosCSV[i][9]));
				}
				catch(Exception ex) {
					temp = new Pais(datosCSV[i][3] + ", " + datosCSV[i][4], Integer.parseInt(datosCSV[i][8]),
							Integer.parseInt(datosCSV[i][9]), Integer.parseInt(datosCSV[i][10]));
				}
 
				if (paises.contains(temp)) {
					int posicion = paises.indexOf(temp);
					paises.get(posicion).casos += temp.casos;
					paises.get(posicion).fallecidos += temp.fallecidos;
					paises.get(posicion).recuperados += temp.recuperados;
				}
				else
					paises.add(temp);
			}
 
			//Lista creada, pedimos al ArrayList que ordene sus elementos
			paises.sort(null);//Indicando null, el orden se hará según hemos escrito en el compareTo() de la clase Pais
 
			//Lista ordenada de mayor a menor numero de casos confirmados. Mostramos los 10 primeros
			System.out.println("\t10 PAISES CON MAYOR NUMEROS DE CASOS CONFIRMADOS");
			for (int i = 0; i < 10; i++)
				System.out.println(paises.get(i));
 
			System.out.println("\n\t\tFIN DE PROGRAMA");
 
		} catch (IOException e) {
			System.out.println("Archivo CSV no encontrado o ilegible");
			System.out.println(e.getMessage().toString());
		}
 
	}

Es un parche chapucero... pero ahora el programa funciona y parece que obtenemos los datos correctos.

resultado

Es un poco raro que el primer país con más casos confirmados, tenga 0 pacientes recuperados.
Me ha hecho pensar que quizás este arreglo que hemos hecho no esté dando buenos datos, pero he revisado el archivo CSV y efectivamente todas las líneas donde aparece el país "US" consta como 0 casos recuperados.

Así que, podemos darlo por solucionado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 05/03/2023 01:20:18
Muchas gracias de verdad no sabes lo agradecida que estoy porque no tenía ayuda de nadie para entender y para que me ayudara, si no fuera por los dos ejercicio que tuve mal que envié que son esos dos no molestaría pero de verdad no sabes lo importante que es esto para mi y una vez que termine de hacer estos dos ejercicio que son los finales te lo agradezco mucho de verdad eres un amor de persona! de los 20 que ice por mi cuenta solo tenía esos dos mal y es lo mas importante de la nota por eso quiero que me ayudes por favor porque yo lo ice pero lo entregue mal y solo me dan 3 oportunidades.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 05/03/2023 02:02:27
El tema de los nombres de países con comas intermedias que alteran el número de columnas, me ha dejado una espina clavada.
Además he visto que algunos nombre de países tienen, ya no solo una coma, si no dos. Es decir, es un único dato, que nuestro Procesador va interpretar como si fueran tres datos distintos.

Me he puesto a pensar en una forma fácil de arreglar esto y bueno, creo que he dado con una solución. Estos datos conflictivos son identificables porque comienzan y terminan con dobles comillas.

Así que he cambiado el código del Procesador. Antes de añadir un registro a la matriz compruebo si ese registro está compuesto por 14 datos.
Si son 14, pues podemos añadirlo a la matriz, no es necesario hacer nada.

Pero si no es 14, entonces procesamos ese registro para encontrar los datos que empiezan con " y agruparlo con los datos siguientes hasta encontrar el que cierra con ", para que consten como un único dato y no dos o tres.
Así obtendremos un registro "correcto" de 14 elementos.

He intentado que el código quede lo menos enrevesado posible.
Pregunta si algo no se entiende:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
public class ProcesadorCSV {
 
	public static String[][] procesar(String archivoCSV) throws IOException {
 
		String[][] datosCSV; //Matriz con los datos CSV procesados
		ArrayList<String> leidas = new ArrayList<String>(); //ArrayList para leer lineas del archivo antes de procesar
 
		//Hacemos lectura
		BufferedReader lector = new BufferedReader(new FileReader(archivoCSV));
		String linea = lector.readLine();
		while(linea != null) {
			leidas.add(linea);
			linea = lector.readLine();
		}
		lector.close();
 
		//Lectura finalizada, inicializamos matriz y comenzamos proceso
		datosCSV = new String[leidas.size()][14];
		for (int i = 0; i < datosCSV.length; i++) {
 
			String[] datos = leidas.get(i).split(",");
 
			if (datos.length == 14) { //Linea con las comas correctas, pues nos ha dado 14 columnas
				datosCSV[i] = datos; //Podemos meterlo en la matriz
			}
			else if (datos.length != 14){ //Linea con comas extra, tenemos más de 14 columnas, hay que reagrupar algunos datos
				//Sabemos que los datos a reagrupar, comienzan con dobles comillas
				//Buscaremos esos datos y reagruparemos en un nuevo array
				String[] correcto = new String[14];
 
				//Usaremos dos indices separados, uno para el array "correcto" y otro para el que tiene los datos
				int c = 0, d = 0;
 
				while (d < datos.length) {
					//Ojo, archivo CSV tiene algunos datos "vacíos" que resultan en cadenas vacías
					//No podemos preguntar si empiezan por " porque se producirá excepción
					if (datos[d].isBlank()) {
						correcto[c] = "";
					}
					else if (datos[d].charAt(0) == '"') { //Preguntamos si comienza con caracter "
						//Comienza con " , es un dato que se ha de agrupar con los siguientes
						//hasta encontrar el dato que acabe con "
						boolean agrupar = true;
						String agrupado = datos[d];
						while (agrupar) {
							d++; //siguiente dato
							agrupado += ", " + datos[d];//Agrupamos
							//Comprobamos si el dato correcto termina con "
							int charFinal = agrupado.length() - 1;
							if (agrupado.charAt(charFinal) == '"')
								agrupar = false; //Agrupacion terminada
						}
						correcto[c] = agrupado;
					}
					else { //No comienza con caracter " , es un dato normal y no requiere reagrupacion
						correcto[c] = datos[d];
					}
					//Incrementamos índices
					d++;
					c++;
				}
				//Ya tenemos un array "correcto" con 14 columnas
				datosCSV[i] = correcto;
			}
 
		}
 
		//Proceso terminado, retornamos matriz
		return datosCSV;
	}
 
}

Ahora, en el apartado 4, ya no es necesario hacer un try catch para construir objetos Pais. Con el nuevo Procesador parece que cada dato está en su columna correspondiente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 05/03/2023 02:23:02
Una pregunta es que tengo una duda del porque as tenido que cambia el Procesador
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 05/03/2023 12:26:48
Sí, mira.

Cada línea el archivo CSV, nos estaría dando 14 datos. Esto lo sabemos por la primera línea del archivo, que son las "cabeceras", es decir, los nombres de cada uno de esos 14 datos.

1
FIPS,Admin2,Province_State,Country_Region,Last_Update,Lat,Long_,Confirmed,Deaths,Recovered,Active,Combined_Key,Incident_Rate,Case_Fatality_Ratio

Esto significa que podemos construir una matriz (una tabla) de Nx14, donde N es el número de líneas que tenga el archivo CSV y 14 son los datos que nos está dando cada línea.

Bien, esos 14 datos están separados unos de otros por comas. Así es como los archivos CSV (Comma Separated Values) separa sus valores. Es una forma ultrasencilla de crear una hoja de cálculo, y de hecho programas como Excel pueden interpretar este tipo de archivos.

Entonces, si tenemos 14 datos separados por comas, significa que cada línea debería tener exactamente 13 comas.
Esta sería una línea "correcta".
1
,,,Uruguay,2021-01-02 05:22:33,-32.5228,-55.7658,19753,193,13990,5570,Uruguay,568.6399650864906,0.9770667746671392

Si cuentas las comas verás que hay 13. Incluso al principio hay comas con datos "vacíos". Esos datos corresponderían a FIPS, Admin2 y Province_State. ¿Por qué están vacías?
Pues porque cuando crearon esa línea no se tenían disponibles esos datos, así que quedaron vacíos. Pero sus comas están ahí, que es lo importante.

Yo al principio di por hecho que TODAS las líneas iban a tener 13 comas, así que construir la matriz iba a ser muy sencillo.
Cogemos cada línea, que es un String, y lo "troceamos" con el método split(","). Es decir, por cada coma que encuentra en el String, hace una nueva subcadena y las retorna en un vector.
Si hay 13 comas, tendremos un vector de 14 subcadenas, que son los 14 datos que proporciona cada línea CSV.

Pues estos vectores que nos está dando cada línea, los agrupamos en otro vector. Lo que nos da un array bidimensional, una matriz, de Nx14.

Esto es lo que hacía el Procesador al principio.


Pero, ¡oh sorpresa!, resulta que NO todas las líneas tienen 13 comas.
Hay muchas que incluyen comas extra porque un mismo dato, generalmente el nombre de una región, está compuesta de dos palabras separadas por una coma.

Esta línea por ejemplo, tiene 14 comas. Fíjate en el dato marcado en negrita.
1
,,Scotland,United Kingdom,2021-01-02 05:22:33,56.4907,-4.2026,129992,4578,0,125414,"Scotland, United Kingdom",2379.367781377556,3.5217551849344577

Esta línea nos va a dar 15 datos, en lugar de 14. Y en realidad, solo tiene 14 datos. El archivo CSV envuelve esas dos palabras marcadas en negrita entre dobles comillas para indicar que, aunque hay una coma separándolos, en realidad es un único dato y no dos.

El Procesador no contemplaba estos casos excepcionales. Él separaba datos ahí donde encontrase una coma.
Esto hacía que algunos vectores fueran "incorrectos", porque se generaban con los valores en posiciones desplazadas.

Por ejemplo, si en la posición 7 normalmente vamos a encontrar los "Casos Confirmados" que es un valor Integer, pues en lugar de eso puede que nos encontremos la coordenada de "Longitud", que es un valor Double.

Por eso aquel ejercicio producía excepciones, porque estos vectores "incorrectos" no tenían los datos en las posiciones donde deberían estar, ya que sus líneas nos habían dado 15 datos, ó 16, incluso 17...
Al querer guardar tantos datos en un vector de 14, pues algunos datos se quedaban fuera (se perdían) y otros no ocupaban las posiciones que les corresponderían.



El código del Procesador ahora es un poco más inteligente y ya no considera que cada línea le va a dar vectores "correctos" con 14 datos.
Antes de insertar en la matriz el vector que le ha dado una línea CSV, pregunta si ese vector tiene 14 datos.
Si los tiene, pues perfecto, a la matriz y pasamos a la siguiente línea CSV.

Pero si no tiene exactamente 14 datos, es porque hay valores separados por comas que en realidad son un único dato. Así que ahora el procesador lo que hará es examinar cada uno de esos valores en busca de los que hay que agrupar en un dato único.

Estos valores que han de agruparse se pueden identificar porque comienzan y terminan con las dobles comillas.
1
"Scotland, United Kingdom"
Entonces, lo que hacemos es crear un nuevo vector de 14 elementos, que será el vector "correcto".

Recorremos el "incorrecto" preguntando si sus datos COMIENZAN con el carácter "

Si no COMIENZA por ese carácter, es que ese valor no necesita agruparse y lo podemos transferir directamente al vector "correcto".

Pero si encontramos un valor que sí COMIENZA por ", no lo podemos transferir todavía al vector "correcto".
Lo que haremos será seguir recorriendo el "incorrecto" y juntar los valores agrupados en un único String, hasta que encontremos el valor que TERMINA con las dobles comillas.
Es entonces cuando hemos finalizado la agrupación de valores en un único dato, y ahora sí se puede transferir al vector "correcto".

De esta manera, los 15,16,17... valores que pudiéramos tener en el vector "incorrecto", ahora están correctamente agrupados en un vector de 14 elementos y ya sí podemos insertarlo en la matriz.


Disculpa si me extiendo demasiado con las explicaciones.
Es que, aunque en realidad el problema de todo esto es sencillo (hay líneas CSV que no están dando los esperados 14 datos), explicar el motivo, que dificultades nos causa y cómo resolverlo, si es un poco más complejo y requiere de mucha literatura.

Espero que, aunque no se haya entendido todo al 100%, al menos si te haya servido para entender en donde estaba el problema que ha generado esta "crisis" je je..

Luego seguimos viendo más ejercicios.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 05/03/2023 14:05:32
Apartado 5.

Aquí de nuevo usaremos una clase Pais para crear una lista donde cada país tenga la suma total de sus correspondientes datos.

Cuando tengamos la lista, la recorreremos y buscaremos países con más de 150 fallecidos. De estos países, acumularemos en unas variables la suma tota de sus fallecidos, recuperados y confirmados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import java.io.IOException;
import java.util.ArrayList;
 
public class Ej05 {
 
	private static class Pais {
		public String nombre;
		public int casos;
		public int fallecidos;
		public int recuperados;
		public Pais(String nombre, int casos, int fallecidos, int recuperados) {
			this.nombre = nombre;
			this.casos = casos;
			this.fallecidos = fallecidos;
			this.recuperados = recuperados;
		}
		//Dos paises se consideran iguales si tienen el mismo nombre
		@Override
		public boolean equals(Object obj) {
			if (obj instanceof Pais) {
				Pais otroPais = (Pais) obj;
				return nombre.equals(otroPais.nombre);
			}
			else
				return false;
		}
	}
 
	public static void main(String[] args) {
 
		try {
			String[][] datosCSV = ProcesadorCSV.procesar("COVID_01-01-2021.csv");
 
			//Creamos lista de paises
			var paises = new ArrayList<Pais>();
 
			for (int i = 1; i < datosCSV.length; i++) {
				Pais temp = new Pais(datosCSV[i][3], Integer.parseInt(datosCSV[i][7]),
						Integer.parseInt(datosCSV[i][8]), Integer.parseInt(datosCSV[i][9]));
 
				if (paises.contains(temp)) {
					int posicion = paises.indexOf(temp);
					paises.get(posicion).casos += temp.casos;
					paises.get(posicion).fallecidos += temp.fallecidos;
					paises.get(posicion).recuperados += temp.recuperados;
				}
				else
					paises.add(temp);
			}
 
			//Tenemos la lista, ahora acumularemos los datos de los paises con más de 150 fallecidos
			int totalConf = 0, totalFallec = 0, totalRecup = 0;
			for (Pais p: paises)
				if (p.fallecidos > 150) {
					totalConf += p.casos;
					totalFallec += p.fallecidos;
					totalRecup += p.recuperados;
				}
 
			System.out.println("\tDATOS DE PAISES CON MAS DE 150 FALLECIDOS");
			System.out.println("Total casos confirmados: " + totalConf);
			System.out.println("Total casos fallecidos: " + totalFallec);
			System.out.println("Total casos recuperados: " + totalRecup);
 
			System.out.println("\n\t\tFIN DE PROGRAMA");
 
		} catch (IOException e) {
			System.out.println("Archivo CSV no encontrado o ilegible");
			System.out.println(e.getMessage().toString());
		}
 
	}
 
}

Si lo ejecutamos tendremos los resultados en pantalla:

datos


Pero, resulta que el enunciado nos pide hacer un gráfico en pantalla.
La consola de Java no permite hacer gran cosa a parte de mostrar texto plano.

Pero quizás podamos hacer unos gráficos horizontales usando asteriscos como relleno.
Podemos hacer barras de 3 líneas de grosor de un máximo de 100 asteriscos. Es decir, el dato mayor será representado por 100ateriscos y el resto por la parte proporcional.

Esto lo haremos escribiendo un método a parte del main():
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
private static void mostrarGrafico(int confir, int fallec, int recup) {
		//Antes de nada, necesitamos saber cual es el dato de mayor valor
		//Las proporciones de las "barras" del gráfico dependerán de él.
		int mayor = confir;
		if (fallec > mayor)
			mayor = fallec;
		if (recup > mayor)
			mayor = recup;
 
		int proporcion = mayor / 100; //El dato mayor tendrá 100 asteriscos, el resto tendrán la parte proporcional
 
		//Según la proporcion del mayor, calculamos los límites (longitud de las barras) para cada dato
		System.out.println("\nCasos Confirmados");
		int limite1 = (int) (confir / proporcion); //Límite según la propocion del dato mayor
		for (int j = 1; j <= 3; j++) { //Cada barra tendrá 3 líneas horizontales de asteriscos
			for (int i = 1; i <= limite1; i++) {
				System.out.print("*");
			}
		System.out.println();
		}
 
		System.out.println("\nFallecidos");
		int limite2 = (int) (fallec / proporcion);
		for (int j = 1; j <= 3; j++) {
			for (int i = 1; i <= limite2; i++)
				System.out.print("*");
			System.out.println();
		}
 
		System.out.println("\nRecuperados");
		int limite3 = (int) (recup / proporcion);
		for (int j = 1; j <= 3; j++) {
			for (int i = 1; i <= limite3; i++)
				System.out.print("*");
			System.out.println();
		}
	}

Y en el main(), lo invocamos proporcionandole los 3 datos que hemos acumulados.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
}
 
			//Tenemos la lista, ahora acumularemos los datos de los paises con más de 150 fallecidos
			int totalConf = 0, totalFallec = 0, totalRecup = 0;
			for (Pais p: paises)
				if (p.fallecidos > 150) {
					totalConf += p.casos;
					totalFallec += p.fallecidos;
					totalRecup += p.recuperados;
				}
 
			System.out.println("\tDATOS DE PAISES CON MAS DE 150 FALLECIDOS");
			System.out.println("Total casos confirmados: " + totalConf);
			System.out.println("Total casos fallecidos: " + totalFallec);
			System.out.println("Total casos recuperados: " + totalRecup);
 
			mostrarGrafico(totalConf, totalFallec, totalRecup);
 
			System.out.println("\n\t\tFIN DE PROGRAMA");
 
		} catch (IOException e) {
			System.out.println("Archivo CSV no encontrado o ilegible");
			System.out.println(e.getMessage().toString());
		}
	}

Al ejecutarlo, ahora también veremos tres barras proporcionales a los valores de los datos.
No es muy bonito, pero es que la consola Java no da para más.



barras
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 05/03/2023 19:22:38
AHH OKOK AHORA ENTIENDO, no te preocupes tas expresado bien muchas gracias es que no entendí a porque tenía que cambiarlo pero ahora si lo llego a entender. MUCHAS GRACIA!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 05/03/2023 19:26:40
Una pregunta tengo una duda a la hora de mostrar un gráfico horizontales es que todavía a ese punto no llegue, es decir, que no me lo explicaron
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 05/03/2023 20:46:34
Ni te lo explicarán.
Es que tiene muy poco sentido hacer gráficas en consola de texto.

Estos ejercicios que estás haciendo, veo que pertenecen a un curso de Python. No estoy muy puesto en este lenguaje pero siendo un lenguaje muy adecuado para la ciencia de datos, tal vez sí disponga de mejores capacidades para hacer un gráfico en modo texto, no lo se.

Están usando esos enunciados para proponer ejercicios en Java, sin haberse preocupado de si son adecuados para un lenguaje distinto de Python.
Por eso salen términos como "dataframe", que en Java y otros lenguajes no existe, pero intuyo que básicamente consiste en un array de dos dimensiones (una matriz)

En realidad no creo que realmente esperen que dibujemos ningún gráfico.
Yo la verdad es que no había hecho nunca un "gráfico de barras". Lo he improvisado sobre la marcha, más por curiosidad y por el reto, que no porque pensase que realmente era necesario hacerlo.
Y no creas que me ha salido bien a la primera. Mis primeros intentos resultaron en que el programa se bloqueaba imprimiendo miles de asteriscos en pantalla

Yo no invertiría ahora demasiado tiempo en entender lo del gráfico de barras, creo que ni lo presentaría y tan solo mostraría la suma de los datos.
Pero vamos, lo que he hecho es:
Primero, averiguar cuál de los tres datos a representar es el mayor:
1
2
3
4
5
int mayor = confir;
		if (fallec > mayor)
			mayor = fallec;
		if (recup > mayor)
			mayor = recup;

¿Por qué?
Porque al dato mayor le daré la "barra" completa de 100 asteriscos.
Los otros datos, tendrán barras de tamaño proporcionales.

Por eso luego calculo la "proporción":
1
int proporcion = mayor / 100;
Es decir, si el dato mayor tiene 100 asteriscos, quiero saber "cuánto vale" cada asterisco.
Supón que el valor mayor es 500 puntos.
Si divido 500 puntos entre 100 asteriscos, resulta que cada asterisco vale 5 puntos (500/100 = 5)

Ese 5 es la "proporción", es lo que "vale" cada asterisco.

Si luego el otro dato es 250 puntos y quiero saber cuántos asteriscos le corresponde de forma proporcional respecto a la barra del dato mayor, lo que hago es dividir ese 250 entre la proporción.
Es decir, si cada asterisco vale 5 puntos, y tengo 250 puntos para dibujar la barra, ¿cuántos asteriscos tendrá dicha barra)
Pues 250 / 5 = 50 asteriscos

Es decir, tendrá la mitad de asteriscos que la barra mayor. Lo cuál tiene sentido porque 250 puntos es la mitad que 500 puntos.
Así que la barra de 250 ha de ser la mitad que la barra de 500

Pues eso es lo que hago a continuación. Teniendo la proporción calculada, pues para cada uno de los tres datos calculo cuántos asteriscos le corresponde.
1
2
3
4
5
6
7
8
System.out.println("\nCasos Confirmados");
		int limite1 = (int) (confir / proporcion); //Límite según la proporción del dato mayor
		for (int j = 1; j <= 3; j++) { //Cada barra tendrá 3 líneas horizontales de asteriscos
			for (int i = 1; i <= limite1; i++) {
				System.out.print("*");
			}
		System.out.println();
		}
En la variable "limite1" es donde cálculo cuantas veces se ha de repetir el bucle que imprime asteriscos.
Este bucle, lo anido en otro bucle que se repite tres veces, porque hacer una sola línea de asteriscos quedaría una "barra" muy delgadita.
Mejor hacer una "barra" de dos o tres líneas para que tenga más grosor.

Y ya está, eso es todo lo que hace ese método.
Esto no es tanto cuestión de saber Java, si no más bien de pelearse un poco con las matemáticas.

Pero insisto, no inviertas demasiado tiempo en comprender esto, porque es muy inusual esto de improvisar un gráfico de barras en modo texto.
Por eso no te lo han explicado, ni te lo explicarán nunca.

Seguramente el ejercicio sea válido si lo entregas sin ningún gráfico de barras.
Pero bueno, si más o menos lo has entendido tras esta explicación, pues inclúyelo.

Yo desaconsejo entregar ningún código que luego no seamos capaces de explicar o defender.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 05/03/2023 20:52:50
Ah okok muchas gracias, entiendo, eran ejercicio mal que a la hora de entregarlo que lo ise lo ise completo mal y por eso pedí ayuda en esos ejercicio de Python
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 05/03/2023 21:20:33
Apartado 6.

En este enunciado nos pide calcular sobre el primer trimestre de 2021, es decir, en esta ocasión vamos a tener que leer los tres archivos CSV, que corresponden a Enero, Febrero y Marzo.

Así que tendremos tres matrices. Y para cada una, haremos un recorrido sumando los casos confirmados para obtener el total de cada mes.

Aquí también se nos pide hacer un gráfico, que como hemos dicho, en realidad seguramente no será necesario hacerlo.
Pero bueno, como tenemos el método escrito del ejercicio anterior, podemos reciclarlo y adaptarlo para este ejercicio.

Lo que ocurre es que los datos que obtenemos para cada mes, son valores muy similares. Casi no hay diferencia, así que las "barras del gráfico" van a salir con el mismo tamaño. Tendríamos que hacer barras de muchísimos más asteriscos de longitud para poder apreciar diferencias entre ellas.

Pero bueno, el código podría quedar así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import java.io.IOException;
 
public class Ej06 {
 
	public static void main(String[] args) {
 
		try {
			//Datos de los tres archivos CSV
			String[][] datosEnero = ProcesadorCSV.procesar("COVID_01-01-2021.csv");
			String[][] datosFebrero = ProcesadorCSV.procesar("COVID_01-02-2021.csv");
			String[][] datosMarzo = ProcesadorCSV.procesar("COVID_01-03-2021.csv");
 
			//Contaremos los confirmados totales de cada mes
			int confEnero = 0, confFebrero = 0, confMarzo = 0;
 
			for (int i = 1; i < datosEnero.length; i++)
				confEnero += Integer.parseInt(datosEnero[i][7]);
 
			for (int i = 1; i < datosFebrero.length; i++)
				confFebrero += Integer.parseInt(datosFebrero[i][7]);
 
			for (int i = 1; i < datosMarzo.length; i++)
				confMarzo += Integer.parseInt(datosMarzo[i][7]);
 
			int total = confEnero+confFebrero+confMarzo;
			System.out.println("\tCASOS MUNDIALES CONFIRMADOS PRIMER TRIMESTRE 2021");
			System.out.println("Enero: " + confEnero);
			System.out.println("Febrero: " + confFebrero);
			System.out.println("Marzo: " + confMarzo);
			System.out.println("Total trimestre: " + total);
 
			mostrarGrafico(confEnero, confFebrero, confMarzo, total);
 
			System.out.println("\n\t\tFIN DE PROGRAMA");
		} catch (IOException e) {
			System.out.println("Archivo CSV no encontrado o ilegible");
			System.out.println(e.getMessage().toString());
		}
 
	}
 
	private static void mostrarGrafico(int enero, int febrero, int marzo, int total) {
 
		int proporcion = total / 100; //La proporción se calcula en base al total
 
		System.out.println("\nEnero");
		int limite1 = (int) (enero / proporcion); //Límite según la proporción
		for (int j = 1; j <= 3; j++) { //Cada barra tendrá 3 líneas horizontales de asteriscos
			for (int i = 1; i <= limite1; i++) {
				System.out.print("*");
			}
		System.out.println();
		}
 
		System.out.println("\nFebrero");
		int limite2 = (int) (febrero / proporcion);
		for (int j = 1; j <= 3; j++) {
			for (int i = 1; i <= limite2; i++)
				System.out.print("*");
			System.out.println();
		}
 
		System.out.println("\nMarzo");
		int limite3 = (int) (marzo / proporcion);
		for (int j = 1; j <= 3; j++) {
			for (int i = 1; i <= limite3; i++)
				System.out.print("*");
			System.out.println();
		}
 
		System.out.println("\nTotal Trimestre:");
		for (int j = 1; j <= 3; j++) {
			for (int i = 1; i <= 100; i++) //Sabemos que el valor total será quien tenga tamaño 100 asteriscos
				System.out.print("*");
			System.out.println();
		}
	}
 
}

En pantalla veremos que no hay diferencias entre las barras mensuales. He incluido una cuarta barra con el total trimestral de casos para que sí haya alguna diferente..

barra2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 05/03/2023 21:24:02
Pues tenía duda a qué mes correspondía esos tres archivo y ahora que lo dice me cuadra más los meses, gracias :)❤️
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 05/03/2023 23:21:26
Último apartado de los archivos CSV.

Evolución de confirmados y recuperados, en provincias españolas, durante el primer trimestre.

De nuevo habrá que trabajar con los 3 archivos CSV.

De las tres matrices que vamos a obtener, nos interesa sacar listados de provincias que pertenezcan a "Spain", así que haremos una clase Provincia con nombre, casos confirmados y pacientes recuperados.

De cada matriz, habrá que hacer un recorrido buscando los datos de las provincias "Spain", construir una provincia y añadirlo a un ArrayList según el mes al que pertenezca.
Para no repetir tres veces este mismo código, podemos escribirlo una única vez en un método y así nos bastará con llamarlo tres veces pasándole como argumento una de las tres matrices.

Cuando tengamos los ArrayList, podemos construir en pantalla una especie de tabla, donde en cada fila mostraremos nombre de provincia y los confirmados/recuperados de Enero, de Febrero y Marzo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import java.io.IOException;
import java.util.ArrayList;
 
public class Ej07 {
 
	private static class Provincia {
		public String nombre;
		public int confirmados;
		public int recuperados;
		public Provincia(String nombre, int confirmados, int recuperados) {
			this.nombre = nombre;
			this.confirmados = confirmados;
			this.recuperados = recuperados;
		}
	}
 
	public static void main(String[] args) {
 
		try {
			String[][] datosEnero = ProcesadorCSV.procesar("COVID_01-01-2021.csv");
			String[][] datosFebrero = ProcesadorCSV.procesar("COVID_01-02-2021.csv");
			String[][] datosMarzo = ProcesadorCSV.procesar("COVID_01-03-2021.csv");
 
			var provinciasEnero = listarProvincias(datosEnero);
			var provinciasFebrero = listarProvincias(datosFebrero);
			var provinciasMarzo = listarProvincias(datosMarzo);
 
			//Mostraremos una tabla en pantalla con los datos mensuales de cada provincia
			System.out.println("\t\t\tEVOLUCION DE CASOS PRIMER TRIMESTRE 2021\n");
			System.out.println("\t\t\t\tENERO\t\t\tFEBRERO\t\t\t\tMARZO");
			for (int i = 0; i < provinciasEnero.size(); i++) {
				//Seleccionamos misma provincia para cada mes
				Provincia pEne = provinciasEnero.get(i);
				Provincia pFeb = provinciasFebrero.get(i);
				Provincia pMar = provinciasMarzo.get(i);
				//Presentamos datos
				System.out.printf("%-20s Conf:%6d/Rec:%6d\t Conf:%6d/Rec:%6d\t\t Conf:%6d/Rec:%6d\n\n",pEne.nombre,
						pEne.confirmados,pEne.recuperados, pFeb.confirmados,pFeb.recuperados ,
						pMar.confirmados,pMar.recuperados);
			}
 
			System.out.println("\n\t\tFIN DE PROGRAMA");
		} catch (IOException e) {
			System.out.println("Archivo CSV no encontrado o ilegible");
			System.out.println(e.getMessage().toString());
		}
	}
 
	private static ArrayList<Provincia> listarProvincias(String[][] matriz) {
 
		var provincias = new ArrayList<Provincia>();
		for (int i = 1; i < matriz.length; i++) {
			//Buscamos provincias de Spain
			if (matriz[i][3].equals("Spain")) {
				Provincia temp = new Provincia(matriz[i][2], Integer.parseInt(matriz[i][7]), Integer.parseInt(matriz[i][9]));
				provincias.add(temp);
			}
		}
 
		return provincias;
	}
 
}

En pantalla saldrá una tabla con toda la info.
Pero ocurre algo raro, no hay ninguna evolución, los datos de cada provincia son iguales para los tres meses:

tabla

Primero pensé que habría algún fallo en el programa.

Pero si consultamos los archivos CSV, resulta que los datos de estas provincias son iguales en los tres archivos.
Por tanto, el programa está bien. Simplemente los CSV tienen los datos repetidos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 06/03/2023 00:06:45
Terminados los CSV, vamos al otro ejercicio de las series.

Son operaciones simples con vectores y matrices.
En ese código se hace lo que pide los distintos apartados del ejercicio. Excepto el último apartado, porque sale una instrucción Python que no se que resultado estaría dando ni que equivalencia podría tener en Java.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import java.util.Arrays;
import java.util.Random;
 
public class Series {
 
	public static void main(String[] args) {
		Random azar = new Random();
 
		//Dos series de 20 elementos
		int[] serieA = new int[20];
		int[] serieB = new int[20];
 
		//Llenamos con números entre 0 y 99
		for (int i = 0; i < 20; i++) {
			serieA[i] = azar.nextInt(100);
			serieB[i] = azar.nextInt(100);
		}
		System.out.println("Serie A:\n\t" + Arrays.toString(serieA));
		System.out.println("Serie B:\n\t" + Arrays.toString(serieB));
 
		//Buscar multiplos de 3
		System.out.println("\nPosicion de valores multiplos de 3 en serieA");
		for (int i = 0; i < serieA.length; i++) {
			if (serieA[i] % 3 == 0)
				System.out.println("Valor: " + serieA[i] + " Posicion: " + i);
		}
 
		//Creamos matriz juntando ambas series
		int[][] matriz = new int[2][20];
		matriz[0] = serieA;
		matriz[1] = serieB;
 
		//Buscar elementos comunes
		System.out.println("\nElementos comunes en ambas series");
		for (int i = 0; i < 20; i++)
			for (int j = 0; j < 20; j++)
				if (matriz[0][i] == matriz[1][j])
					System.out.println("Elemento: " + matriz[0][i] + "\tPosicion A: " + i + " Posicion B: " + j);
 
		//Elementos no comunes
		System.out.println("\nElementos de A que no estan en B");
		for (int i = 0; i < 20; i++) {
			boolean noEsComun = true;
			for (int j = 0; j < 20; j++) {
				if (matriz[0][i] == matriz[1][j])
					noEsComun = false;
			}
			if (noEsComun)
				System.out.println("Elemento: " + matriz[0][i]);
		}
	}
}

En pantalla vemos que todo parece funcionar bien.
Pregunta si hay algo que no entiendas.

series
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 07/03/2023 18:34:29
Hola buenas tardes mira tengo una duda, porque cuando doy a ejecutar me sale como que algo no estoy haciendo bien si he mirado el código y está todo bien, pero estoy pensando y yo creo que el fallo es a la hora del nombre del archivo pero yo creo que me esquivoco y así me sale en 3 ejercicio
image
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 08/03/2023 11:33:15
Pues no estoy muy seguro de lo que pasa.

Dice que el array "datosEnero" es null, vamos, que no se ha creado. Podría ser porque ha habido un problema al leer el archivo.., pero la clase Procesador está programada para que lance una excepción en caso de que eso ocurra.

Y en el código del programa, estamos usando try catch para capturar esa excepción.

1
2
3
4
} catch (IOException e) {
			System.out.println("Archivo CSV no encontrado o ilegible");
			System.out.println(e.getMessage().toString());
		}

Así que en caso de que haya un problema accediendo al archivo tendría que salir en pantalla este mensaje:
1
"Archivo CSV no encontrado o ilegible"

De todos modos, prueba a poner los archivos CSV en una ubicación de tu disco duro en la que sea fácil acceder. Por ejemplo, en la misma raíz de C: , aunque aquí Windows te pedirá permisos de administrador para copiar archivos.
Si no los tienes, o prefieres no darlos, también puedes hacerlo en la carpeta "temp" que seguramente tendrás ahí en C: y no se necesitan permisos.

imagen_2023-03-08_112553199

Cuando los tengas ahí, ahora en el código nombra esos archivo pero poniendo la ruta completa

1
2
3
4
5
6
public static void main(String[] args) {
 
		try {
			String[][] datosEnero = ProcesadorCSV.procesar("C:/temp/COVID_01-01-2021.csv");
			String[][] datosFebrero = ProcesadorCSV.procesar("C:/temp/COVID_01-02-2021.csv");
			String[][] datosMarzo = ProcesadorCSV.procesar("C:/temp/COVID_01-03-2021.csv");

Comprueba ahora a ver si funciona.

Si sigue fallando, el problema no debería ser el acceso a los archivos. En ese caso copia y pega aquí tu código completo de ese ejercicio, pues quizás has añadido/eliminado alguna línea de código que afecta a los arrays de datos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PROBLEMA CON el último ejercicio

Publicado por Tom (1831 intervenciones) el 08/03/2023 17:35:10
@Kabuto
¿
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class KK {
	/* */
	public static String[] reduce(String cols[]) {
		ArrayList<String> nl = new ArrayList<>();
		for(int i = 0; i < cols.length; i++) {
			if(cols[i].startsWith("\"")) {
				boolean first = true;
				StringBuilder all = new StringBuilder(cols[i]);
				for(; i < cols.length; i++) {
					if(!first)
						all.append("," + cols[i]);
					if(cols[i].endsWith("\"")) {
						if(!first) nl.add(all.toString());
						break;
					}
					first = false;
				}
			} else {
				nl.add(cols[i]);
			}
		}
		return nl.toArray(new String[1]);
	}
	/* */
	public static void main(String[] args) {
		String test = ",,pepe,\"pérez,martínez\",1024,,";
		String cols[] = test.split(",", -10);
		System.out.printf("Paso general: %d cols\n", cols.length);
		for(int i = 0; i < cols.length; i++) {
			System.out.printf("Col %d - /%s/\n", i, cols[i]);
		}
		String ncols[] = KK.reduce(cols);
		System.out.printf("Paso final: %d cols\n", ncols.length);
		for(int i = 0; i < ncols.length; i++) {
			System.out.printf("Col %d - /%s/\n", i, ncols[i]);
		}
	}
}
?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 08/03/2023 17:37:08
Hola buenas tardes envíe el archivo zip correctamente con todo los ejercicios exactamente como me decía en el anuncio y revisé nuevamente el archivo y yo no le encuentro ningún fallo porque a la hora de ejecutarlo todo Lis ejercicio sale exactamente lo que me piden en los problemas y le envíe para que lo corrigieran y mira lo que me enviaron, resumiendo, porque me lo siguen anulando?
B9C3B0F3-49EE-48B4-AC10-F066B0B8D8BF
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 08/03/2023 18:34:55
El ejercicio 4 no me funciona ise lo que tú me dijiste del disco duro peor me sigue sin funcionar a la hora de ejecutarlo solo me funciona Ej02.java los demás me sigue saliendo así y no sé qué hacer te pongo 3ejemplo de lo que me sale pero solo me pasa con ese ejercicio
image
image
image
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 09/03/2023 10:59:06
Gracias @Tom por esta alternativa :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 09/03/2023 11:01:37
@Rocio, ¿puedes publicar aquí el mismo zip que has entregado?

A ver si así podemos ver qué es lo que no les ha gustado y de paso probar directamente tu código, a ver si averiguamos por qué unos ejercicios te funcionan y otros no.... o_0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 10/03/2023 09:59:31
Hola buenos días perdón por la tardanza, aquí le dejo lo que me pediste para que llegues a distender, mira le pregunte donde estaba el error y como bien dice en el mensaje me dicen que los único que tengo mal es el 4 y 5 pero porque trabaje con Java, por favor comuníquese conmigo cuando lea este mensaje
F8F787FB-C9F9-40EA-B3B7-1D8A5F722D30
22B7E50D-1F29-4B81-9DBC-0F02981E2002
08C7FE90-B3C0-44B6-9863-2DE2F783622D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 13/03/2023 16:15:22
Y lo que yo no paro de pensar entonces Los ejercicios que hemos echo de Java no sirve
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 13/03/2023 16:17:18
Y no paro de pensar entonces los 4 ejercicio que hemos echo con Java no sirve y ahora que hacemos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 13/03/2023 17:25:47
En Python no puedo ayudarte, es un lenguaje que desconozco.

Prueba suerte en la sección Python de este mismo foro.

Lamento no poder serte de más ayuda.
Suerte y un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 13/03/2023 20:47:50
Ahh ok muchas gracias de todas formas por todo espero tener suerte:(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 14/03/2023 18:57:56
Perdón y aparte de esa web no sabrás de otra que me puedan ayudar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

PROBLEMA CON el último ejercicio

Publicado por Kabuto (1383 intervenciones) el 15/03/2023 17:54:45
No, no conozco más sitios.

De todos modos, si te piden que lo resuelvas en Python, es que previamente te han dado documentación y los conocimientos necesarios para poder hacerlo.
Las soluciones que dimos en Java usan estructuras e instrucciones distintas a las de Python, evidentemente, pero la lógica viene a ser la misma.
Quizás revisando lo que te han enseñado de Python y revisando las soluciones Java que hemos visto aquí, consigas hacer una "traducción" a Python.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rocio

PROBLEMA CON el último ejercicio

Publicado por Rocio (30 intervenciones) el 17/03/2023 01:18:20
Hola buenas noches perdón por las molestias pero es que a la hora de ejecutar en un ejercicio no me sale nada solo lo amarillo pero es que del otro ejercicio me da como error en ese ejercicio y no entiendo que tengo que hacer.
C94B9486-6A9C-4AFE-8C51-65A97ECC8E1C
2C5E5604-B9CB-4A06-AF33-A579D784EE45
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar