or1ko's diary

日々を書きます

2402 Palindrome Numbers

いつもの会での指摘を反映した結果、258 Bになった。下のコード

import java.util.*;
class Main{
  static{
    Scanner s=new Scanner(System.in);
    for(int o,i,k;(o=s.nextInt())!=0;o+=k-1,System.out.println(o+""+(i==2?"":new StringBuffer((i%2!=0?o:o/10)+"").reverse()))){
      i=2;k=1;
      for(;o>9*k;i++,k*=i%2+1==1?10:1)
        o-=9*k;
    }
    System.exit(0);
   }
}

(o=s.nextInt())!=0という書き方は、C言語でできるのは知っていましたが、なんという文法なのか分からなかったので、いままで使用したことがありません。なんという奴なんでしょうか?

breakをSystem.exit(0)にしたらという助言をやってみたところ、なぜかコンパイルできませんでした。"初期化子は正常に完了できなければなりません。"というエラーがでたのですが、なぜ最後では良くて、breakある箇所ではダメなのかが分かりません。(以下のコードのbreakのところをSystem.exit(0)にするとコンパイルできない)

import java.util.*;
class Main{
  static{
    Scanner s=new Scanner(System.in);
    for(;;){
      int o=s.nextInt(),i=2,k=1;
      if(o==0)break;
      for(;o>9*k;i++,k*=i%2+1==1?10:1)
        o-=9*k;
      o+=k-1;
      System.out.println(o+""+(i==2?"":new StringBuffer((i%2!=0?o:o/10)+"").reverse()));
    }
    System.exit(0);
  }
}

まだまだコードが短くなりそうですが、期限が過ぎたらやらないと決めてるので、もう止めます。