Hello Java。
流行に乗ってるJavaを使えるようになって今時のITマンのふりをしよう。ということでJavaでなんかやってみる。今更流行に乗ってるとも言いがたいか。
参考このへん。
http://www.javaroad.jp/
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/index.html
試しにBrainFuckを作ってみるところまで。簡単でいいね。tryとかcatch、クラスとかよくわからんけど遊びでなんか作るくらいは直ぐできて面白い。オブジェクト指向プログラミングってなんだろうね。
というか「なんかString型とかあって便利なbetter C」程度の使い方しかしてないけど。
まずHello World。
HelloWorld.java
public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello World!"); } }
Systemというオブジェクトのoutっていうオブジェクトに仕込まれてるprintlnメソッドを読んだかんじ。たぶん。
% javac HelloWorld.java % java HelloWorld Hello World!
echoとかやってみよう。
Echo.java
import java.io.*; public class Echo{ public static void main(String[] args){ int c; try{ while((c = System.in.read()) != -1) System.out.write(c); } catch(IOException e){} } }
tryとcatch。聞いたことある。なんか例外とかを掴まえてくれるらしい。とりあえずめんどくさいので無視。
% javac Echo.java % java Echo こんにちはこんにちは! こんにちはこんにちは! aiueo. aiueo.
よい。
じゃ次BrainFuck作ってみよう。
import java.io.*; class BrainFuck{ private char[] code; private int length; private char[] mem; private int mp; public BrainFuck(){ code = new char[30000]; mem = new char[30000]; } public void putcode(char c){ code[length] = c; ++length; } private int toloopstart(int p){ int nest = 1; while(nest>0){ switch(code[--p]){ case '[': --nest; break; case ']': ++nest; break; } } return --p; } private int toloopend(int p){ int nest = 1; while(nest>0){ switch(code[++p]){ case '[': ++nest; break; case ']': --nest; break; } } return p; } private char bfread(){ try{ return (char)System.in.read(); } catch(IOException e){} return 0; } public void run(){ int cp = 0; while(cp < length){ switch(code[cp]){ case '+': ++mem[mp]; break; case '-': --mem[mp]; break; case '>': ++mp; break; case '<': --mp; break; case '.': System.out.write(mem[mp]); break; case ',': mem[mp] = bfread(); break; case '[': if(mem[mp]==0) cp = toloopend(cp); break; case ']': cp = toloopstart(cp); break; } ++cp; } System.out.flush(); } public void printcode(){ for(int cp = 0;cp<length;++cp) System.out.write(code[cp]); System.out.println(); } } public class BFi{ public static void main(String[] args){ char[] code = new char[10000]; int c; BrainFuck bf = new BrainFuck(); try{ while((c = System.in.read()) != -1) if(c=='+'|| c=='-' || c=='>' || c=='<' || c== '.' || c==',' || c=='[' || c==']') bf.putcode((char)c); //bf.printcode(); bf.run(); } catch(IOException e){} } }
% javac BFi.java % cat hello.bf >+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[<++++>-]<+.[-]++++++++++. % cat hello.bf |java BFi Hello World!
動いた。ほとんどC言語で書いたやつと同じだけど。