2017-07-05 75 views
0

這個程序運行完美,除了當我在輸入中使用questiom火星時:這是什麼?爲什麼它不讀取問號?

它應該對一個字符串中的重複項進行計數,並打印出連續重複次數的最高次數。任何其他字符都可以(#,* ...),但在這種情況下,它會返回數字:1.由於有6個問號,哪個錯誤。這就是爲什麼我懷疑nextLine()函數和「?」之間有什麼問題或者Char類和「?」。但我無法在任何地方找到答案。

import java.io.*; 
import java.util.*; 

public class Solution { 

    public static void main(String[] args) { 
     /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */ 

     Scanner scan = new Scanner(System.in); 

     String kell = scan.nextLine(); 
     char [] sor = kell.toCharArray(); 
     int max = kell.length(); 
     scan.close(); 
     int rész = 1; 
     int vég = 1; 
     boolean egyezett = false; 

     for(int i=0; i<max-1; i++) 
     { 
      if (sor[i]== sor[i+1]){ 
       rész++; 
       egyezett = true; 
      }else{ 
       if (egyezett){ 
        if (rész>vég){ 
         vég= rész; 
         egyezett = false; 
         rész = 1; 
        } else{ 
         egyezett = false; 
         rész = 1; 
        } 
       }      
      } 
     }           
     System.out.println(vég); 
    } 
} 
+1

您能否將您的變量名稱翻譯成英文。這很難閱讀。 – litelite

+1

如果你只有一種重複的字符(_?_在你的情況下),那麼'vég'永遠不會更新。您需要在循環之後執行在另一個循環中執行的檢查,以確保更新「vég」。使用調試器逐步執行代碼時,很容易發現這樣的錯誤。 OMG! – litelite

回答

1

這並不是特別要問號,而是重複發生在字符串末尾的事實。 sor[i]== sor[i+1]永遠是真的,resz總是增加,但veg從來沒有機會得到resz的值。

+0

謝謝!我坐在電腦前試圖練習幾個小時......我從未注意到這個錯誤!謝謝!打盹時間。 – Gindarel

0

在您的for循環的末尾添加

if (vég < rész) { 
     vég = rész; 
    } 

。這應該做的工作! ;)

+0

什麼是'重新'?你的意思是'rész'? – litelite

+0

是的,我的意思是rész^^ – Noixes