JAVA need validation for integers, only accept positive integers, no letters or
ID: 665928 • Letter: J
Question
JAVA
need validation for integers, only accept positive integers, no letters or symbols, etc.
Getting error in validation.java file.
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextDouble(Scanner.java:2413)
at circle.CircleApp.main(CircleApp.java:23)
Java Result: 1
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package circle;
import java.text.DecimalFormat;
import java.util.Scanner;
public class CircleApp {
public static void main(String[] args) {
String choice = "y";
Scanner sc = new Scanner(System.in);
DecimalFormat decimal = new DecimalFormat("0.##");
while (choice.equalsIgnoreCase("y")) {
System.out.println("Welcome to the Circle Tester ");
System.out.print("Enter radius: ");
double radius = sc.nextDouble();
sc.nextLine();
Circle c = new Circle(radius);
String message = "Circumference: "
+ decimal.format(c.getCircumference()) + " " + "Area: "
+ decimal.format(c.getArea());
System.out.println(message);
choice = Validator.validator(sc, choice);
if (choice.equalsIgnoreCase("n")) {
System.out.println();
System.out.println("Goodbye. You created " + c.getObjectCount() + " Circle object(s).");
}
}
}
}
_________________________________________________
package circle;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Scanner;
public class Circle {
//public static void main(String[] args) {
DecimalFormat decimal = new DecimalFormat("0.##");
private double radius;
private static int count = 0;
private double circumfrence;
private double area;
public Circle(double radius)
{
this.radius = radius;
count++;
}
public double getCircumference() {
this.circumfrence = Math.PI * 2 * radius;
return circumfrence;
}
public String getFormattedCircumference() {
return formatNumber(getCircumference());
}
public double getArea()
{
area = Math.PI * (radius * radius);
return area;
}
public String getFormattedArea() {
return formatNumber(getArea());
}
private String formatNumber(double x) {
NumberFormat number = NumberFormat.getNumberInstance();
number.setMaximumFractionDigits(2);
String format = number.format(x);
return format;
}
public static int getObjectCount()
{
return count;
}
}
____________________________________________________
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package circle;
import java.util.Scanner;
public class Validator {
public static String validator(Scanner sc, String choice) {
System.out.println();
System.out.print("Continue? (y/n): ");
choice = sc.nextLine();
while (!choice.equalsIgnoreCase("y") && !choice.equalsIgnoreCase("n")) {
if (choice.equals("")) {
System.out.println("Error! This entry is required. Try again.");
System.out.print("Continue? (y/n): ");
} else {
System.out.println("Error! Entry must be 'y' or 'n'. Try again.");
System.out.print("Continue? (y/n): ");
}
choice = sc.nextLine();
}
return choice;
}
public static double getDouble(Scanner sc, String prompt) {
double d = 0.0;
boolean isValid = false;
while (isValid == false) {
System.out.print(prompt);
if (sc.hasNextDouble()) {
d = sc.nextDouble();
isValid = true;
} else {
System.out.println("Error! Invalid decimal value. Try again.");
}
sc.nextLine();
}
return d;
}
public static int getInt(Scanner sc, String prompt) {
int i = 0;
boolean isValid = false;
while (isValid == false) {
System.out.print(prompt);
if (sc.hasNextInt()) {
i = sc.nextInt();
isValid = true;
} else {
System.out.println("Error! Invalid integer value. Try again.");
}
sc.nextLine();
}
return i;
}
}
______________________________________________
Specifications
Create a class named Circle to store the data about this circle. This class should contain these constructors and methods:
public Circle(double radius)
public double getCircumference()
public String getFormattedCircumference()
public double getArea()
public String getFormattedArea()
private String formatNumber(double x)
public static int getObjectCount()
The formulas for calculating circumference and area are:
circumference = 2 * pi * radius
area = pi * radius2
For the value of pi, use the PI constant of the java.lang.Math class (Math.PI )
Create a class named CircleApp that gets the user input, creates a Circle object, and displays the circumference and area.
Create a class named Validator use its static methods to validate the data in this application.
Explanation / Answer
package circle;
import java.text.DecimalFormat;
import java.util.Scanner;
public class CircleApp {
public static void main(String[] args) {
String choice = "y";
String regex = "\d+";
Scanner sc = new Scanner(System.in);
DecimalFormat decimal = new DecimalFormat("0.##");
System.out.println("Welcome to the Circle Tester ");
while (choice.equalsIgnoreCase("y")) {
System.out.print("Enter radius: ");
String ch=sc.next();
if(ch.matches(regex))
{
double radius = Double.valueOf(ch);
sc.nextLine();
Circle c = new Circle(radius);
String message = "Circumference: "
+ decimal.format(c.getCircumference()) + " " + "Area: "
+ decimal.format(c.getArea());
System.out.println(message);
choice = Validator.validator(sc, choice);
if (choice.equalsIgnoreCase("n")) {
System.out.println();
System.out.println("Goodbye. You created " + c.getObjectCount() + " Circle object(s).");
}
}
else{
System.out.println("Error expecting some integer value... ");
}
}
}
}
package circle;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Scanner;
public class Circle {
//public static void main(String[] args) {
DecimalFormat decimal = new DecimalFormat("0.##");
private double radius;
private static int count = 0;
private double circumfrence;
private double area;
public Circle(double radius)
{
this.radius = radius;
count++;
}
public double getCircumference() {
this.circumfrence = Math.PI * 2 * radius;
return circumfrence;
}
public String getFormattedCircumference() {
return formatNumber(getCircumference());
}
public double getArea()
{
area = Math.PI * (radius * radius);
return area;
}
public String getFormattedArea() {
return formatNumber(getArea());
}
private String formatNumber(double x) {
NumberFormat number = NumberFormat.getNumberInstance();
number.setMaximumFractionDigits(2);
String format = number.format(x);
return format;
}
public static int getObjectCount()
{
return count;
}
}
package circle;
import java.util.Scanner;
public class Validator {
public static String validator(Scanner sc, String choice) {
System.out.println();
System.out.print("Continue? (y/n): ");
choice = sc.nextLine();
while (!choice.equalsIgnoreCase("y") && !choice.equalsIgnoreCase("n")) {
if (choice.equals("")) {
System.out.println("Error! This entry is required. Try again.");
System.out.print("Continue? (y/n): ");
} else {
System.out.println("Error! Entry must be 'y' or 'n'. Try again.");
System.out.print("Continue? (y/n): ");
}
choice = sc.nextLine();
}
return choice;
}
public static double getDouble(Scanner sc, String prompt) {
double d = 0.0;
boolean isValid = false;
while (isValid == false) {
System.out.print(prompt);
if (sc.hasNextDouble()) {
d = sc.nextDouble();
isValid = true;
} else {
System.out.println("Error! Invalid decimal value. Try again.");
}
sc.nextLine();
}
return d;
}
public static int getInt(Scanner sc, String prompt) {
int i = 0;
boolean isValid = false;
while (isValid == false) {
System.out.print(prompt);
if (sc.hasNextInt()) {
i = sc.nextInt();
isValid = true;
} else {
System.out.println("Error! Invalid integer value. Try again.");
}
sc.nextLine();
}
return i;
}
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.