我正在尝试获取用户输入以找出用户想要打开的文件的名称,但是在我的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"
答案 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;
}
}