Zadanie - prosty program obliczający

0

"Zadanie5 Napisać program obliczający średnią arytmetyczną z wszystkich podanych liczb ujemnych oraz iloczyn liczb dodatnich.
Liczby wczytywane są od użytkownika, koniec wczytywania oznacza podanie liczby 0."

Dosyć banalny programik na początek nauki, ale niestety utknąłem i gdyby się jakaś milutka osóbka znalazła i podpowiedziała od czego zacząć, jaką pętlą najlepiej się posłużyć, byłbym mega wdzięczny:)

1

Pętlą while.

0
import java.util.Scanner;

public class Zadanie5
{
    public static void main(String[] args)
    {
        int liczba = 1;
        int iloczyn = 1;

        Scanner scanner = new Scanner(System.in);

       while(liczba != 0)
       {
           System.out.println("Podaj liczbe: ");
           liczba = scanner.nextInt();
       }
        if(liczba == 0)
        {
            iloczyn = iloczyn * liczba;

        }

        System.out.println(iloczyn);
    }
}

Kompletnie zboczyłem z toru, chciałem najpierw wydedukować jak zrobić obliczenie do iloczynu.

1

No ok, jest prawie dobrze. Ale teraz uruchom debugger i przejdź po tym programie krok po kroku i zobacz co się dzieje. Najpierw wczytujesz WSZYSTKIE liczby, a dopiero potem dochodzisz do twojego:

        if(liczba == 0)
        {
            iloczyn = iloczyn * liczba;
        }

Zresztą widzisz chyba bezsens tego kodu, skoro do ifa wchodzisz TYLKO jeśli liczba == 0 to siłą rzeczy iloczyn = iloczyn * liczba; oznacza iloczyn = iloczyn * 0;
Musisz te liczby gdzieś zapisać po wczytaniu, albo wykonywać obliczenia kiedy wczytujesz.

1

Mam rozwiązanie w pseudokodzie

import java.io._
import java.util._
import  scala.annotation._

val pos = "1 2 3 4 5 6 7 0";
val neg = "-1 -2 -3 -4 -5 -6 -7 0";
val targetStream = new ByteArrayInputStream(neg.getBytes());

// val scanner = new Scanner(targetStream);

val scanner = new Scanner(System.in);

@tailrec
final def $(product: Int, sum: Int, count: Int): (Int, Int, Int) =
  scanner.nextInt() match {
    case n if 0 < n => $(product * n, sum, count)
    case n if n < 0 => $(product, sum + n, count + 1)
    case _          => (product, sum, count)
  }

def $$() = $(1, 0, 0)

val result = $$()

System.out.println("Iloraz: " + result._1)
System.out.println("Średnia: " + result._2 / result._3)
2
public static void main(String[] args) {
        List<Integer> negative = new LinkedList<>(); //lista liczb ujemnych
        int product = 1; //iloczyn

        Scanner scanner = new Scanner(System.in);

        int number;
        System.out.println("Podaj liczbe: ");
        while ((number = scanner.nextInt()) != 0) { //iterujesz jesli liczba != 0
            if (number < 0) { //podana liczba < 0
                negative.add(number);
            } else { //podana liczba > 0
                product = product * number;
            }

            System.out.print("Podaj kolejną liczbe: ");
        }
        System.out.println();

        System.out.println("Srednia liczb ujemnych: " + negative.stream().mapToInt(Integer::intValue).average().orElse(0)); // listę zamieniasz w strumień i obliczasz średnią wartość
        System.out.println("Iloczyn: " + product);
    }
0

O to mi chodziło, zaraz na spokojnie to sobie przeanalizuję.
Dzięki wielkie:)

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