我对编程非常陌生,我已经编写了一个应用程序来处理某些形状的区域。
如果需要,我可以在另一个班级中提供AreaCalculations
,但效果很好。
我的问题是检查用户何时键入字符而不是双字符。正如您从我的代码中看到的那样,我通过使用while循环和(!reader.NextDouble())
来实现它。
这有效,但我必须重复这个问题。我可以在整个程序中做到这一点但是有一种更容易/更整洁的方法吗?
谢谢,
克雷格
到目前为止我的代码:
package areaprog;
import java.util.Scanner;
public class Mainprog {
public static void main (String [] args){
//Area Menu Selection
System.out.println("What shape do you need to know the area of?\n" +
"1: Square?\n" +
"2: Rectangle?\n" +
"3: Triangle?\n" +
"4: Circle? \n" +
"5: Exit\n"
);
//User input for menu
Scanner reader = new Scanner(System.in);
System.out.println("Number: ");
//Menu syntax checking
while (!reader.hasNextDouble())
{
System.out.println("Thats not a number you tool.\n");
System.out.println("Now pick again\n" +
"1: Square?\n" +
"2: Rectangle?\n" +
"3: Triangle?\n" +
"4: Circle? \n" +
"5: Exit\n"
);
reader.next(); //ask for next token?
}
double input = reader.nextDouble();
reader.nextLine();
//Depending on user selection, depends on what method is called using switch.
Scanner scan = new Scanner(System.in);
//Square selection
if (input == 1){
System.out.println("What is a length of 1 side of the Square?\n");
double s1 = scan.nextDouble();
double SqAns = AreaCalculator.getSquareArea(s1);
System.out.println("The area of you square is: " + SqAns);
}
//Rectangle selection
if (input == 2){
System.out.println("What is the width of your rectangle?.\n");
double r1 = scan.nextDouble();
System.out.println("What is the height of your rectangle?\n");
double r2 = scan.nextDouble();
double RecAns = AreaCalculator.getRectArea(r1, r2);
System.out.println("The area of your rectangle is: " + RecAns);
}
//Triangle selection
if (input == 3){
System.out.println("What is the base length of the triangle?.");
double t1 = scan.nextDouble();
System.out.println("What is the height of your triangle?");
double t2 = scan.nextDouble();
double TriAns = AreaCalculator.getTriArea(t1, t2);
System.out.println("The area of your triangle is " + TriAns);
}
//Circle selection
if (input == 4){
System.out.println("What is the radius of your circle?.");
double c1 = scan.nextDouble();
double CircAns = AreaCalculator.getCircleArea(c1);
System.out.println("The area of your circle is " + CircAns);
}
//Exit application
if (input == 5){
System.out.println("Goodbye.");
}
}
}
好的,所以我添加了一个Exception来捕获错误。所以现在它处理不使用插入器的人的方式有点清洁。
编号: 1 广场一边的长度是多少?
一 你为什么要聪明?使用整数。
但是程序结束了......我怎么能让他们回到主菜单,甚至让他们重新输入最后的努力呢?
谢谢,
克雷格
答案 0 :(得分:0)
就菜单驱动程序而言,它的优点和好处。但正如你所说: “这有效,但我必须重复这个问题。”
请阅读Exception handling tutorial in java
所以,你的代码看起来像这样:
try
{
System.out.println("Thats not a number you tool.\n");
System.out.println("Now pick again\n" +
"1: Square?\n" +
"2: Rectangle?\n" +
"3: Triangle?\n" +
"4: Circle? \n" +
"5: Exit\n"
);
input = reader.nextDouble();
}
catch(InputMismatchException err)
{
System.out.print(err.getMessage());
}
不要忘记导入import java.util.InputMismatchException
或import java.util.*
尝试在try
块之外声明变量,可能在外部不可见。