What error do you find in this code/program? Erro

2019-05-26 14:00发布

问题:

So my question is on this: This program is supposed to calculate the area of circle the user inputs a number comes out with the answer also any invalid input is not allowed i use the try-catch but it wont work...

Thank you so much for you time everyone :))

Here is the code:

import java.util.Scanner; 
import java.io;

/**
 *
 * @author Osugule
 */
public class AreaCircle { 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
Scanner sc = new Scanner(System.in); // read the keyboard
System.out.println("This program will calculate the area of a circle");
System.out.println("Enter radius:");//Print to screen
double r = sc.nextDouble(); // Read in the double from the keyboard
double area = (3.14 *r * r); 
try {

}
catch( NumberFormatException e ) {
    System.out.println("Invalid Input, please enter a number");
    //put a message or anything you want to tell the user that their input was weird.
}

String output = "Radius: " + r + "\n";
output = output + "Area: " + area + "\n";
System.out.println("The area of the circle  is " + area);

    }
}

回答1:

You must catch InputMismatchException exception like this:

import java.util.InputMismatchException;
import java.util.Scanner; 
public class AreaCircle { 
    public static void main(String[] args) {
        // TODO code application logic here
        Scanner sc = new Scanner(System.in); // read the keyboard
        System.out.println("This program will calculate the area of a circle");
        System.out.println("Enter radius:");//Print to screen
        try {
            double r = sc.nextDouble(); // Read in the double from the keyboard
            double area = (3.14 *r * r);

            String output = "Radius: " + r + "\n";
            output = output + "Area: " + area + "\n";
            System.out.println("The area of the circle  is " + area);

        }
        catch( InputMismatchException e ) {
            System.out.println("Invalid Input, please enter a number");
            //put a message or anything you want to tell the user that their input was weird.
        }
        catch( NumberFormatException e ) {
            System.out.println("Invalid Input, please enter a number");
            //put a message or anything you want to tell the user that their input was weird.
        }
    }
}


回答2:

You should put these two lines -

double r = sc.nextDouble(); // Read in the double from the keyboard
double area = (3.14 *r * r); 

inside the try block -

import java.util.Scanner; 
import java.io;

/**
*
* @author Osugule
*/
public class AreaCircle
{ 
    /**
    * @param args the command line arguments
    */
    public static void main(String[] args)
    {
        // TODO code application logic here
        Scanner sc = new Scanner(System.in); // read the keyboard
        System.out.println("This program will calculate the area of a circle");            
        boolean correct_input = false;

        while(correct_input == false)
        {
            System.out.println("Enter radius:");//Print to screen
            try
            {
                double r = sc.nextDouble(); // Read in the double from the keyboard
                double area = (3.14 *r * r); 
                String output = "Radius: " + r + "\n";
                output = output + "Area: " + area + "\n";
                System.out.println("The area of the circle  is " + area);
                correct_input = true;
            }
            catch( NumberFormatException e )
            {
                System.out.println("Invalid Input, please enter a number");
                //put a message or anything you want to tell the user that their input was weird.
            }
            catch( InputMismatchException e )
            {
                System.out.println("Input Mismatch, please enter a number");
                //put a message or anything you want to tell the user that there is an 
                //input mismatch.
            }
        }

    }
}

From the documentation -

public double nextDouble()

Scans the next token of the input as a double. This method will throw InputMismatchException if the next token cannot be translated into a valid double value. If the translation is successful, the scanner advances past the input that matched.

Throws:

InputMismatchException - if the next token does not match the Float regular expression, or is out of range.

NoSuchElementException - if the input is exhausted

IllegalStateException - if this scanner is closed

So if you enter an invalid character, sc.nextDouble() is probably throwing an InputMismatchException which won't be caught by the catch block because it only catcher NumberFormatException. So your program will terminate after throwing an exception but you won't get any messages.

To handle this scenario also, add the following block, just under your current catch block -

catch( NumberFormatException e )
{
    System.out.println("Invalid Input, please enter a number");
    //put a message or anything you want to tell the user that their input was weird.
}

// New catch block 
catch( InputMismatchException e )
{
    System.out.println("Input Mismatch, please enter a number");
    //put a message or anything you want to tell the user that there is an 
    //input mismatch.
}


回答3:

I edited the answer so it will ask the user again if the input is wrong

You need to put nextDouble in the try clause:

boolean inputProcessed = false;
while (!inputProcessed) {
    try {
        double r = sc.nextDouble(); // Read in the double from the keyboard
        double area = (3.14 *r * r); 
        String output = "Radius: " + r + "\n";
        output = output + "Area: " + area + "\n";
        System.out.println("The area of the circle  is " + area);
        // this indicates that we were able to process the input, and we should stop now.
        inputProcessed = true; 
    }
    catch( NumberFormatException e ) {
        System.out.println("Invalid Input, please enter a number");
        //put a message or anything you want to tell the user that their input was weird.
    }
}

Note that I added the line after the try-catch to the try clause, as if you fail to parse the number, they should not be printed.