【问题标题】:Testing Catch Statements of a NFE测试 NFE 的 Catch 语句
【发布时间】:2014-10-05 15:11:10
【问题描述】:

好吧,我是编程课的入门学生,我正在尝试测试 NFE 的 catch 语句。我不知道如何正确格式化代码,但就是这样。

import java.util.Scanner;

public class Geo {

    public static void main(String[] args) {

        try {
            Scanner inp = new Scanner(System.in);
            System.out.print("Name?");
            String name = inp.nextLine();
            System.out.print("Number?");
            double num = inp.nextDouble();
            System.out.print("Integer?");
            int num2 = inp.nextInt();
        } catch(NumberFormatException e) {
            System.out.println("Usage error");
        }
        System.out.println(name);
        System.out.println(num);
        System.out.println(num2);   
    }

}

它一直说变量、name、num 和 num2 是未定义的。我在这里做错了什么,因为我回顾了一个旧实验室,而这正是我以前所做的。有什么提示吗?

现在我修复了它,所以代码看起来像这样

public static void main(String[] args) {

        try {
            Scanner inp = new Scanner(System.in);
            System.out.print("Name?");
            String name = inp.nextLine();
            System.out.print("Number?");
            double num = inp.nextDouble();
            System.out.print("Integer?");
            int num2 = inp.nextInt();
            System.out.println(name);
            System.out.println(num);
            System.out.println(num2);
        } catch(NumberFormatException e) {
            System.out.println("Usage error");
        }

    }

但是 catch 没有运行。那是怎么解决的。就像我希望它完全运行尝试一样,但如果出现问题,它会继续运行,然后尝试失败,然后捕获问题。

【问题讨论】:

  • 您需要在try/catch 范围之外定义这些变量。
  • 或者将 println 语句移到 try 块中,使它们在同一个作用域内..
  • 好的,我也可以放弃尝试吗?
  • @Jack 如果您想赶上 NFE,请不要。
  • 只需将 NumberFormatException 更改为 Exception。

标签: java syntax-error


【解决方案1】:

你必须在 try/catch 之上初始化变量。

public static void main(String[] args) {
    String name = null;
    double num = 0;
    int num2 = 0;
    try {
        Scanner inp = new Scanner(System.in);
        System.out.print("Name?");
        name = inp.nextLine();
        System.out.print("Number?");
        num = inp.nextDouble();
        System.out.print("Integer?");
        num2 = inp.nextInt();
    } catch (Exception e) {
        System.out.println("Usage error");
    }
    System.out.println(name);
    System.out.println(num);
    System.out.println(num2);
}

public static void main(String[] args) {
    try {
        Scanner inp = new Scanner(System.in);
        System.out.print("Name?");
        String name = inp.nextLine();
        System.out.print("Number?");
        double num = inp.nextDouble();
        System.out.print("Integer?");
        int num2 = inp.nextInt();

        System.out.println(name);
        System.out.println(num);
        System.out.println(num2);
    } catch (Exception e) {
        System.out.println("Usage error");
    }
}

【讨论】:

    【解决方案2】:

    您引用的变量在try 块中定义,因此仅在其中可见,而您尝试在try 块之外读取它们。
    您可以在try 块中进行打印,也可以在main 函数中定义变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-24
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 2015-09-13
      相关资源
      最近更新 更多