2016-05-02 5 views
0

SSAから赤ちゃんの名前のファイルを読んで、指定された年の名前の数に関する統計を返す学校用のプログラムを作成しています。if-elseステートメントの後でもブール変数がtrueに設定されています

偽のfoundブール値を出力するのに問題があります。これにより、指定された名前が見つからないことが表示されます。

import java.util.*; 
import java.io.*; 
public class BabyNames{ 
    public static void main(String []args) 
    throws FileNotFoundException 
    { 
     File file = new File ("babynames.txt");   
     Scanner input = new Scanner(file); 
     Scanner console = new Scanner(System.in); 
     int amount = 0; 
     System.out.print("Name? "); 
     String s1 = console.next(); 
     boolean found = true; 

     while (input.hasNextLine()) { 
      String line = input.nextLine(); 
      Scanner lineScan = new Scanner(line); 
      String name = lineScan.next(); 

      if(name.equals(s1)){ 
       found = true; 

       for(int i = 1; i<= 11; i++) { 
        amount = lineScan.nextInt(); 
        int k = amount/20;      
        System.out.print((i * 10) + 1890 + ": "); 
        for(int r = 1; r <= k; r++) { 
         System.out.print("*");       
        } 
        System.out.println(); 
       } 

      } else { 
       found = false; 
      }   
     } 
     if(found = false){ //it never turns back into false 
      System.out.println(s1 + " is not found."); 
     } 
     input.close(); 
    } 
} 
+0

それでも論理には深刻な欠陥があります。検索された値のチェックは最後の入力行だけをチェックします。その値は他のすべての入力行では無視されます。 – FredK

+2

IDEのデバッガを知ることは、大いに役立ちます。あなたは 'found'が毎回' false'になるのを見たでしょう) – CubeJockey

答えて

3

if(found = false){foundからfalseを割り当て、その結果をテスト(その意志おそらく、この意味します常にfalseとなります)。等価演算子は==であり、=ではありません。 =は、常にの割り当てです。

ブール変数を使用すると、基本的には==または!=は決して必要ありません。変数自体をテストするだけです:

if (!found) { 
2

最後にifを確認してください。

if(found == false){ //it never turns back into false 
    System.out.println(s1 + " is not found."); 
} 

が、将来的にはこの種の誤りを防ぐために、あなたがこれを行う必要があります:

if(!found){ //reads "if not found" 
    System.out.println(s1 + " is not found."); 
} 
+0

これは真偽と真偽を比較してはいけない理由です。 – FredK

+0

if(!found)を実行することを検討してください。 –

関連する問題