JavaをMacで使う為に中古のMacBookを買ったが、いざJavacを使ってみたところ激しく文字化けしたので文字化けを直す方法をメモしておく。
ユーザディレクトリ直下.bash_profileに# vim .bash_profile 等で上記の内容を書き込むことで文字化けを解消することが出来る。
alias javac=”javac -J-Dfile.encoding=UTF8″
JavaをMacで使う為に中古のMacBookを買ったが、いざJavacを使ってみたところ激しく文字化けしたので文字化けを直す方法をメモしておく。
ユーザディレクトリ直下.bash_profileに# vim .bash_profile 等で上記の内容を書き込むことで文字化けを解消することが出来る。
alias javac=”javac -J-Dfile.encoding=UTF8″
C,Javaときたら普段から慣れ親しんでるPerlを出さない訳にはいかない為書いてみた。
書いて思う事は、やはり素晴らしい言語であるということ。
最も必要最低限で意志を伝えやすい。
#!/usr/bin/perl
# 初期値を設定
$x = "0";
$y = "1";
# 値の入力を求める
$input = <STDIN>;
for($i = $input;$i > 0;$i--){
$z = $x + $y; # 今の値を出す
$y = $x; # 前の値を代入→次のループで2回前の値になる
$x = $z; # 今の値を代入→次のループで1回前の値になる
}
print $z; # 最後の値を表示
バカの一つ覚えとしてこの際、Javaでも同じ事が出来るかを試してみた。入力を受け付ける時にint型を直接指定出来ないようなのでString型で指定しその後、型の変換を行う。IOエラーについての記述やパッケージのインポート等あるが対してC言語との変化は無く同じ動作を行える。
// パッケージをまとめてロード
import java.io.*;
public class fibonacci {
public static void main(String args[]) {
int x=0,y=1,z=0,i,input;
// 入力データ読み込み用オブジェクトの作成
BufferedReader myReader = new BufferedReader(new InputStreamReader(System.in),1);
try{
System.out.println ("値を入力してください:");
String myString = myReader.readLine();
input = Integer.parseInt(myString);
for(i = input;i > 0;i--){
z = x + y; /*今の値を出す*/
y = x; /*前の値を代入→次のループで2回前の値になる*/
x = z; /*今の値を代入→次のループで1回前の値になる*/
}
System.out.println (input + "の値は" + z + "です。"); /*最後の値を表示*/
// エラー処理ブロック
}catch (IOException e) {}
}
}
Javaを使って四則演算をしてみたいと思う。 Math.javaというファイルを作成し下記のソースコードを書いき保存する。
# javac Math.java
# javac Math
実行すると次のように表示されると思う。
——文字として出力—–
5 + 5
5 – 5
5 * 5
5 / 5
——数式として演算—–
10
0
25
1
ここで気づくのだがPerlやCやPHPとは異なりprintf(“%d”,数式)というような整形型の記述ではないこと。何が言いたいかというとJavaには標準でprintfのような機能が備わっていないようである。仮に、 System.out.println(“%d”,5 + 5)とし実行してみると激しくエラーが表示される。
public class Math {
public static void main(String args[]) {
System.out.println("n------文字として出力-----n");
System.out.println("5 + 5");
System.out.println("5 - 5");
System.out.println("5 * 5");
System.out.println("5 / 5");
System.out.println("n------数式として演算-----n");
System.out.println(5 + 5);
System.out.println(5 - 5);
System.out.println(5 * 5);
System.out.println(5 / 5);
}
}
Perlが一応落ち着いたのでJavaに手を出すことにした。そこでPerlと同じ様に基礎周辺をブログに書き残しておく。コンパイラはパソコンにインストールされている事を前提にメモを書く。
まず、Javaのコンパイルは直接マシン語に訳すのではなく、Javaバイトコード(.class)と呼ばれるものを作成する。通常の言語とは異なりJava VMで実行させる独自の言語となっている。
ファイル作成についてもCやPerl等と大きく異なりプログラム中に宣言するクラスと同じ名前でなければならない。よって下のソースをコンパイルするには”public class Hello_Word”で宣言していることからファイル名を”Hello_Word.java”とする必要がある。なお、”public”とはクラスやメソッドを外部から呼び出せるかどうかを指定している。
実際にコンパイルするにはjavacというコマンドを使用し”javac [ファイル名].java”として実行するとコンパイルすることが可能である。下記の例では次のようにコンパイルする。
# javac Hello_Word.java
上記で記述したようにjavaはコンパイル後マシン語で直接実行ファイルを作成するのではないので、Java VMを呼び出しクラスファイルを指定させた上で実行する必要がある。よって次の様に実行する。
# java Hello_Word
この時、拡張子”.class”は省略する。 (つけて実行するとエラーとなる。)
public class Hello_Word {
public static void main(String args[]) {
System.out.println("Hello Word");
}
}
ただページを読みに来たのならいいのですが何を考えてるのかユーザの設置したサイト内検索のCGIで大量に”調べ物”をしていた百度のボットがたくさんおりまして頭に来たので全て遮断しました。
#!/usr/bin/perl
#####################################
# 百度ボット遮断
#####################################
# IPを指定(119.63.198.0/24)
$ip = '119.63.198.';
for ($x=1;$x<=254;$x++){
$baidu_ip = "$ip"."$x";
# iptablesでパケットを破棄
$iptables = `iptables -I INPUT -s $baidu_ip -j DROP`;
}
#!/user/bin/perl
$max = '30';
$len = '50';
@arey = ('|', '/', '-', '\', '');
for ($num = 0;$num<=$max;$num++) {
local $| = 1;
$percent = int(($num/$max)*100);
$print = "["."%-"."$len"."s"."] "."%d%%"."r";
$bar = '*' x int(($percent/100)*$len);
if (int(($percent/100)*$len) < $len) {$bar .= @arey[$percent % 4];}
printf ($print,"$bar","$percent");
sleep(1);
}
print "nSuccess!n";
友人より教えていただいたソースを参考に*がクルクルするプログレスバーを作成しました。
※Time::HiResを使うと良いかもしれません。
#!/user/bin/perl
$max = '30';
$len = '50';
for ($num = 0;$num<=$max;$num++) {
local $| = 1;
$percent = int(($num/$max)*100);
$print = "["."%-"."$len"."s"."] "."%d%%"."r";
$bar = '=' x int(($percent/100)*$len);
if (int(($percent/100)*$len) < $len) {$bar .= '>';}
printf ($print,"$bar","$percent");
sleep (1);
}
print "nSuccess!n";
実際に実行すると下記の様になります。
[root@orbit ~]# perl ber.pl
[=================> ] 26%
#!/user/bin/perl
$max = '30';
$len = '50';
for ($num = 0;$num<=$max;$num++) {
local $| = 1;
$percent = int(($num/$max)*100);
$print = "["."%-"."$len"."s"."] "."%d%%"."r";
$bar = '#' x int(($percent/100)*$len);
printf ($print,"$bar","$percent");
sleep (1);
}
print "nSuccess!n";
実際に動かすと下記のようになります。
[root@orbit ~]# perl ber.pl
[#################### ] 30%
yumやcpanのプログレスバーに何故かすごく憧れをいだいていたのでモジュールが無くても使えるものを準備しました^^
#!/user/bin/perl
$max = '30';
$len = '50';
for ($num = 0;$num<=$max;$num++) {
local $| = 1;
$percent = int(($num/$max)*100);
$print = "%-"."$len"."s"."["."%d%%"."]r";
$bar = '#' x int(($percent/100)*$len);
printf ($print,"$bar","$percent");
sleep (1);
}
print "nSuccess!n";
実際に動かすと下記のような感じになります。(多分イメージ的にyumとかと同じ感じになります)
[root@orbit ~]# perl bar.pl
##################################################################[100%]
Success!
[root@orbit ~]#
最近のコメント