Попытка 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
Другие вопросы по тегам