2017-06-11 7 views
1

私のsetName()メソッドで、ユーザーが開くファイルの名前を見つけるためにユーザー入力を取得しようとしている私はそれをする必要がありますが、変数FileNameは初期化されていません。 getName()メソッドに別の問題があるかもしれませんが、私はそれが何であるか分かりません。 私はいくつかの助けを得ることができますか?あなたは大文字でvarible名前を開始するべきではありませんすべての変数が初期化されていない、空のメソッドが値を返すことができない、変数に解決できない

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" 
+1

宣言 'FileName'。 –

答えて

2

あなたのコードは意味をなさない。あなたが何かを設定したい場所の空に文字列を返そうとしています。したがって、何らかの理由でreturn FileName;を書く理由はありません(そのため、あなたはあなたのgetNameメソッドを持っています)。 2つ目は、両方のメソッドの前に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

まず(それが正常に動作しますが、それはベッドの慣例である)は、第2のあなたのファイル名のみのsetName()メソッドのgetName(の内側に住んでいる)、その存在について、それを知りません可変スコープと呼ばれ、ここではhttp://www.javawithus.com/tutorial/scope-and-lifetime-of-variablesについて読むことができます。どのような方法は、あなたはおそらく、ファイル名がvirableのこの種は、フィールドと呼ばれている任意の方法の外で宣言されているどのようにこの

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; 
} 

}

お知らせのようないくつかのことを望んでいました。

1

あなたの変数FileName必見は小文字から始まる - fileName。コードではこの変数はローカル変数ですが、getName()メソッドを使用する場合は、フィールドでなければなりません。 setName()メソッドはStringを返す必要があります。これについて:

FileNameが初期化されていません。 if(input.hasNextLine()) -

可変FileNameの割り当て条件です。条件が満たされない場合、変数は初期化されません。宣言するとき、またはブロック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; 
    } 
} 
関連する問題