2016-11-09 11 views
0

毎回私の関数を実行すると、必要な演算子が返されません。booleanこの方法では、ファイルEmployee.txtが読み込まれ、次々にファイルが読み込まれます。私がしたことは、分割された文字列を格納するための文字列配列を作成し、String.equalsIgnorCase()メソッドを実行して、対応するものがファイルのデータと一致するかどうかを調べることです。ここで方法ブール式(JAVA)を使用しているときにJavaループが正しく終了しない - 初心者

コードのコードは次のとおり)ここ

public static boolean SearchByID(String ID){ 
    boolean bool = false; 
    int idLoc = 3; 
    try(BufferedReader bufr = new BufferedReader(new FileReader(EMPLOYEE_TXT))){ 
     String line = bufr.readLine(); 
     /*Split the records into an array*/ 
     String[] lines; 

     while(line !=null){ 
      //do the macthing of data here 
      lines = line.split(";"); 
      if(lines[idLoc].equalsIgnoreCase(ID)){ 
       bool = true; 
       break; 
      }else{ 
       bool = false; 
       break; 
      } 
     } 
     bufr.close(); 
    }catch(Exception ex){ 
     ex.printStackTrace(); 
    } 
    return bool; 
} 

をSearchByID方法SearchByID(の実装です。私が本当に必要を行うにはEmployee.txt

kadi,bens;male;baliwasan grande;88-11;99111;[email protected];400.0 

doe,john;male;11311 asdd;99811;9911331;[email protected];500.0 

    System.out.print("Search user by ID:"); 
        String strID = sID.nextLine(); 

        if(IOLibraries.SearchByID(strID)){ 
         System.out.println("A match has been found"); 
        }else{ 
         System.out.println("No match found"); 
        } 

コンテンツは、私はそれがための検索で正しいboolean値を返す必要があり、その後、ファイル上のすべてのデータを読み取る必要がありますEmployee.txtファイルのすべてのユーザー

最初のエントリの下の値を検索すると検索できませんでした。たとえば、ID 88-11を検索すると、データを正しく取得できますが、99811などの最初のエントリの下を検索すると、falseまたは「一致しません」がEmployee.txtファイルにあっても返されます。

+1

これは 'regex'と何が関係していますか? –

+0

*編集*:最初のレコードのみがwhileループで読み込まれます。 – Dana

+0

最初に学ばなければならないことは次のとおりです。1.コードを適切にインデントすることを学ぶ2. Java命名規則に従うことを学ぶ3.意味のある名前を付けることを学ぶ –

答えて

0

問題は、最初の行を読み取った後に常にループから抜け出すことです。

while(line !=null){ 
    //do the macthing of data here 
     lines = line.split(";"); 
     if(lines[idLoc].equalsIgnoreCase(ID)){ 
      bool = true; 
      break; 
     }else{ 
      bool = false; 
      break; 
     } 
    } 

elseブロックに注意してください。最初の行がIDと一致しない場合は、elseブロックに入り、ブロックが見つからないことを宣言します。あなたは何をすべき

  1. bool(またはより良いfoundそれを呼び出す)を初期化しているだけループの前にfalse(あなたはまだ行っているため)
  2. としてあなたがマッチングを発見した場合はループから抜け出しますライン

すなわち

while(line !=null){ 
     lines = line.split(";"); 
     if(lines[idLoc].equalsIgnoreCase(id)){ 
      found = true; 
      break; 
     } 
    } 
のようなものにループを変更します3210
関連する問題