Java 测试NFE的Catch语句

Java 测试NFE的Catch语句,java,syntax-error,Java,Syntax Error,好的,我是一个编程课的入门学生,我正在测试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?");

好的,我是一个编程课的入门学生,我正在测试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是未定义的。我在这里做错了什么,因为我在回顾一个旧的实验室,这正是我以前做过的。有什么提示吗

现在我修复了它,代码如下所示

公共静态void main(字符串[]args){


但是catch没有运行。这是如何修复的。就像我希望它完全运行try一样,但是如果出现问题,它会继续运行,然后退出try,然后捕获问题。

您必须在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);
}


您必须在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);
}


您必须在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);
}


您必须在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);
}


您所引用的变量是在
try
块中定义的,因此,当您试图在
try
块之外读取变量时,这些变量仅在块中可见。

您可以在
try
块中进行打印,也可以在
main
函数中定义变量。

您引用的变量在
try
块中定义,因此,当您试图在
try
块之外读取变量时,这些变量仅在块中可见。

您可以在
try
块中进行打印,也可以在
main
函数中定义变量。

您引用的变量在
try
块中定义,因此,当您试图在
try
块之外读取变量时,这些变量仅在块中可见。

您可以在
try
块中进行打印,也可以在
main
函数中定义变量。

您引用的变量在
try
块中定义,因此,当您试图在
try
块之外读取变量时,这些变量仅在块中可见。


您可以在
try
块中进行打印,也可以在
main
函数中定义变量。

您需要在
try/catch
范围之外定义这些变量。或者将println语句移动到try块中,使它们位于同一范围内。好的,我也可以去掉try吗?@Jack如果不是的话您想捕获NFE。只需将NumberFormatException更改为Exception。您需要在
try/catch
范围之外定义这些变量。或者将println语句移动到try块内,使它们位于同一范围内。好的,我也可以取消try吗?@Jack如果您想捕获NFE,则不需要。只需更改NumberFormatException选项到异常。您需要在
try/catch
范围外定义这些变量。或者将println语句移动到try块内,使它们位于同一范围内。好的,我也可以取消try吗?@Jack如果您想捕获NFE,则不需要。只需将NumberFormatException更改为Exception。您需要定义这些变量在
try/catch
作用域之外。或者将println语句移动到try块内,使它们位于同一作用域中。好的,我也可以取消try吗?@Jack如果您想捕获NFE,则不需要。只需将NumberFormatException更改为Exception。