Eclipse - Necesito ayuda para un ejercicio

 
Vista:
sin imagen de perfil

Necesito ayuda para un ejercicio

Publicado por Adrian (5 intervenciones) el 12/12/2021 19:11:41
Adjunto enunciado y al final el fichero "obras.txt". Gracias

Una galería de arte almacena en un fichero de texto, llamado “obras.txt”, el listado de obras con
las que ha negociado durante el último año. La información de cada obra es guardada en una línea
diferente, separadas por comas, y conforme el siguiente formato: un entero que representa el código
de inventario asignado a la obra, un entero que corresponde con el precio que se pagó por su
adquisición, un entero que representa el precio de venta (si no ha sido vendida aún, en vez de un
entero, aparecerá un carácter ‘*’), y, finalmente, el título de la obra. A continuación, se muestra un
posible ejemplo de fichero:
Debes escribir un programa en Java que encuentre aquellas obras vendidas donde el beneficio
obtenido sea como mínimo un 20% del precio de compra. Las obras que satisfagan la condición
serán almacenadas en un fichero de texto de salida. Los nombres del fichero de entrada y salida
se preguntarán al usuario Por cada obra se guardará en una línea diferente su código de inventario
y su título en el fichero de salida. En el ejemplo anterior, sólo las obras con código 4563 y 8934
deberían ser guardadas en el fichero de salida.

"obras.txt"
4563,10000,15400,Los girasoles
3467,150000,*,Las meninas
6748,20000,18000,Paseando por Paris
3450,300000,*,Copia de la Gioconda en Paris
8934,350000,1000000,La Ultima Cena
6534,400000,*,La Gioconda
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
Ha mantenido su posición en Eclipse (en relación al último mes)
Gráfica de Eclipse

Necesito ayuda para un ejercicio

Publicado por Kabuto (14 intervenciones) el 13/12/2021 00:14:11
Hola.
Hay que leer las líneas del archivo de texto y separar los datos en un array de String, mediante el método split().

Tras obtener los datos de una línea, primero nos fijamos en el tercer dato.
Si es un asterisco "*" , no hacemos nada con esta línea, porque significa que no se ha vendido, así que pasaríamos a la siguiente.

Si no es un asterisco, es que sí se ha vendido, pues ahora parseamos a int el segundo valor (precio de compra) y el tercer valor (precio de venta)
Calculamos la diferencia entre estos dos valores (beneficio) y si es igual o mayor al 20% del precio de compra ( o sea, a su quinta parte) entonces esta obra ha de ser guardado en el fichero de salida.
Así que enviamos dicha línea a que sea escrita en el fichero, mejor si lo hacemos con un método que se dedique exclusivamente a guardar líneas en el fichero de salida.


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
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
 
public class ObrasVendidas {
 
	public static void main(String[] args) {
		File obrasVendidas, obrasBeneficio;
		Scanner teclado = new Scanner(System.in);
 
		System.out.print("Nombre del archivo de obras vendidas: ");
		obrasVendidas = new File(teclado.nextLine());
		System.out.println("Nombre del archivo donde guardar las ventas con beneficio: ");
		obrasBeneficio = new File(teclado.nextLine());
 
		//Leemos las obras
		try {
			BufferedReader lector = new BufferedReader(new FileReader(obrasVendidas));
			String linea = lector.readLine();
			while (linea != null) {
				//Separamos los datos de la obra en un array
				String[] obra = linea.split(",");
				//Si el tercer dato es un asterisco, la obra no se ha vendido, no nos interesa.
				//Solo trabajaremos con las obras vendidas
				if (!obra[2].equals("*")) {
					int precioCompra = Integer.parseInt(obra[1]);
					int precioVenta = Integer.parseInt(obra[2]);
					int beneficio = precioVenta - precioCompra;
					if (beneficio >= (precioCompra / 5))
						guardarObra(obrasBeneficio, linea);
				}
				linea = lector.readLine();
			}
			lector.close();
		} catch (FileNotFoundException e) {
			System.out.println("Fichero no encontrado: " + e.getMessage());
		} catch (IOException e) {
			System.out.println("Error de acceso: " + e.getMessage());
		}
 
		System.out.println("\nVentas de obras procesadas. Consulte fichero:");
		System.out.println(obrasBeneficio.getAbsolutePath());
		teclado.close();
	}
 
	private static void guardarObra(File ficheroSalida, String linea) {
		try {
			BufferedWriter escritor = new BufferedWriter(new FileWriter(ficheroSalida, true));
			escritor.write(linea);
			escritor.newLine();
			escritor.close();
		} catch (IOException e) {
			System.out.println("Error de acceso: " + e.getMessage());
		}
	}
 
}
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