[ Foro de Java ]

Ayuda Calcular Media Java

18-Jan-2021 11:33
Invitado (An?nimo)
1 Respuestas

Desde un fichero.  Tengo un problema en la línea de la función Media y es que dice que no me coincide el tipo de retorno double con la función. Mi problema es que básicamente no me reconoce ese return suma/i por estar metido entre el try-catch por eso al corregir el error me crea un nuevo retorno fuera del try. Pero si lo quito y lo pongo justo antes de cerrar la función media(fuera del try) no  se me reconocen las variables por estar fuera del try-catch, entonces me salta error para la función. Qué debo hacer? o qué estaré haciendo mal?

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

public class Ficheros_media {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String nombre = input.next();
File fichero = new File(nombre);
int promedio = Media(fichero);
System.out.println(promedio);
}

public static double Media(File fich) {
boolean abierto = false;
while (!abierto) {
try {
Scanner input_F = new Scanner(fich);
int i = 1;
double suma = 0, n = input_F.nextDouble();
while (input_F.hasNextDouble()) {
suma = suma + n;
n = input_F.nextDouble();
i = i + 1;
}
abierto = true;
                               return (suma / i);

} catch (Exception er) {
System.out.println("No se pudo leer fichero");
}

}
}
}


18-Jan-2021 16:10
Invitado (Aprendiz)

Nada. Gracias un usuario me ha dicho que era por tener las variables y el return dentro del try y no las devolvía. Ya me quedo claro. Pero ahora tengo una duda con el método Scanner hasNextDouble(); y es que no me coge el último número de una lista(corregido). Y mi pregunta es, ¿por qué? sé corregirlo, sólo es declarar la n a ningún valor, y luego permutar la sentencia de la suma por el n donde le meto el valor del fichero, y no me daría problemas. Pero este código no sé por qué no toma el último número si el bucle deja de leer hasta q no haya más reales no??? por qué no coge el último número???



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

public class Ficheros_media {
public static void main(String[] args) {
System.out.println("Introduce nombre de fichero");
Scanner input = new Scanner(System.in);
String nombre = input.next();
File fichero = new File(nombre);
double promedio = Media(fichero);
System.out.println(promedio);

}

public static double Media(File fich) {
double suma = 0;int i = 1;
boolean abierto = false;
while (!abierto) {
try {
Scanner input_F = new Scanner(fich);
double n= input_F.nextDouble();
while (input_F.hasNextDouble()) {
suma = suma + n;
n = input_F.nextDouble();

i = i + 1;
}
abierto = true;
}

catch (Exception er) {
System.out.println("No se pudo leer fichero. Introduce otro nombre");
}
}
return (suma/i);
}}






Si ya eres usuario del sistema, puedes contestar desde tu cuenta y así ganar prestigio.

Si sólo eres un visitante, puedes optar por...