ayuda con ejercicio en java

Iniciado por alan95, 5 Abril 2015, 00:40 AM

0 Miembros y 1 Visitante están viendo este tema.

alan95

hola necesito resolver un ejercicio el cual me plantea lo sig: leer archivo(.txt) con varios n° por linea separados por "," y por cada linea del archivo imprimir el promedio

osea lo que tengo en el archivo .txt es lo siguiente :
4,5,5,5
8,8,8,8
7,7,5,1

lo podia plantear en cualquier lenguaje el ejercicio , lo plantie en java y me da error me dan una mano para poder terminarlo? gracias


public static void main (String[] args) throws java.io.IOException
    {

File file = new File ("miarchivo.txt");
Scanner lector=new Scanner(file);
int suma=0;
int cant=0;
while(lector.hasNext())
{
int numero=lector.nextInt();
suma=suma+numero;
cant++;
}
System.out.println("promedio de numeros es :  "  +  suma/cant);
lector.close();

DarK_FirefoX

#1
No se realmente si en java existe pero en C#(.NET) puedes hacer algo muy sencillo con una string, al cual le puedes hacer

Código (csharp) [Seleccionar]
string lineaLeida = "1,2,3,4";
string[] separada = lineaLeida.Split(',');


Y te devuelve un array(de strings) separados por el char que le pasaste en al método Split() como parámetro, luego es cuestión de recorrer ese array, sumarlos y calcular el promedio

Salu2s ;)

Mod: Habia puesto dentro del split una comilla como char para hacerle split, me refería a una coma.

PabloPbl

#2
Por lo que veo quieres sumar todos los números de todas las lineas del archivo de texto y luego dividir esa cantidad por el total de valores que hay en el archivo de texto.

Tal como dice DarK_FirefoX también existe ese método split() y funciona de la misma manera en Java, te pongo un ejemplo abajo.
Mira este código e intenta entenderlo:

Código (java) [Seleccionar]

import java.io.File;
import java.util.Scanner;


public class ImprimirPromedios {

   public static void main(String[] args) {
       File file = new File ("miarchivo.txt");
       Scanner lector = null;
       
       try {
           lector = new Scanner(file);
       }
       catch (Exception ex) {
           System.out.println("Error: "+ex.getMessage());
       }
       
       int suma=0;
       int cant=0;
       
       /*
       Sumo todos los números de todas las lineas y después la divido por la cantidad de números
       */
       while(lector.hasNext()) {
           //Leo una linea completa del archivo
           String numerosDelArchivo = lector.nextLine();
           
           //Separo los numeros y los guardo en un array de String
           String[] numerosSeparados = numerosDelArchivo.split(",");
           
           //Sumo todos los numeros del array y los guardo con un nuevo valor en la variable suma
           for(int i = 0; i < numerosSeparados.length; i++) {
               suma += Integer.parseInt(numerosSeparados[i]);
               cant++;
           }
       }
       
       System.out.println("Promedio de números es :  "  +  suma/cant);
       lector.close();
   }
   
}


Oka, comenta si no entendiste algo del código.

Salu2.

Usuario Invitado

#3
Un método pequeño:

Código (java) [Seleccionar]
public List<Integer> getAmountsOf(String directory, String fileName) throws IOException, NumberFormatException, RuntimeException {
List<Integer> amounts = new ArrayList<>();
Path path = Paths.get(directory, fileName);
Charset charset = Charset.forName("UTF-8");
// lee todas las lineas del fichero
List<String> lines = Files.readAllLines(path, charset);
if(lines == null || lines.empty()) {
throw new RuntimeException("El archivo está vacío");
}
for (String line : lines) {
String[] tokens = line.split(",");
int sum = 0;
for(String token : tokens) {
sum += Integer.parseInt(token);
}
amounts.add(sum);
}
return amounts;
}


Modo de uso:

Código (java) [Seleccionar]
try {
List<Integer> amounts = getAmountsOf("D://prueba", "fichero.txt");
} catch(IOException e) {
System.out.println("Error al leer fichero: "+e.getMessage());
} catch(NumberFormatException e2) {
System.out.println("Una línea contiene un carácter no numérico: "+e2.getMessage());
} catch(RuntimeException e3) {
System.out.println(e3.getMessage()); // imprime: 'El archivo está vacío'
}
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

alan95

pablopl te mando un privado te llego ? saludos

Usuario Invitado

Cita de: alan95 en  8 Abril 2015, 21:28 PM
pablopl te mando un privado te llego ? saludos

Si es personal, perfecto, pero si es sobre éste tema, sería bueno que se resuelva aquí, porque le puede servir a otra persona. Si has solucionado tu problema, por favor marca el tema como solucionado (check verde en la parte superior derecha).
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

alan95

ya lo pude resolver ahi lo mando por si le sirve a alguien

Código (java) [Seleccionar]
public class Archivo
{
public static void main (String[] args) throws java.io.IOException

    {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
File f = new File ("miarchivo.txt");
Scanner s;


BufferedReader br = null;
try
{
br = new BufferedReader( new FileReader( "miarchivo.txt" ) );

String lineas;



while( ( lineas = br.readLine() ) != null )
{
int i = 0;


int cant=0;
int suma=0;

String[]arraylineas=lineas.split(",");
for (i = 0; i < arraylineas.length; i++)
{
suma += Integer.parseInt(arraylineas[i]);
                cant++;
    }//for


System.out.println("Promedio de números es :  "  +  suma/cant);

       
}//while

}
   catch( IOException e ) {
e.printStackTrace();
   
   
   
   
   }
   }
}

PabloPbl

#7
Acá tenes otra forma de hacerlo.

Tu forma es bastante funcional, pero si quisieras hacer algo con esos promedios desde otra parte del código, te verías limitado.

Solo debes de agregar un ArrayList y hacer un cambio en el for:


Código (java) [Seleccionar]

import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;


public class ImprimirPromedios {

   public static void main(String[] args) {
       File file = new File ("miarchivo.txt");
       Scanner lector = null;
       
       try {
           lector = new Scanner(file);
       }
       catch (Exception ex) {
           System.out.println("Error: "+ex.getMessage());
       }
       
       ArrayList<Integer> promedios = new ArrayList<Integer>();
       
       int suma=0;
       int cant=0;
       
       /*
       Sumo todos los numeros de todas las lineas y despues la divido por la cantidad de numeros
       */
       while(lector.hasNext()) {
           //Leo una linea completa del archivo
           String numerosDelArchivo = lector.nextLine();
           
           //Separo los numeros y los guardo en un array de String
           String[] numerosSeparados = numerosDelArchivo.split(",");
           
           //Sumo todos los numeros del array y los guardo en la variable suma
           for(int i = 0; i < numerosSeparados.length; i++) {
               suma += Integer.parseInt(numerosSeparados[i]);
               cant++;
           }
           promedios.add(suma/cant);
           suma = 0;
           cant = 0;
       }
       
       for(int i = 0; i < promedios.size(); i++) {
           System.out.println(i+1+") promedio "+i+1+" es: "+promedios.get(i));
       }
       
       lector.close();
   }
   
}


De esta forma, tendrías el promedio de cada linea y podrías hacer algunas cosas con esos valores, como por ejemplo obtener el promedio total:

Código (java) [Seleccionar]

int promedioTotal = 0;
       
       for(int i = 0; i < promedios.size(); i++) {
           promedioTotal += promedios.get(i);
       }
       
       System.out.println("El promedio total de lineas es: "+promedioTotal/promedios.size());


Si quieres probar este código, agrégalo al final del main.

Ready, espero que te haya servido, y hazle caso a Gus, si tienes alguna duda al respecto, escríbela aquí, aumentara las probabilidades de recibir una respuesta y puede que también le sirva a alguien mas.

Saludos!