Java 正确的方法是什么?未找到初始化/符号错误

Java 正确的方法是什么?未找到初始化/符号错误,java,compiler-errors,initialization,java.util.scanner,Java,Compiler Errors,Initialization,Java.util.scanner,我一直在练习扫描器和异常,它们是相当新的,所以可能我在这里遗漏了一些东西: 这是编译器说它找不到文件名或f的第一种方式 do { try { System.out.print("Enter the file name: "); String filename = k.nextLine(); Scanner f = new Scanner(new File(filename))

我一直在练习扫描器和异常,它们是相当新的,所以可能我在这里遗漏了一些东西:

这是编译器说它找不到文件名或f的第一种方式

do {
            try {
                System.out.print("Enter the file name:  ");
                String filename = k.nextLine();
                Scanner f = new Scanner(new File(filename));
                done = true;
            }
            catch(FileNotFoundException ex1){
                System.out.println("The file "+filename+" does not exist.");
            }
            catch(Exception e){
                System.out.println("Unpredicted exception");
            }
        } while (!done);
我想我应该把它放在外面来修复它,但它以另一种方式抱怨f和文件名可能尚未初始化

Scanner k = new Scanner(System.in), f;
        String filename;
        boolean done = false;
// Request file from the user
        do {
            try {
                System.out.print("Enter the file name:  ");
                filename = k.nextLine();
                f = new Scanner(new File(filename));
                done = true;
            }
            catch(FileNotFoundException ex1){
                System.out.println("The file "+filename+" does not exist.");
            }
            catch(Exception e){
                System.out.println("Unpredicted exception");
            }
        } while (!done);

将filename的值初始化为null。这样,如果输入了catch块,那么在打印错误消息时,它仍然有一个值可供使用

String filename = null;

将filename的值初始化为null。这样,如果输入了catch块,那么在打印错误消息时,它仍然有一个值可供使用

String filename = null;

将filename的值初始化为null。这样,如果输入了catch块,那么在打印错误消息时,它仍然有一个值可供使用

String filename = null;

将filename的值初始化为null。这样,如果输入了catch块,那么在打印错误消息时,它仍然有一个值可供使用

String filename = null;

在“try”块启动之前,必须始终在这种情况下声明和初始化变量。否则,您将不得不面对以下错误: '找不到符号', “变量未初始化”


在代码中,您在“try”块之外声明了字符串变量,这很好,但问题是您没有初始化它。希望它能解决您的问题。

在“try”块启动之前,您必须始终在这种情况下声明并初始化变量。否则,您将不得不面对以下错误: '找不到符号', “变量未初始化”


在代码中,您在“try”块之外声明了字符串变量,这很好,但问题是您没有初始化它。希望它能解决您的问题。

在“try”块启动之前,您必须始终在这种情况下声明并初始化变量。否则,您将不得不面对以下错误: '找不到符号', “变量未初始化”


在代码中,您在“try”块之外声明了字符串变量,这很好,但问题是您没有初始化它。希望它能解决您的问题。

在“try”块启动之前,您必须始终在这种情况下声明并初始化变量。否则,您将不得不面对以下错误: '找不到符号', “变量未初始化”


在代码中,您在“try”块之外声明了字符串变量,这很好,但问题是您没有初始化它。希望它能解决您的问题。

变量的作用域就是声明它的块。您的第一个版本在
try
块中声明了
filename
,但您试图在
catch
块中使用它(尽管它是
try-catch
语法结构的一部分,但它是另一个块)

您的第二次尝试修复了这一问题,方法是声明变量的作用域包括它使用的所有位置,但是在java中,局部变量没有默认的初始化值;如果存在可能导致访问变量的代码路径,则必须提供一个值,然后才能为其分配值


修复方法是提供任何值(包括
null
)到
try catch
之前的变量,无论是在声明时,还是在声明后的行中。

变量的范围是声明它的块。您的第一个版本在
try
块中声明了
文件名
,但您试图在
catch
块中使用它(这是一个不同的块,尽管它是一个
try-catch
语法结构的一部分

您的第二次尝试修复了这一问题,方法是声明变量的作用域包括它使用的所有位置,但是在java中,局部变量没有默认的初始化值;如果存在可能导致访问变量的代码路径,则必须提供一个值,然后才能为其分配值


修复方法是提供任何值(包括
null
)到
try catch
之前的变量,无论是在声明时,还是在声明后的行中。

变量的范围是声明它的块。您的第一个版本在
try
块中声明了
文件名
,但您试图在
catch
块中使用它(这是一个不同的块,尽管它是一个
try-catch
语法结构的一部分

您的第二次尝试修复了这一问题,方法是声明变量的作用域包括它使用的所有位置,但是在java中,局部变量没有默认的初始化值;如果存在可能导致访问变量的代码路径,则必须提供一个值,然后才能为其分配值


修复方法是提供任何值(包括
null
)到
try catch
之前的变量,无论是在声明时,还是在声明后的行中。

变量的范围是声明它的块。您的第一个版本在
try
块中声明了
文件名
,但您试图在
catch
块中使用它(这是一个不同的块,尽管它是一个
try-catch
语法结构的一部分

您的第二次尝试修复了这一问题,方法是声明变量的作用域包括它使用的所有位置,但是在java中,局部变量没有默认的初始化值;如果存在可能导致访问变量的代码路径,则必须提供一个值,然后才能为其分配值


解决方法是在声明时或声明后的行中,在
try catch
之前为变量提供任何值(包括
null
)。

考虑更改标题以更好地反映您正在尝试的内容