2015-11-25 35 views
0

我有兩個嵌套循環,外面的一個從字母表(A-Z)的數組中讀取並將其與從文件中讀取的字符進行比較。它應該寫入一個不同的文件從字母表中的字母和它在文件中提到的次數。所以就是這樣:爲什麼我的外循環不會增加到數組的下一個元素?

for(int i = 0; i<alph.length; i++) 
     { 
      int count = 0; 

      for(;;) 
      { 
       try { 
        c = reader.read(); 

       } catch (IOException e) { 

        e.printStackTrace(); 
       }//end of catch 

       if(c==-1) 
        break; 

       if(alph[i] == (char) c) 
       { 

        count++; 

       } 


      }//end of endless loop 

      writer.println(alph[i] + " " + count); 

     }//end of alphabet loop 

它讀取的文件包括短語「JAVA STALE GUIDELINES」。並且它讀取A被提及3次並寫入罰款。但是,它不會轉到下一個字母和後面的字母等等。

到達該位的信只是一個:

if(alph[i] == (char) c) 
       { 

        count++; 

       } 

其他所有字母寫入0

這是最終的結果:

A 3 乙0 C 0 D 0 E 0 F 0 G 0 H 0 I 0 Ĵ0 ķ0 L 0 G 0 N 0 Ø0 P 0的 Q 0 ,R 0 秒0 Ť0 U 0 -V 0 W 0 X 0 ÿ 0 Z 0

+0

因爲您在外部循環中迭代字母,並在內部循環中讀取x個字符。一旦你完成了'A',輸入文件在EOF,你的程序退出。 – Robert

回答

0

問題是reader對象位於第一個循環之後的文件末尾。您需要在循環開始時調用reader.reset()將其移回文件的開頭。

將文件閱讀器移動到外部循環和將字母移到內部循環會更好,但是,因爲反覆讀取同一文件效率不高。

0

您只能讀取一次文件,因此在計算第一個字母「A」的實例後退出。你可以把你的字母表放在一個帶有整數的地圖上,並使用 Arrays.asList(alpha).contains(c) ,如果它包含在列表中,則在地圖中增加該字母的計數。