とある文系SEの開発日記 -4ページ目

とある文系SEの開発日記

文系学部から某SIerに就職が決まったぺーぺーエンジニアのブログ

今回、初めて例外処理を使ったのでメモっておきます。


(構文)


try{
//例外が起こりそうな処理
}catch(例外の種類 e) {
//例外発生時の処理
}



こんな感じです。


※eは変数名で何でもいいですが、eがよく使われます。


AKBで言うとこんな感じ


String akb[] = {"大島優子", "小嶋陽菜" , "道重さゆみ"};

try{
  //akb[]を調べてAKBメンバーならOK
}catch(AKBじゃない e)
  //名前を表示
}



こんな感じで使うと"道重さゆみ"と表示されるわけです



もっと具体化すると


//自作例外クラス
class NotAKBException extends Exception {
String errMsg;

NotAKBException(String msg) {
this.errMsg = msg;
}
}




class Test{
  static String akb[] = {"大島優子", "小嶋陽菜" , "道重さゆみ" };

static void checkAKB(String name) throws NotAKBException {
if(!name.equals("大島優子") && !name.equals("小嶋陽菜")) {
throw new NotAKBException(name);
}
}

public static void main(String args[]){
try{
for(int i=0; i<akb.length; i++) {
checkAKB(akb[i]);
}
}catch(NotAKBException e){
System.out.println(e.errMsg + "はAKBのメンバーではない");
}
}
}






(実行結果)
道重さゆみはAKBのメンバーではない



という感じになります。


また、例外は全部if~elseで処理することもできます。こんな感じで



public class Test {
  static String akb[] = {"大島優子", "小嶋陽菜" , "道重さゆみ" };

static boolean checkAKB(String name) {
if(!name.equals("大島優子") && !name.equals("小嶋陽菜")) {
return false;
}
return true;
}

public static void main(String args[]){
for(int i=0; i<akb.length; i++) {
if(!checkAKB(akb[i])) {
System.out.println(akb[i] + "はAKBのメンバーではない");
}
}
}
}




これっくらいのプログラムならif~elseの方が断然楽ですね


でも後々例外処理を使う場面が出てくると思うので


これを機にしっかりと覚えたいと思います
面白い記事を見つけました

言語別の平均年収


結果を見ると1番所得が高いのがActionScriptらしいです。


まず新米SE(というか内定者)の僕にはActionScriptがどういうものかもよく分かっていない


調べてみた結果、

ActionScript
・ブラウザに依存しない

JavaScript
・ブラウザに依存して作動

…以上。



他にもいろいろあったけどよく分からなかった


まだまだ自分は単語の意味さえ理解していない。無力…


先人はどうやって勉強していったのだろうか


とりあえずJavaScriptは知っとけby知人


ということで時間があればそっちも勉強しようと思います
最近、課題で「1~nまでの素数を求めよ」という問題が出てきました


最初頑張って書いてみたコード↓




//nまでの素数を数えるメソッド
public int countPrimeNumber(int n){

//nまでの整数の配列
boolean[] notPrime = new boolean[n+1];

//素数以外は真とする
for(int i=2; i<=n; i++){
for(int j=i*2; j<=n; j+=i){
notPrime[j] = true;
}
}

//真以外を足し合わせる
int count = 0;
for(int i=2; i<=n; i++){
if(!notPrime[i]){
count++;
}
}

    return count;
}





一応これでちゃんと素数の数が出るけど、n=1億、とかになってくると超遅いので書き直しました



修正後↓




public int countPrimeNumber(int n){

//nまでの整数の配列(0を含む)
boolean[] notPrime = new boolean[n+1];

//素数以外を真とする(偶数は除外)
for(int i=3; i<=Math.sqrt(n); i+=2){
if(!notPrime[i]){
for(int j=i*2; j<=n ; j +=i){
notPrime[j] = true;
}
}
}

//素数の数
int count = 0;
//素数を足し合わせる
    if(n>=2) count++;
for(int i=3; i<=n ; i+=2){
if(!notPrime[i]) count ++;
}

return count ;
}





Math.sqrtがひっかるとこですが、これは「エラトステネスのふるい」という素数判定のアルゴリズムらしいです。

簡単に言うと100までの素数を数えるなら2~10(=Math.sqrt(100))までの倍数を除外すれば素数が見つかるよ、というものです。144までの素数なら2~12までの倍数を除外


あとは偶数は素数にならないので奇数だけでforループ


こんな感じで最初のコードよりも30倍ぐらい早くなりました。わーい
Iteratorについて。

【要素の存在をチェックしたり、次の要素を返したりできる。Listとセットで使う。】

例)
ArrayList list = new ArrayList();

//Listのiterator()を使う
Iterator ite = list.iterator();

//次の要素の存在をbooleanで返す
ite.hasNext();

//次の要素を返す
ite.next();






class Test{

pblic static void main(String args[]){
ArrayList array = new ArrayList;
array.add("要素0");
array.add("要素1");

Iterator ite = array.iterator();

while(ite.hasNext()){
System.out.print(ite.next());
}
}
}


ArrayListについて。


【リストを作れる。配列と違って要素を追加したり、削除したりでできる。】


例)

ArrayList<String> array = new ArrayList();

//リストに追加
array.add("要素0");
array.add("要素1");

//リストの0番目を取り出し
array.get(0);

//リストの0番目を消す
array.remove(0);


使用例)




class Test{

public static void main(String args[]){
ArrayList<String> array = new ArrayList<String>();
array.add("要素1");

System.out.print(array.get(0));
}
}