• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java, problem z kolejnością metod, proste zadanie

Object Storage Arubacloud
0 głosów
640 wizyt
pytanie zadane 23 grudnia 2016 w Java przez niezalogowany

Hej. Robię sobie takie zadanko:

Napisać program, który wczytuje od użytkownika liczby dopóty, dopóki nie zostanie podana liczba
mniejsza od 1. Następnie dokonuje losowania tylu liczb, ile wynosiła maksymalna z wartości podanych przez
użytkownika. Zakres losowanych liczb, to -199 do 199. W wyniku powinien zostać wyświetlony stosunek
średniej arytmetycznej wszystkich „co drugich" wylosowanych liczb dodatnich do wszystkich co trzecich
wylosowanych liczb (można zacząć od dowolnego momentu, ale nie później niż od 2 i 3 z podanych liczb).
W programie nie należy używać tablic.

Chcę, żeby program nie wysypywał się podczas wpisywania czegokolwiek oprócz liczb całkowitych. Zrobiłem to tak:

 

 public static void taskP2(){
        max = x;
        Random ran = new Random();
        StringBuilder ab = new StringBuilder();
        
        metoda1();
        metoda2();
        
        do{
            buff = JOptionPane.showInputDialog("Wprowadź liczbę całkowitą większą od 1: ");
            x = Integer.parseInt(buff);
        
        if(x>max);
            max = x;
        }while(x>1);
        
        for(z=1;z<=max;z++){
            y = (ran.nextInt(398)-199);
            ab.append(y).append(" \n ");
        }
        String out = ab.substring(0, ab.length());
        JOptionPane.showMessageDialog(null, "Losowe liczby: \n" +out);
        
    }
        }
 public static void metoda1(){
            buff = JOptionPane.showInputDialog("Wprowadź liczbę większą od 1: ");
    }
public static void metoda2(){
        while(!metoda3(buff)){
            JOptionPane.showMessageDialog(null, "Wprowadziłeś błędną liczbę. Spróbuj ponownie!");
            metoda1();
        }

 

public static boolean metoda3(String input){
        try{
            Integer.parseInt(input);
        }catch(NumberFormatException ex){
            return false;
        } return true;
    }

 

 

Co oczywiście ma zasadniczą wadę, gdyż kiedy po przejściu przez metody sprawdzające wpisane wartości, użytkownik wpisze np. literę - program wywala. 

 

Próbowałem wpisać instrukcję warunkowe i pętle w ciało metody proszącej o podanie liczby całkowitej, ale wtedy nie sprawdza prawidłowo.

 

Siedzę nad tym już pół godziny i nie wiem, jak posunąć się do przodu. Bardzo proszę o jakieś sugestie.

1 odpowiedź

0 głosów
odpowiedź 23 grudnia 2016 przez operator Stary wyjadacz (10,920 p.)
Krok 1 - pobieranie informacji(
Napisać program, który wczytuje od użytkownika liczby dopóty, dopóki nie zostanie podana liczba
mniejsza od 1.
Następnie dokonuje losowania tylu liczb, ile wynosiła maksymalna z wartości podanych przez
użytkownika.
){
    pobieraj wartość i porównuj ją z max, za max przyjmij pierwszą liczbę na wejściu
}

Krok 2 - losowanie liczb(
Zakres losowanych liczb, to -199 do 199.
W wyniku powinien zostać wyświetlony stosunek
średniej arytmetycznej wszystkich „co drugich" wylosowanych liczb dodatnich do wszystkich co trzecich
wylosowanych liczb (można zacząć od dowolnego momentu, ale nie później niż od 2 i 3 z podanych liczb).
){
    dopóki( mogę zmniejszyć liczbę wejściową ){
        suma co drugich  += co druga wylosowana > 0
        suma co trzecich += co trzecia wylosowana
    }
    wypisz sumę co drugich / ilość co drugich / sumę co trzecich
}

W programie nie należy używać tablic. - Są zbędne.
komentarz 23 grudnia 2016 przez niezalogowany

Możesz podpowiedzieć nieco bardziej odnośnie: 

W wyniku powinien zostać wyświetlony stosunek
średniej arytmetycznej wszystkich „co drugich" wylosowanych liczb dodatnich do wszystkich co trzecich
wylosowanych liczb (można zacząć od dowolnego momentu, ale nie później niż od 2 i 3 z podanych liczb).

 

Reszta jest jasna, a pytałem o metodę na niewywalanie programu po wpisaniu czegokolwiek innego niż liczby całkowitej. 

komentarz 24 grudnia 2016 przez operator Stary wyjadacz (10,920 p.)
Jeśli tutaj x = Integer.parseInt(buff); Ci wywala po prostu przechwyć wyjątek.

Podobne pytania

–1 głos
1 odpowiedź 3,152 wizyt
0 głosów
2 odpowiedzi 1,931 wizyt
pytanie zadane 25 czerwca 2020 w Java przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
3 odpowiedzi 710 wizyt
pytanie zadane 20 grudnia 2016 w Java przez niezalogowany

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...