变量未被初始化,Void方法不能返回值,无法解析为变量

时间:2017-06-11 11:17:24

标签: java string variables input

我正在尝试获取用户输入以找出用户想要打开的文件的名称,但是在我的setName()方法中虽然我认为它应该是,但是变量FileName没有被初始化。 我可能还有getName()方法的另一个问题,但我不确定它是什么。 我能得到一些帮助吗?!

public void setName(){

    Scanner input = new Scanner(System.in);
    String FileName;
    boolean done = false;

    do{#Until the user enters a proper input it should continue to ask for input
        System.out.println("Please enter the name of the input file!");
        if(input.hasNextLine()){
            FileName = input.next();
            done = true;

        }else{
            System.out.println("Please enter a valid name");
        }


    }while(!done);

    return FileName // not being initialized and "Void methods cannot return a value"

}
public String getName(){
    return FileName; //The IDE says "FileName cannot be resolved to a variable"

3 个答案:

答案 0 :(得分:2)

首先你不应该用大写字母开始变量名(它工作正常,但它是床惯例)第二个你的FileName只存在于setName()方法中getName()不知道它的存在它被称为变量范围在这里你可以阅读它http://www.javawithus.com/tutorial/scope-and-lifetime-of-variables。你可能想要这样的东西

public class YourClassName {

String fileName;
public String setName(){

    Scanner input = new Scanner(System.in);
    boolean done = false;

    do{
        System.out.println("Please enter the name of the input file!");
        if(input.hasNextLine()){
            fileName = input.next();
            done = true;

        }else{
            System.out.println("Please enter a valid name");
        }


    }while(!done);

    return fileName;
}
public String getName() {
    return fileName;
}

}

注意fileName是如何在任何方法之外声明的,这种可行的方法称为字段。

答案 1 :(得分:2)

你的代码毫无意义。您试图在要设置内容的空白处返回String。所以没有理由在任何原因编写return FileName;(因此你有getName方法)。在两种方法之前初始化private String FileName所需的第二件事。然后在您setName()之后的方法FileName = input.next();中,您需要说this.FileName = FileName;,因此您实际上有一个可以使用的变量。下面是代码以及我将如何做到这一点:

private String FileName;

public void setName(){

Scanner input = new Scanner(System.in);
String FileName;

do{#Until the user enters a proper input it should continue to ask for input
    System.out.println("Please enter the name of the input file!");
    if(input.hasNextLine()){
        FileName = input.next();
        this.FileName = FileName

    }else{
        System.out.println("Please enter a valid name");
    }

public String getName(){
    return FileName;#The IDE says it can't resolve symbol FileName
}

答案 2 :(得分:1)

您的变量FileName必须以小写字母fileName开头。在您的代码中,此变量是本地变量,但如果您要使用getName()方法,则它必须是字段。并且您的setName()方法必须返回String。关于这个:

  

FileName未初始化。

变量FileName的分配条件为if(input.hasNextLine())。如果条件不满足,则变量未初始化。您需要在声明或else块中初始化变量。

所有代码:

public class ClassName {
    String fileName;

    public String setName() {

        Scanner input = new Scanner(System.in);
        boolean done = false;

        do { // until the user enters a proper input it should continue to ask for input
            System.out.println("Please enter the name of the input file!");
            if (input.hasNextLine()) {
                fileName = input.next();
                done = true;
            } else {
                fileName = "Default";
                System.out.println("Please enter a valid name");
            }
        } while (!done);

        return fileName;
    }

    public String getName() {
        return fileName;
    }
}