Antes de nada, no estoy pidiendo la solución, solo quiero entender el problema.
Buenas chicos, estoy cursando 2º de DAM y en la asignatura de servicios y procesos nos han mandado un ejercicio que no consigo comprender ¿me podéis echar una mano?
Enunciado
Crear un programa que permita parametrizar el lanzamiento de sumadores, que vuelque el contenido de las sumas en ficheros y que permita al programa principal recuperar las sumas de los ficheros parciales.
Para ello, se establecerán como argumentos dos números enteros divisibles y se dividirá la serie de números en 4 sumas parciales (procesos).
En la primera parte todo bien, pero en la segunda parte, cuando pide la serie de números en 4 sumas parciales no la consigo comprender ¿alguno me puede hacer de profesor xD?
He estado buscando por internet y CREO que he encontrado la solución, pero ni aún así consigo entenderla.
Clase SumadorEsta clase ya la tengo hecha de otros ejercicios y hemos estado creando procesos con ella, mandando resultado a ficheros, etc
public class Sumador {
/** Suma todos los valores incluidos
* entre dos valores
* @param n1 Limite 1
* @param n2 Limite 2
* @return La suma de dichos valores
*/
public static int sumar(int n1, int n2){
int suma=0;
if (n1>n2){
int aux=n1;
n1=n2;
n2=aux;
}
for (int i=n1; i<=n2; i++){
suma=suma+i;
}
return suma;
}
public static void main(String[] args){
int n1=Integer.parseInt(args[0]);
int n2=Integer.parseInt(args[1]);
int suma=sumar(n1, n2);
System.out.println(suma);
System.out.flush();
}
}
Lanzador
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Lanzador{
static final int NUM_PROCESOS=4;
static final String PREFIJO_FICHEROS="fich";
public static void lanzarSumador(
int n1, int n2,String fichResultados) throws IOException{
String comando;
comando="pruebas.Sumador";
File directorioSumador;
directorioSumador=new File("./build/classes");
File fichResultado=new File(fichResultados);
ProcessBuilder pb;
pb=new ProcessBuilder("java", comando, String.valueOf(n1),String.valueOf(n2) );
pb.directory(directorioSumador);
pb.redirectOutput(fichResultado);
pb.start();
}
public static int getResultadoFichero(
String nombreFichero){
int suma=0;
try {
FileInputStream fichero=new FileInputStream(nombreFichero);
InputStreamReader fir=new InputStreamReader(fichero);
BufferedReader br=new BufferedReader(fir);
String linea=br.readLine();
suma= new Integer(linea);
return suma;
} catch (FileNotFoundException e) {
System.out.println("No se pudo abrir "+nombreFichero);
} catch (IOException e) {
System.out.println("No hay nada en "+nombreFichero);
}
return suma;
}
public static int getSumaTotal(int numFicheros){
int sumaTotal=0;
for (int i=1; i<=NUM_PROCESOS;i++){
sumaTotal+=getResultadoFichero(PREFIJO_FICHEROS+String.valueOf(i) );
}
return sumaTotal;
}
/* Recibe dos parámetros y hará
* la suma de los valores comprendidos
* entre ambos parametros
*/
public static void main(String[] args) throws IOException, InterruptedException{
int n1=Integer.parseInt(args[0]);
int n2=Integer.parseInt(args[1]);
int salto=( n2 / NUM_PROCESOS ) - 1;
for (int i=1;i<=NUM_PROCESOS; i++){
System.out.println("n1:"+n1);
int resultadoSumaConSalto=n1+salto;
System.out.println("n2:"+resultadoSumaConSalto);
lanzarSumador(n1, n1+salto , PREFIJO_FICHEROS+String.valueOf(i));
n1=n1 + salto + 1;
System.out.println("Suma lanzada...");
}
Thread.sleep(5000);
int sumaTotal=getSumaTotal(NUM_PROCESOS);
System.out.println("La suma total es:"+ sumaTotal);
}
}
Salida con parámetros 8 16n1:8
n2:11
Suma lanzada...
n1:12
n2:15
Suma lanzada...
n1:16
n2:19
Suma lanzada...
n1:20
n2:23
Suma lanzada...
La suma total es:248
Todo bien hasta que llegamos al bucle del Main, ahí me quedo totalmente perdido con los cálculos que hace... entiendo que al no entender el enunciado no sé que coño esta haciendo.
Mi cabeza entiende que si tengo como parámetros 8 y 16, debería de hacer:
16/8 = 8
8/4 = 2
por lo que debería hacer el proceso de suma en incrementos de 2: sumador(8,10), sumador(10,12), sumador(12,14), sumador(14,16), para luego sumar el resultado total, pero no sé si estoy en lo correcto.
Gracias chicos!