Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I am trying to add an appropriate try/catch statement for when a user does not i

ID: 3829112 • Letter: I

Question

I am trying to add an appropriate try/catch statement for when a user does not input a number. How would I go about doing that.

Add appropriate try/catch and input checking:

if the user's entry isn't a number, handle the error gracefully and tell them they made a mistake;

import java.util.InputMismatchException;
import java.util.Scanner;

public class SayMyNumber
{
   static String wordNum;
   static String response = "y";
  
   public static void main (String[] args) throws InputError
   {
       Scanner scan = new Scanner(System.in);
      
       InputError NegativeNumber = new InputError("Cannot input a negative number.");
       InputError NumberTooLarge = new InputError("Number is too large.");
      
       while (response.equals("y") || response.equals("Y"))
       {
           System.out.print("Enter an integer: ");
           long num = scan.nextLong();
          
           String N = Long.toString(num);
          
           try
           {
          
           Long.parseLong(N);
           if (num < 0)
               throw NegativeNumber;
           if (num > 9200000000000000000L)
               throw NumberTooLarge;
          
          
           System.out.println(say(num));
           }
          
           catch (InputError dispText)
           {
               System.out.println(dispText);
           }
           catch (InputMismatchException dispText)
           {
               System.out.println(dispText);
           }
           catch(Exception e)
           {
               System.out.println("Not an integer");
           }
          
           System.out.print("Enter another integer? (Y/N) ");
           response = scan.next();
       }
      
   }
  
   public static String say (long number)
   {
       //Outputs nothing if number is negative
       if (number < 0)
           return "";
          
       //Outputs numbers 1 - 20 as words
       else if (number == 1)
           wordNum = "one";
       else if (number == 2)
           wordNum = "two";
       else if (number == 3)
           wordNum = "three";
       else if (number == 4)
           wordNum = "four";
       else if (number == 5)
           wordNum = "five";
       else if (number == 6)
           wordNum = "six";
       else if (number == 7)
           wordNum = "seven";
       else if (number == 8)
           wordNum = "eight";
       else if (number == 9)
           wordNum = "nine";
       else if (number == 10)
           wordNum = "ten";
       else if (number == 11)
           wordNum = "eleven";
       else if (number == 12)
           wordNum = "twelve";
       else if (number == 13)
           wordNum = "thirteen";
       else if (number == 14)
           wordNum = "fourteen";
       else if (number == 15)
           wordNum = "fifteen";
       else if (number == 16)
           wordNum = "sixteen";
       else if (number == 17)
           wordNum = "seventeen";
       else if (number == 18)
           wordNum = "eighteen";
       else if (number == 19)
           wordNum = "nineteen";
       else if (number == 20)
           wordNum = "twenty";
      
       //Outputs numbers 21-100 as words
       else if (number > 20 && number < 30)
           wordNum = "twenty " + say(number%20);
       else if (number == 30)
           wordNum = "thirty";
       else if (number > 30 && number < 40)
           wordNum = "thirty " + say(number%30);
       else if (number == 40)
           wordNum = "forty";
       else if (number > 40 && number < 50)
           wordNum = "forty " + say(number%40);
       else if (number == 50)
           wordNum = "fifty";
       else if (number > 50 && number < 60)
           wordNum = "fifty " + say(number%50);
       else if (number == 60)
           wordNum = "sixty";
       else if (number > 60 && number < 70)
           wordNum = "sixty " + say(number%60);
       else if (number == 70)
           wordNum = "seventy";
       else if (number > 70 && number < 80)
           wordNum = "seventy " + say(number%70);
       else if (number == 80)
           wordNum = "eighty";
       else if (number > 80 && number < 90)
           wordNum = "eighty " + say(number%80);
       else if (number == 90)
           wordNum = "ninety";
       else if (number > 90 && number < 100)
           wordNum = "ninety " + say(number%90);
      
       //Outputs numbers 101-999 as words
       else if (number > 100 && number < 1000)
           wordNum = say(number/100) + " hundred " + say(number%100);
      
       //Outputs multiples of 100 as words
       else if (number == 100 || number == 200 || number == 300
               || number == 400 || number == 500 || number == 600
               || number == 700 || number == 800 || number == 900)
           wordNum = say(number/100) + " hundred";
      
       //Outputs numbers 1001-999999 as words
       else if (number > 1000 && number < 1000000)
           wordNum = say(number/1000) + " thousand " + say(number%1000);
      
       //Outputs multiples of 1000 as words
       else if (number == 1000 || number == 2000 || number == 3000
               || number == 4000 || number == 5000 || number == 6000
               || number == 7000 || number == 8000 || number == 9000)
           wordNum = say(number/1000) + " thousand";
      
       //Outputs numbers 1000001-999999999 as words
       else if (number > 1000000 && number < 1000000000)
           wordNum = say(number/1000000) + " million " + say(number%1000000);
      
       //Outputs multiples of 1000000 as words
       else if (number == 1000000 || number == 2000000 || number == 3000000
               || number == 4000000 || number == 5000000 || number == 6000000
               || number == 7000000 || number == 8000000 || number == 9000000)
           wordNum = say(number/1000000) + " million";
      
       //Outputs numbers 1000000001-9999999999 as words
       else if (number > 1000000000L && number < 1000000000000L)
           wordNum = say(number/1000000000L) + " billion " + say(number%1000000000L);
      
       //Outputs multiples of 1000000000 as words
       else if (number == 1000000000L || number == 2000000000L || number == 3000000000L
               || number == 4000000000L || number == 5000000000L || number == 6000000000L
               || number == 7000000000L || number == 8000000000L || number == 9000000000L)
           wordNum = say(number/1000000000L) + " billion";
      
       //Outputs numbers 1000000000001-9999999999999 as words
       else if (number > 1000000000000L && number < 1000000000000000L)
           wordNum = say(number/1000000000000L) + " trillion " + say(number%1000000000000L);
      
       //Outputs multiples of 1000000000000 as words
       else if (number == 1000000000000L || number == 2000000000000L || number == 3000000000000L
               || number == 4000000000000L || number == 5000000000000L || number == 6000000000000L
               || number == 7000000000000L || number == 8000000000000L || number == 9000000000000L)
           wordNum = say(number/1000000000000L) + " trillion";
      
       //Outputs numbers 1000000000000001-9999999999999999 as words
       else if (number > 1000000000000000L && number < 1000000000000000000L)
           wordNum = say(number/1000000000000000L) + " quadrillion " + say(number%1000000000000000L);
      
       //Outputs multiples of 1000000000000000 as words
       else if (number == 1000000000000000L || number == 2000000000000000L || number == 3000000000000000L
               || number == 4000000000000000L || number == 5000000000000000L || number == 6000000000000000L
               || number == 7000000000000000L || number == 8000000000000000L || number == 9000000000000000L)
           wordNum = say(number/1000000000000000L) + " quadrillion";
      
       //Outputs numbers 1000000000000000001-9200000000000000000 as words
       else if (number > 1000000000000000000L && number <= 9200000000000000000L)
           wordNum = say(number/1000000000000000000L) + " quintillion " + say(number%1000000000000000000L);
      
       //Outputs multiples of 1000000000000000000 as words
       else if (number == 1000000000000000000L || number == 2000000000000000000L || number == 3000000000000000000L
               || number == 4000000000000000000L || number == 5000000000000000000L || number == 6000000000000000000L
               || number == 7000000000000000000L || number == 8000000000000000000L || number == 9000000000000000000L)
           wordNum = say(number/1000000000000000000L) + " quintillion";
      
       return wordNum;
      
   }
  
}

Explanation / Answer

Changed code. See below in bold.

import java.util.InputMismatchException;
import java.util.Scanner;
public class SayMyNumber
{
static String wordNum;
static String response = "y";
  
public static void main (String[] args) throws InputError
{
Scanner scan = new Scanner(System.in);
  
InputError NegativeNumber = new InputError("Cannot input a negative number.");
InputError NumberTooLarge = new InputError("Number is too large.");
  
while (response.equals("y") || response.equals("Y"))
{
System.out.print("Enter an integer: ");
  
long num;
try
{
  
num = scan.nextLong(); // If input is not double it will get caught by InputMismatchException
if (num < 0)
throw NegativeNumber;
if (num > 9200000000000000000L)
throw NumberTooLarge;

System.out.println(say(num));
}
  
catch (InputError dispText)
{
System.out.println(dispText);
}
catch (InputMismatchException dispText)
{
System.out.println(dispText);
}
catch(Exception e)
{
System.out.println("Not an integer");
}
  
System.out.print("Enter another integer? (Y/N) ");
response = scan.next();
}
scan.close();
  
}
  
public static String say (long number)
{
//Outputs nothing if number is negative
if (number < 0)
return "";
  
//Outputs numbers 1 - 20 as words
else if (number == 1)
wordNum = "one";
else if (number == 2)
wordNum = "two";
else if (number == 3)
wordNum = "three";
else if (number == 4)
wordNum = "four";
else if (number == 5)
wordNum = "five";
else if (number == 6)
wordNum = "six";
else if (number == 7)
wordNum = "seven";
else if (number == 8)
wordNum = "eight";
else if (number == 9)
wordNum = "nine";
else if (number == 10)
wordNum = "ten";
else if (number == 11)
wordNum = "eleven";
else if (number == 12)
wordNum = "twelve";
else if (number == 13)
wordNum = "thirteen";
else if (number == 14)
wordNum = "fourteen";
else if (number == 15)
wordNum = "fifteen";
else if (number == 16)
wordNum = "sixteen";
else if (number == 17)
wordNum = "seventeen";
else if (number == 18)
wordNum = "eighteen";
else if (number == 19)
wordNum = "nineteen";
else if (number == 20)
wordNum = "twenty";
  
//Outputs numbers 21-100 as words
else if (number > 20 && number < 30)
wordNum = "twenty " + say(number%20);
else if (number == 30)
wordNum = "thirty";
else if (number > 30 && number < 40)
wordNum = "thirty " + say(number%30);
else if (number == 40)
wordNum = "forty";
else if (number > 40 && number < 50)
wordNum = "forty " + say(number%40);
else if (number == 50)
wordNum = "fifty";
else if (number > 50 && number < 60)
wordNum = "fifty " + say(number%50);
else if (number == 60)
wordNum = "sixty";
else if (number > 60 && number < 70)
wordNum = "sixty " + say(number%60);
else if (number == 70)
wordNum = "seventy";
else if (number > 70 && number < 80)
wordNum = "seventy " + say(number%70);
else if (number == 80)
wordNum = "eighty";
else if (number > 80 && number < 90)
wordNum = "eighty " + say(number%80);
else if (number == 90)
wordNum = "ninety";
else if (number > 90 && number < 100)
wordNum = "ninety " + say(number%90);
  
//Outputs numbers 101-999 as words
else if (number > 100 && number < 1000)
wordNum = say(number/100) + " hundred " + say(number%100);
  
//Outputs multiples of 100 as words
else if (number == 100 || number == 200 || number == 300
|| number == 400 || number == 500 || number == 600
|| number == 700 || number == 800 || number == 900)
wordNum = say(number/100) + " hundred";
  
//Outputs numbers 1001-999999 as words
else if (number > 1000 && number < 1000000)
wordNum = say(number/1000) + " thousand " + say(number%1000);
  
//Outputs multiples of 1000 as words
else if (number == 1000 || number == 2000 || number == 3000
|| number == 4000 || number == 5000 || number == 6000
|| number == 7000 || number == 8000 || number == 9000)
wordNum = say(number/1000) + " thousand";
  
//Outputs numbers 1000001-999999999 as words
else if (number > 1000000 && number < 1000000000)
wordNum = say(number/1000000) + " million " + say(number%1000000);
  
//Outputs multiples of 1000000 as words
else if (number == 1000000 || number == 2000000 || number == 3000000
|| number == 4000000 || number == 5000000 || number == 6000000
|| number == 7000000 || number == 8000000 || number == 9000000)
wordNum = say(number/1000000) + " million";
  
//Outputs numbers 1000000001-9999999999 as words
else if (number > 1000000000L && number < 1000000000000L)
wordNum = say(number/1000000000L) + " billion " + say(number%1000000000L);
  
//Outputs multiples of 1000000000 as words
else if (number == 1000000000L || number == 2000000000L || number == 3000000000L
|| number == 4000000000L || number == 5000000000L || number == 6000000000L
|| number == 7000000000L || number == 8000000000L || number == 9000000000L)
wordNum = say(number/1000000000L) + " billion";
  
//Outputs numbers 1000000000001-9999999999999 as words
else if (number > 1000000000000L && number < 1000000000000000L)
wordNum = say(number/1000000000000L) + " trillion " + say(number%1000000000000L);
  
//Outputs multiples of 1000000000000 as words
else if (number == 1000000000000L || number == 2000000000000L || number == 3000000000000L
|| number == 4000000000000L || number == 5000000000000L || number == 6000000000000L
|| number == 7000000000000L || number == 8000000000000L || number == 9000000000000L)
wordNum = say(number/1000000000000L) + " trillion";
  
//Outputs numbers 1000000000000001-9999999999999999 as words
else if (number > 1000000000000000L && number < 1000000000000000000L)
wordNum = say(number/1000000000000000L) + " quadrillion " + say(number%1000000000000000L);
  
//Outputs multiples of 1000000000000000 as words
else if (number == 1000000000000000L || number == 2000000000000000L || number == 3000000000000000L
|| number == 4000000000000000L || number == 5000000000000000L || number == 6000000000000000L
|| number == 7000000000000000L || number == 8000000000000000L || number == 9000000000000000L)
wordNum = say(number/1000000000000000L) + " quadrillion";
  
//Outputs numbers 1000000000000000001-9200000000000000000 as words
else if (number > 1000000000000000000L && number <= 9200000000000000000L)
wordNum = say(number/1000000000000000000L) + " quintillion " + say(number%1000000000000000000L);
  
//Outputs multiples of 1000000000000000000 as words
else if (number == 1000000000000000000L || number == 2000000000000000000L || number == 3000000000000000000L
|| number == 4000000000000000000L || number == 5000000000000000000L || number == 6000000000000000000L
|| number == 7000000000000000000L || number == 8000000000000000000L || number == 9000000000000000000L)
wordNum = say(number/1000000000000000000L) + " quintillion";
  
return wordNum;
  
}
  
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote