Pobieranie liczb od użytkownika dopóki nie zostanie spełniony warunek.

0

Witam serdecznie.
Z góry przepraszam za zwracanie się z tak błachym problemem aczkolwiek dopiero stawiam swoje pierwsze kroki w programowaniu.
I nie jestem w stanie poradzić sobie z pewnym zagadnieniem.
Rozwiązuje zadania i w kilku z nich pojawił się problem: pobierania liczb dopóki nie zostanie spełniony warunek .
Treść przykładowego zadania. '
Pobieraj od użytkownika liczby, dopóki nie poda on liczby większej od 100. Wyznacz spośród podanych liczb liczbę o największej sumie cyfr
Nie mogłem znaleźć na stacku rozwiązania. Do pobierania liczb używam scannera. Zaś nie wiem jakiej struktury sterującej użyć aby pobieranie liczby były dopóki nie zostanie spełniony ten warunek. I jak gromadzić podane liczby tak by mogły zostać potem wyświetlone.
Bardzo proszę o pomoc bo przez chwilowe zaćmienie nie mogę ruszyć do przodu. Pozdrawiam

0

Do tej pory mam coś takiego https://4programmers.net/Pastebin/6207. Nie chce iść na łatwiznę, ale jeśli ktoś mógłby mi pomóc rozwiązać to zadanie byłbym mega wdzięczny bo miałbym się na czym później wzorować. Od kilku godzin szukam już rozwiązania.

1
Scanner input = new Scanner(System.in);
        int n;

        System.out.println("Podaj dowolną liczbę całkowitą:");
        n = input.nextInt();

        while(input.hasNext()){
            n = input.nextInt();
            if(n > 100){
                break;
            }
        }
    }

Tutaj masz kod do wpisywania liczb... Jeśli wpiszesz większą niż 100 wtedy program kończy działanie. Teraz zastanów się jak zrobić to porównywanie tych liczb :)

0

Dziękuje serdecznie, dalej już sobie poradzę ;)

public class Zad7PP {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n, total;
        List<Integer> numbers = new ArrayList<Integer>();

        do {
            System.out.println("Proszę podać liczbę całkowitą:");
            n = input.nextInt();
            numbers.add(n);
        } while( n < 100);
        System.out.println("Podane liczby to: " + numbers);

            //calculate the sum of the digits of the number of total
            total = 0;
            while(n != 0){
                total += n%10;
                n /= 10;
            }
            //Enter the result
        System.out.println("Suma cyfr podanych liczb wynosi: " + total);
        }
    }

Jednak nie mogę do końca sobie poradzić z tym zadaniem. Zrobiłem coś takiego. I nie wiem jak to dokończyć żeby wyświetliła się największa suma cyfr

1
  1. Wstawiaj kod w znaczniki kolorujące.
  2. Masz błędny warunek wyjścia z pętli - w poleceniu pętlę ma przerywać liczba większa od 100, u Ciebie już 100 przerywa pętlę
  3. Ty nie masz szukać sumy cyfr wszystkich liczb, tylko liczbę z największą sumą.
int result = numbers(0);
int maximum = sumOfDigits(result);
for(int number: numbers){
    int sum = sumOfDigits(Math.abs(number));
    if(sum > maximum) {
        maximum = sum;
        result = number;
    }
}
0

1.Przepraszam zastosuje się ,dopiero uczę się obsługi forum.
2. Warunek już poprawiłem.
3. Dziękuje Bogdans, za pomoc.

0
class Zad7PP {
     static void main(String[] args) {
        Scanner input = new Scanner(System.in);
         int n;

        List<Integer> numbers = new ArrayList<Integer>();

         int result = numbers(0);
         int maximum = sumOfDigits(result);
         for (int number : numbers) {
             int sum = sumOfDigits(Math.abs(number));
             if (sum > maximum) {
                 maximum = sum;
                 result = number;
             }
         }

        do {
            System.out.println("Proszę podać liczbę całkowitą:");
            n = input.nextInt();
            numbers.add(n);
        } while (n < 101);
        System.out.println("Podane liczby to: " + numbers);
    }

    //calculate the sum of the digits of the number of total

    public static int sumOfDigits(int number) {
        int sum = 0;
        int a = number / 10;
        sum = sum + number - a * 10;

        while (a>0){
            number = a;
            a = number / 10;
            sum = sum + number - a * 10;
        }
        return sum;

    }
} 

Całe zadanie praktycznie jest zrobione. Z tym że kod się nie kompiluje. Wyskakuje błąd "Methods call expected" przy linijce int result = numbers(0) . Czy mógłby mi ktoś powiedzieć w jaki sposób to rozwiązać

0

Napisałeś:
"1.Przepraszam zastosuje się ,dopiero uczę się obsługi forum."
ale się nie zastosowałeś.

Moja literówka

 int result = numbers.get(0);

Jak zauważył @szweszwe, wpierw szukasz maksimum, a dopiero potem wczytujesz liczby. Jest to raczej bez sensu, a na dodatek wiersz

 int result = numbers.get(0);

rzuci wyjątek, bo w kolekcji nie ma elementu o indeksie 0.
Kod powinien wyglądać jakoś tak:

        do {
            System.out.println("Proszę podać liczbę całkowitą:");
            n = input.nextInt();
            numbers.add(n);
        } while (n < 101);
        if(numbers.size() == 0){ //użytkownik od razu wpisał 666
            System.exit(0);
        }
        System.out.println("Podane liczby to: " + numbers);
        int result = numbers(0);
        int maximum = sumOfDigits(result);
        for (int number : numbers) {
             int sum = sumOfDigits(Math.abs(number));
             if (sum > maximum) {
                 maximum = sum;
                 result = number;
             }
        }       
0

Czy Ty przypadkiem nie chcesz najpierw wczytać a potem obliczać maximum? W miejscu gdzie masz błąd pewnie chciałeś int result = numbers.get(0)

0

Dzięki za odzew. Przepraszam , że tak męcze. Ale dopiero zaczynam i jeszcze wiele przede mną. Ale tacy pomocni ludzie w branży motywują do pracy.Pozdr

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