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.