2016-09-27 4 views
0

このコードの仕組みがわかりません。この問題は、特定の年の後に別の数字で翌年に発見されます。このブール配列はどのように機能しますか?

public Main(){ 
    try{ 
     BufferedReader in; 
     in = new BufferedReader (new InputStreamReader (System.in)); //Used for CCC 
     String year = (in.readLine()); 
     for(int i = Integer.parseInt(year)+1;; i++){ 
      String f = Integer.toString(i); 
      boolean [] characters = new boolean[10]; 
      boolean unique = true; 
      for(int x = 0; x < f.length(); x++){ 
       if (characters[f.charAt(x) - '0']){ 
        unique = false; 
        break; 
       } 
       else{ 
        characters[f.charAt(x)-'0'] = true; 
       } 
      } 
      if (unique){ 
       System.out.println(f); 
       return; 
      } 

具体的にはどのようにすればよいのですか?

if (characters[f.charAt(x) - '0']){ 

ここでブール値のチェックは何ですか?彼らはすべて偽にデフォルト設定されるべきではありませんか?なぜそこに ''0があるのですか?ごめんなさい。

+5

ブレークポイントを設定しようとしましたか、それともコードをデバッグして自分で理解しようとしましたか? –

+0

'すべてデフォルトではfalseにしてはいけませんか? - そうですが、文字' [x] 'をチェックしていません[f.charAt(x) - '0']' –

+0

@ cricket_007私は試しましたが、私はJavaの初心者ですので、デバッガの使い方は分かりませんでした。 –

答えて

1

発現

f.charAt(x) - '0' 

文字列fに位置xにデジットに応じて0〜9の数値を返します。したがって、コードは配列の10桁の位置のそれぞれにブール値フラグを設定し、1桁が複数回出現すると、偽を報告して内側ループから抜け出し、翌年を考慮します。

+0

ブールフラグとは何ですか?私はそれをgoogledしかし、私は本当にfalseまたはtrueとしてブール値を設定していることを伝えることはできません? –

+0

@ I.Lavはい、遭遇する各数字の 'characters'配列に' true'を設定するだけです。既に見た番号が見つかった場合、その年は拒否されます。 –

0

charactersは、10要素のブール値の配列であり、指定された入力文字(10進数に制限されるはずです)が入力に複数回現れるかどうかを格納します。

数字の文字コードは0x30〜0x39の範囲です。 f.charAt(x)は、入力のインデックスxにある文字を返し、次に- '0'は、ブール値の配列のインデックスである0〜9の範囲の数値に変換します。

文字が最初に見つかると、そのスロットはtrueに設定されます。再度見つかった場合、uniquefalseに設定され、入力に重複する文字があることを示します。

関連する問題