Wątek przeniesiony 2015-12-19 10:04 z Java przez bogdans.

Program liczący średnią z wprowadzonych liczb

0

Witam, mam do napisania taki oto program: Program wczytujący n liczb rzeczywistych i podający ich wartość średnią. Udało mi się na razie napisać coś takiego:

import java.util.*;
import java.lang.Math.*;

public class INF6 {
public static void main(String args[]) {
       Scanner we=new Scanner(System.in);

System.out.println("Wpisz dowolną ilość liczb rzeczywistych");

      double suma=0;
      double srednia=0;

      for(int i=1; i<=5 ; i++){ String l=we.nextLine();
                                double n=we.nextDouble();
                                suma=suma+n;
                                srednia=suma/i;
                                }
                                System.out.println("Średnia wynosi: "+srednia);

     }
}

Mój problem polega na tym, że w tym przypadku to ja jako "programista" ustaliłem ilość wprowadzonych liczb na 5. Po wprowadzeniu pięciu liczb program oblicza średnią i drukuje ją. Zależy mi na tym, aby użytkownik mógł wprowadzić dowolną, nie znaną z góry, ilość liczb, a potem zdecydować, że chce policzyć średnią. Np, użytkownik uruchamia program, wpisuje 10 liczb rzeczywistych, a następnie w jakiś sposób decyduje, że chce, aby program zakończył zbieranie danych i policzył oraz wyświetlił wartość średniej. No i właśnie nie wiem w jaki sposób użytkownik mógłby coś takiego nakazać programowi i jak to zapisać w kodzie?

0

Zalecam użyć list np. List<String> liczby = new ArrayList<>();
ustalić że naprzykład kiedy wpiszesz koniec konczy pobieranie liczb

0

Ten sposób którym próbujesz to zrobić jest całkowicie bez sensu. Jak już musisz to zrób coś podobnego do tego (to się nawet nie kompiluje żeby nie było gotowca):

import java.util.*;

public class INF6 {
	public static void main(String args[]) {
		Scanner ile = new Scanner(System.in);
		System.out.println("Ile liczb wpisać?");
		int x = ile.nextInt();
		Scanner we = new Scanner(System.in);

		System.out.println("Wpisz dowolną ilość liczb rzeczywistych");

		double suma = 0;
		double srednia = 0;

		for (int i = 1; i <= x; i++) {
			String l = we.nextLine();
			double n = we.nextDouble();
			suma = suma + n;
			srednia = suma / i;
		}
		System.out.println("Średnia wynosi: " + srednia);

	}
}

Jednak do operowania na nieznanej liczbie parametrów służy raczej coś w tym stylu (musisz jeszcze do tego stworzyć tablice numbers):

public static float averageM(float... numbers) {
		float counter = 0;

		for (float i : numbers) {
			counter += i;
		}

		return counter / numbers.length;
	}
1

Są co najmniej trzy podejścia:

  • (najbardziej upierdliwe dla użytkownika), po każdej wpisanej liczbie pytasz go czy chce wpisać kolejną,
  • na początku pytasz ile będzie liczb (poprzedni post), może byś niewygodne dla użytkownika - wyobraź sobie, że ma dużo liczb na kartce i chce obliczyć ich średnią, musi te liczby na kartce policzyć i się przy tym nie pomylić,
  • przyjmujesz, że wpisanie jakiegoś ciągu znaków (jakiejś liczby) kończy wprowadzanie danych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1