Wartość maksymalna i minimalna

0

Kolejne pytanie od początkującego wałkującego zadania znalezione w necie. Tym razem mam problem z wartością max i min.
Zadanie polega na pobraniu od użytkownika ciągu liczb całkowitych, pobieranie danych kończy podanie cyfry 0 (nie wliczana do danych). Potem program powinien wyświetlić sumę największej i najmniejszej liczby oraz ich średnią arytmetyczną.
Jeśli podam np. liczby -2 i 6 jest OK. Ale jeśli podam np.2 i 6 program pokazuje najmniejszą liczbę 0, bo tak jest zdefiniowana w zmiennych. Jak należy prawidłowo zdefiniować min i max? Czy błąd leży właśnie w początkowym zdefiniowaniu min jako int min = 0;

import java.util.*;
public class MinMax {
		public static void main(String[] args)
		{
			Scanner in = new Scanner(System.in);
			int a = 0;
			int max = 0;
			int min = 0;
			int suma = 0;
			do
			{
				System.out.print("Podaj liczbę. 0 kończy działanie programu: ");
				a = in.nextInt();
				if ( a <= min)
				{
				min = a;
				}
				else if ( a >= max)
				{
				max = a;
				}
				suma = suma + a;
			}
			while (a !=0 );
 			double artmetyczna = (min+max)/2;
 			System.out.printf("Maksymalna liczba podana to: %d. Minimalna liczba podana to: %d. Ich suma wynosi: %d. Ich średnia arytmetyczna to %.2f", max, min, suma, artmetyczna);
		}
}
0

Zero liczy ci nie tylko jako zakończenie ale tez jako liczbę ciągu. W warunkach(if) dodaj a!=0. I powodzenia :). Następnym razem te pytanie powinno być w newbie, tam mógłby ci pomóc każdy.

0

Znalazłem rozwiązanie problemu, ale jest chyba mało, eleganckie. Zaraz spróbuję z Twoją podpowiedzią.

import java.util.*;
public class MinMax {
		public static void main(String[] args)
		{
			Scanner in = new Scanner(System.in);
			int a, max, min, suma = 0;
			
			System.out.print("Podaj liczbę: ");
			a = in.nextInt();
			max = a;
			min = a;
			
			while (a != 0)
			{
				if ( a < min)
				{
				min = a;
				}
				else if ( a > max)
				{
				max = a;
				}
				suma = suma + a;
				System.out.print("Podaj liczbę. 0 kończy działanie programu: ");
				a = in.nextInt();
			}
 			double artmetyczna = (min+max)/2;
 			System.out.printf("Maksymalna liczba podana to: %d. Minimalna liczba podana to: %d. Ich suma wynosi: %d. Ich średnia arytmetyczna to %.2f", max, min, suma, artmetyczna);
		}
}
0

"do....while" musi się wykonać przynajmniej raz. W tym while wprowadzasz "a" na samym końcu czyli po wprowadzeniu "a" jest sprawdzany czy jest zerem. W poprzednim bylo tak ze wprowadzasz sprawdza czy jest minimalne i maksymalne a potem sprawdza czy jest zerem. W zadaniu myślę ze chodziło o ify, ale rozwiązanie jest ok.

0

@konserwa:

Dodałem w if a != 0.ale niestety nic to nie zmieniło, a rozwiązanie które zamieściłem powyżej jest dla mnie mało eleganckie. Problem leży chyba w tym, że inicjuję min=0, a potem jeśli nie podam liczby mniejsze od 0 to zero pozostaje nadal min. Obszedłem ten problem w listingu, który zamieściłem dwa posty wyżej, Ponad to chciałbym rozgryźć, co robię źle w poniższym

import java.util.*;
public class MinMax {
        public static void main(String[] args)
        {
            Scanner in = new Scanner(System.in);
            int a =0, max=0, min=0;
            int suma = 0;
            do
            {         	
            	System.out.print("Podaj liczbę. 0 kończy działanie programu: ");
                a = in.nextInt();
                if ( a <= min && a != 0)
                min = a;
                else if ( a >= max && a!=0)
                max = a;
                suma = suma + a; 
            }
            while (a !=0 );
            double artmetyczna = (min+max)/2;
            System.out.printf("Maksymalna liczba podana to: %d. Minimalna liczba podana to: %d. Ich suma wynosi: %d. Ich średnia arytmetyczna to %.2f", max, min, suma, artmetyczna);
        }
}
1
RoughBoy napisał(a):

@konserwa:

Dodałem w if a != 0.ale niestety nic to nie zmieniło, a rozwiązanie które zamieściłem powyżej jest dla mnie mało eleganckie. Ponad to chciałbym rozgryźć, co robię źle..

import java.util.*;
public class MinMax {
        public static void main(String[] args)
        {
            Scanner in = new Scanner(System.in);
            int a =0, max=0, min=0;
            int suma = 0;
            do
            {         	
            	System.out.print("Podaj liczbę. 0 kończy działanie programu: ");
                a = in.nextInt();
                if ( a <= min && a != 0)
                min = a;
                else if ( a >= max && a!=0)
                max = a;
                suma = suma + a; 
            }
            while (a !=0 );
            double artmetyczna = (min+max)/2;
            System.out.printf("Maksymalna liczba podana to: %d. Minimalna liczba podana to: %d. Ich suma wynosi: %d. Ich średnia arytmetyczna to %.2f", max, min, suma, artmetyczna);
        }
}

Ale jestem zjeban* XD
zobacz "min =0" czyli jak dasz 2 i 6 nadal bedzie najmniejsza 0(ify musza pozostac), daj min maksymalnie na "-" wpisz Integer.MIN_VALUE.

1

Proponowałbym jeszczę zamienić

double artmetyczna = (min+max)/2;

na

double artmetyczna = (double)(min+max)/2;

Dzięki takiemu rzutowaniu uzyskasz prawidłowy wynik. W przeciwnym wypadku, jeśli zmienne min i max będą wynosiły kolejno 5 oraz 10, do arytmetycznej zostanie przypisane 7 zamiast 7.5.

0

Dokładnie...

0

Mam jeszcze jedno rozwiązanie, ale też wydaje mi się mało eleganckie. Na początku mogę zdefiniować min=999999999 a max=-999999999. Ale jest to chyba mało eleganckie rozwiązanie. Wychodzi więc na to, że na tą chwilę najlepszym rozwiązaniem jest drugi listing. Jak uważacie?

import java.util.*;
public class MinMax {
        public static void main(String[] args)
        {
            Scanner in = new Scanner(System.in);
            int a =0, max=-999999999, min=999999999;
            int suma = 0;
            do
            {         	
            	System.out.print("Podaj liczbę. 0 kończy działanie programu: ");
                a = in.nextInt();
                if ( a < min && a != 0)
                min = a;
                else if ( a > max && a!=0)
                max = a;
                suma = suma + a; 
            }
            while (a !=0 );
            double artmetyczna = (double)(min+max)/2;
            System.out.printf("Maksymalna liczba podana to: %d. Minimalna liczba podana to: %d. Ich suma wynosi: %d. Ich średnia arytmetyczna to %.2f", max, min, suma, artmetyczna);
        }
}
0

Uffff... znalazłem jeszcze parę błędów, ale teraz jest OK. Dzięki wszystkim za pomoc.

import java.util.*;
public class MinMax {
        public static void main(String[] args)
        {
            Scanner in = new Scanner(System.in);
            int a =0, max=Integer.MIN_VALUE, min=Integer.MAX_VALUE;
            int suma = 0;
            do
            {         	
            	System.out.print("Podaj liczbę. 0 kończy działanie programu: ");
                a = in.nextInt();
                if ( a < min && a != 0)
                {
                min = a;
                }
                if ( a > max && a!=0)
                {
                max = a; 
                }
            }
            while (a !=0 );
            suma = min + max;
            double artmetyczna = (double)(min+max)/2;
            System.out.printf("Maksymalna liczba podana to: %d. Minimalna liczba podana to: %d. Ich suma wynosi: %d. Ich średnia arytmetyczna to %.2f", max, min, suma, artmetyczna);
        }
}
0

Dzięki za wszelkie uwagi, tym bardziej, że zgłębiam JAVA dopiero od tygodnia. Poniżej "ostateczny" listing:

import java.util.*;
public class MinMax {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            int a =0, max=Integer.MIN_VALUE, min=Integer.MAX_VALUE;
            int suma = 0;
            do {         	
            	System.out.print("Podaj liczbę. 0 kończy działanie programu: ");
                a = in.nextInt();
                if ( a < min && a != 0) min = a;
                if ( a > max && a!=0) max = a; 
            }
            while (a !=0 );
            suma = min + max;
            double artmetyczna = (double)(min+max)/2;
            System.out.printf("Maksymalna liczba podana to: %d. Minimalna liczba podana to: %d. Ich suma wynosi: %d. Ich średnia arytmetyczna to %.2f", max, min, suma, artmetyczna);
        }
}

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