Попытка catch не перехватывает ввод неправильных чисел (также получает исключение java.lang.arithmatic / ноль)
Это конструктор, который у меня есть для тестового среднего класса. Мое задание просит меня ввести массив результатов тестов, и в качестве проверки входных данных оно хочет, чтобы я использовал оператор try catch для перехвата любых входных данных с 0 и более 100.
Приведенный ниже конструктор выводит список массивов из моего основного кода без каких-либо ошибок. Тем не менее, это не ловит отрицательный вклад. Я искал этот код более двух часов и не могу понять. Я думал, что свежая пара глаз, вероятно, могла бы понять, почему это не уловило плохой ввод.
Вся моя программа:
учебный класс:
import javax.swing.*;
import java.util.*;
class try2
{
public static ArrayList<Integer>userInput=new ArrayList<Integer>();
public static double avg;
public try2()
{
}
public try2(ArrayList<Integer> test)
{
for ( int x = 0 ; x <= test.size(); x++)
{
try
{
if ( test.get(x) < 0 || test.get(x) > 100)
{
throw new IllegalArgumentException ();
}
else
{
this.userInput = test;
}
}
catch ( IllegalArgumentException ex) {
JOptionPane.showMessageDialog(null," NO NEGETIVES ALLOWED ");
}
}
}
public static void setAvg ()
{
int sum = 0;
for ( int x = 0 ; x < userInput.size(); x++)
{
sum += userInput.get(x) ;
}
avg = sum / userInput.size();
}
public static double getAvg ()
{
return avg;
}
}
Главный:
import javax.swing.*;
import java.util.*;
public class try1
{
public static ArrayList<Integer>user=new ArrayList<Integer>();
private static try2 testing = new try2 (user);
public static Integer testnum;
public static void main (String[] args)
{
testnum = Integer.parseInt(JOptionPane.showInputDialog(null, "Please Enter The Amount Of Test To Be Calculated Below "));
classes ();
}
public static void classes ()
{
int userInput = 0;
if (userInput == JOptionPane.YES_OPTION)
{
for ( int count = 1; count <= testnum; count++)
{
String userInputString = JOptionPane.showInputDialog(null, " PLEASE ENTER ALL THE FOLLOWING TEST GRADES TO CALCULATE ");
int value = Integer.parseInt(userInputString);
user.add(value);
}
if (userInput == JOptionPane.NO_OPTION )
{
testing.setAvg ();
JOptionPane.showMessageDialog(null,"You average is" + (testing.getAvg()));
}
}
}
2 ответа
Хорошо. Вот рабочий код. Я только что изменил твой код. В соответствии со стандартом именования, вы должны использовать имя класса, например "Try1", "Try2". И вы должны немедленно выбросить исключение, если вы не хотите принимать отрицательное значение. Но согласно вашему коду, вот оно.
В классе try2,
public try2(ArrayList<Integer> test) {
for (int x = 0; x <= test.size()-1; x++) {
try {
if (test.get(x) < 0 || test.get(x) > 100) {
throw new IllegalArgumentException();
} else {
this.userInput = test;
}
} catch (IllegalArgumentException ex) {
JOptionPane.showMessageDialog(null, " NO NEGETIVES ALLOWED ");
}
}
}
В классе try1,
public static void main(String[] args) {
testnum =
Integer.parseInt(JOptionPane.showInputDialog(null,
"Please Enter The Amount Of Test To Be Calculated Below "));
classes();
}
public static void classes() {
int userInput = 0;
if (userInput == JOptionPane.YES_OPTION) {
user = new ArrayList<Integer>();
for (int count = 1; count <= testnum; count++) {
String userInputString =
JOptionPane.showInputDialog(null, " PLEASE ENTER ALL THE FOLLOWING TEST GRADES TO CALCULATE ");
int value = Integer.parseInt(userInputString);
user.add(value);
}
if (userInput == JOptionPane.NO_OPTION) {
testing.setAvg();
JOptionPane.showMessageDialog(null, "You average is" + (testing.getAvg()));
}
new try2(user);
}
}
Я только обновил коды, которые я изменил. Вы должны изменить, как вам нужно.
Используйте этот код, это решит вашу проблему
public try2(ArrayList<Integer> test)
{
for ( int x = 0 ; x <= test.size(x); x++)
{
try
{
if ( test < 0 || test > 100)
{
throw new IllegalArgumentException ();
}
else
{
this.userInput(x) = test(x);
}
}
catch ( IllegalArgumentException ex)
{
JOptionPane.showMessageDialog(null," NO NEGETIVES ALLOWED ");
}// end of try
}// end of for loop
}// end of program