Try catch is not catching a bad number input ( Also getting a java.lang.arithmatic exception / zero)

最后都变了- 提交于 2019-12-08 06:24:31

问题


This is a Constructor that I have for a test average class. My assignment asks me to bring in an array-list of test score and as input validation, it wants me to use a try catch statement to catch any input under 0 and over 100.

The constructor below is bringing in an array-list from my main with out any error. However, it is not catching a negative input. I been looking at this code for over two hours and I can't figure it out. I thought a fresh pair of eyes could probably see why it is not catching bad input.

My whole Program:

class:

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;
}

}

Main:

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()));
            }
    }
}

回答1:


Ok. Here is working code. I just modified your code. According to Naming standard, you should use Class name like 'Try1' 'Try2'. And you should immediately throw exception if you don't wanna accept negative value. But according to your code, here it is.

In try2 class,

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 ");
            }
        }
    }

In try1 class,

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);

        }
    }

I only updated the codes I modified. You need to modify as you need.




回答2:


use this code it will solve your problem

 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


来源:https://stackoverflow.com/questions/21869923/try-catch-is-not-catching-a-bad-number-input-also-getting-a-java-lang-arithmat

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!