了解Java异常处理:简单的Try Catch块

时间:2013-11-22 05:50:30

标签: java exception-handling

我正在尝试学习Java异常处理。我写了以下代码:

import java.util.*;
public class Problem1
{
    static Scanner length = new Scanner(System.in);
    public static void main(String[] args)
    {
            double x;
            double y;

            System.out.println("Input a length in Feet and than Inches.");

            x = length.nextDouble();
            y = length.nextDouble();

            try
            {
                    System.out.println("Feet - Inches:" + x * 12);
                    System.out.println("Inches - Centimeters:" + y * 2.14);
            }

            catch (InputMismatchException imeRef)
            {
                    System.out.println("Do not use letters" + imeRef.toString());
            }
    }
}   

该程序只是将英尺和英寸的输入转换为英寸。我尝试通过输入以下内容来打破它:

-1
e

程序中断,但我没有正确捕获和处理异常。我有什么想法吗?

由于

4 个答案:

答案 0 :(得分:2)

您需要将读取用户输入的2个输入语句移动到try块中。只有在读取输入并且在catch中处理该错误时才会抛出该错误,这些语句需要位于try块中,因为catch只会处理其相应try块中抛出的异常

try {
    x = length.nextDouble(); // moved inside try
    y = length.nextDouble(); // moved inside try
    System.out.println("Feet - Inches:" + x * 12);
    System.out.println("Inches - Centimeters:" + y * 2.14);
}

答案 1 :(得分:1)

放下以下两行 -

 x = length.nextDouble();
 y = length.nextDouble();

try区块内 -

try {
    x = length.nextDouble();
    y = length.nextDouble();

    System.out.println("Feet - Inches:" + x * 12);
    System.out.println("Inches - Centimeters:" + y * 2.14);
}
catch (InputMismatchException imeRef) {
    System.out.println("Do not use letters" + imeRef.toString());
}

catch块仅捕获其相应try块中 语句引发的匹配异常。

答案 2 :(得分:1)

你没有捕获异常是因为在为变量x和y调用length.nextDouble()时抛出了异常。

  x = length.nextDouble();
  y = length.nextDouble();

但是你没有把它们放在try-catch代码中。将上面的2行代码放到try - catch中,你将捕获异常。

答案 3 :(得分:1)

catch语句只捕获在相应的try块中抛出的异常。

这就是你想要的。这会一次一个地提示用户输入每个问题,然后重置并再次询问输入错误。注意catch中的length.next() - 这是避免无限循环所必需的 - 你必须超越那个坏标记。

while (true) {
    try {
        System.out.println("Input a length in feet");
        double x = length.nextDouble();

        System.out.println("Input a length in inches");
        double y = length.nextDouble();

        System.out.println("Feet - Inches:" + x * 12);
        System.out.println("Inches - Centimeters:" + y * 2.14);

        break;
    }

    catch (InputMismatchException imeRef) {
        System.out.println("Do not use letters" + imeRef.toString());

        // need to purge the bad token
        length.next();
    }
}