我试图创建一个代码,我在其中读取一个双精度并打印出它的正方形,但我也希望它知道用户何时输入负数或非双精度常数并让它们输入一个新数字。我遇到了InputMismatchException问题。我的代码不能正常工作,它编译但编译器只是永远运行。任何的意见都将会有帮助。
import java.util.*;
class constants
{
public static void main(String[] args)
{
double constant = getConstant();
System.out.println("Square of " + constant + " = " + constant*constant);
}
//-------------------------------------------------------------------------------
public static double getConstant()
{
Scanner kb = new Scanner(System.in);
System.out.println("Enter non-negative double constant");
double constant = kb.nextDouble();
try {
double selection = kb.nextDouble();
}
catch (InputMismatchException e) // where there is error.
{
System.out.println("Not a double constant. Re-enter");
}
return constant;
}
}
答案 0 :(得分:0)
我知道您正在寻找用户输入 15.65 , 145.95 等值,但是-5.85(负数)和11(整数值)应该被拒绝。事实是,在java中,任何整数也是双重
示例:强>
public void onItemSelected(AdapterView<?> parent , View view, int pos, long id) {
parent.getItemAtPosition(pos);
String[] colors = getResources().getStringArray(R.array.colors);
String selectedColor = colors[pos];
getWindow().getDecorView().setBackgroundColor(Color.parseColor(selectedColor));
spinner.setBackgroundColor(Color.parseColor(selectedColor));
view.setBackgroundColor(Color.parseColor(selectedColor));
因此,它们不会产生输入不匹配异常。为此,您必须明确检查是否满足这些条件,并且您还必须明确地抛出InputMismatchException。
最好定义一次扫描程序,例如作为全局静态变量(例如,如果在循环中使用call getConstant(),则可能会遇到问题)
您无需定义选择双精度值。这是一个有效的插图
double x = 100; // is correct
double y = -15.85 // is correct
答案 1 :(得分:0)
以下是如何完成的,您需要捕获的异常是NumberFormatException。但有一点,负数仍然可以有正方形,它们不能有平方根。
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
try {
double temp = kb.nextDouble();
//If the input is not a double, catch the number format exception
} catch (NumberFormatException e) {
e.printStackTrace();
}
//If the number is in proper format, (can be negative) print its square.
System.out.println("Square of " + temp+ " = " + temp*temp);
}
出于某种原因,如果您不想打印负数的方块,只需在打印结果之前检查该条件。