Eclipseでのエンコード変更

May 16 [Fri], 2008, 21:54
EclipseでエンコードをEUC-JPに指定しようと思ったら
プルダウン内にEUC-JPがありませんでした。

先生に聞いてみたら
『プルダウンの部分に直接『EUC-JP』と書いたらいける』
とのことなので試してみたらできました。

直書きでもいけるなんて知りませんでした。



先生のブログにもあげられてました↓↓
suz-lab 『EclipseでEUC-JPを使うには』

JAVA メモ 『List<Map>内のデータ編集 その2』

April 01 [Tue], 2008, 17:30
前回はList内の全てのデータにトッピングを追加しました。
しかし醤油・味噌・豚骨が全て同じトッピング構成となっており、
ラーメン好きとしてはいささか無粋な感じがするので、
今回はラーメンの種類ごとに違うトッピングを加えられるようにします。


前回は以下のような記述になっていました。

=================================================

List ramenList = new ArrayList();
ramenList = findRamenList;

for(Map map : ramenList){

  //トッピングをリスト内の各ラーメンへ追加
  map.put("topping1", 叉焼);
  map.put("topping2", メンマ);
  map.put("topping3", 海苔);

}

結果
1 ,syouyu ,こがし醤油ラーメン , 叉焼, メンマ, 海苔
2 ,miso ,赤味噌ラーメン , 叉焼, メンマ, 海苔
3 ,tonkotsu ,濃厚豚骨ラーメン , 叉焼, メンマ, 海苔

=================================================


今回はfor文内をこのように変更します。

=================================================

for(Map map : ramenList){
  if(ramenNamber == 1){
    map.put("topping1", 叉焼);
    map.put("topping2", メンマ);
    map.put("topping3", 海苔);
  }
}

=================================================


for文内のmap.put();×3の記述を『if文』で囲いました。
if文の条件式は『ramenNamber == 1』。
DBのテーブルでは『ramenNamber』が1なのは醤油ラーメンになっています。
なのでこの式を実行すると以下のような結果になります。


結果
1 ,syouyu ,こがし醤油ラーメン , 叉焼, メンマ, 海苔
2 ,miso ,赤味噌ラーメン
3 ,tonkotsu ,濃厚豚骨ラーメン

流れとしては
○for文がramenList内のレコードの回数分回り、その度にif文にかけられる。
○一回目はramenNamberが『1』なので
 if文の条件がtrueとなり、中の命令が実行され、トッピングが追加される。
○二回目はramenNamberが『2』なので
 if文の条件がfalseとなり、中の命令が実行されず、トッピングが追加されない。
○三回目はramenNamberが『3』なので、二回目と同じく
 if文の条件がfalseとなり、中の命令が実行されず、トッピングが追加されない。

…よって上記のような結果になります。


このif文を使えばラーメンごとに違うトッピングをつけることができそうです。
実際に記述してみるとこんな感じ。

=================================================

List ramenList = new ArrayList();
ramenList = findRamenList;

for(Map map : ramenList){
  //醤油ラーメンの場合
  if(ramenNamber == 1){
    map.put("topping1", 叉焼);
    map.put("topping2", メンマ);
    map.put("topping3", 海苔);
    map.put("topping4", 味玉);
  }
  //味噌ラーメンの場合
  if(ramenNamber == 2){
    map.put("topping1", もやし);
    map.put("topping2", バター);
    map.put("topping3", 叉焼);
    map.put("topping4", コーン);
  }
  //豚骨ラーメンの場合
  if(ramenNamber == 3){
    map.put("topping1", ねぎ);
    map.put("topping2", 鳴門);
    map.put("topping3", キクラゲ);
  }

}


結果
1 ,syouyu ,こがし醤油ラーメン , 叉焼, メンマ, 海苔, 味玉
2 ,miso ,赤味噌ラーメン , もやし, バター, 叉焼, コーン
3 ,tonkotsu ,濃厚豚骨ラーメン , ねぎ, 鳴門, キクラゲ

=================================================


各ラーメンごとに違うトッピングがついて
よりラーメンらしくなりましたね。
食欲も沸くってもんです。


ホントはramenNamberを条件にifをかけるのではなく
ramenTypeを使ってifをかけた方がいいのですが、
テーブル作成時にramenTypeをStringにしてしまったので
めんどくさくなってramenNamberでやってしまいました。
今では反省している。

JAVA メモ 『List<Map>内のデータ編集』

March 27 [Thu], 2008, 13:04
このようなテーブルがあるとします。

RAMEM_LIST
+---------------------+-----------------+-------------------------+
| RAMEN_NAMBER | RAMEN_TYPE |   RAMEN_NAME   |
+---------------------+-----------------+-------------------------+
|      1       |   syouyu  |  こがし醤油ラーメン   |
|      2       |   miso    |   赤味噌ラーメン    |
|      3       |  tonkotsu  |  濃厚豚骨ラーメン   |
+---------------------+-----------------+-------------------------+


このDB内のラーメンリストというテーブルから
findRamenListというSQLを使ってラーメンのデータを持ってきます。

○findRamenList
===============================================
SQL
SELECT
  RAMEN_NAMBER as ramenNamber, /*ラーメンのナンバー*/
  RAMEN_TYPE as ramenType /*ラーメンの種類(醤油・味噌・豚骨等)*/
  RAMEN_NAME as ramenName, /*ラーメンの名前*/


FROM
  RAMEM_LIST
===============================================



持っているデータはラーメンの種類と名前だけなので、
JAVAでトッピングのデータを追加します。

まずは持ってきたデータをリストに入れます。
===============================================

List ramenList = new ArrayList();
ramenList = findRamenList;

===============================================



次に繰り返し構文(拡張for文)で中身をいじります。

===============================================

for(Map map : ramenList){

  //トッピングをリスト内の各ラーメンへ追加
  map.put("topping1", 叉焼);
  map.put("topping2", メンマ);
  map.put("topping3", 海苔);

}
===============================================


これで、List内の全ラーメンに
叉焼・メンマ・海苔のトッピングが追加されました。

1 ,syouyu ,こがし醤油ラーメン , 叉焼, メンマ, 海苔
2 ,miso ,赤味噌ラーメン , 叉焼, メンマ, 海苔
3 ,tonkotsu ,濃厚豚骨ラーメン , 叉焼, メンマ, 海苔

for文内に『map.put("追加したいデータ名",追加したい値);』を追加すれば
どんどん追加できます。



上では追加したいデータ名をそれぞれ名前を変えていましたが、
もとから存在するデータ名を書いた場合は、
そのデータに上書きします。
例えば
===============================================
  map.put("topping1", 叉焼);
  map.put("topping2", メンマ);
  map.put("topping1", 海苔); //←topping3からtopping1に変更
===============================================

このように書いた場合は

まずデータ内にtopping1を作成し、そこに叉焼を入れる。
次にデータ内にtopping2を作成し、そこにメンマを入れる。
最後に三行目、先程作成したtopping1に海苔を上書きする。

という流れになり、最終的に追加されるトッピングは

"topping1", 海苔
"topping2", メンマ

の2つという形になります。


1 ,syouyu ,こがし醤油ラーメン , 海苔, メンマ
2 ,miso ,赤味噌ラーメン , 海苔, メンマ
3 ,tonkotsu ,濃厚豚骨ラーメン , 海苔, メンマ

JAVA メモ 『ファイルアップロード関連』

February 29 [Fri], 2008, 18:47
とりあえずAPIのリンクだけ↓

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/index.html

JAVA メモ 『フィールドとは』

February 10 [Sun], 2008, 14:21
staticを勉強する以前にフィールドってなにかがわかってないという
このダメさ加減をなんとかせにゃあきまへん。

今回もステキなサイト様に頼っちゃいます。


------------------------------------------------------------

○フィールドについて:簡単に説明すると
フィールドとは、クラスに直接宣言された変数のことです。
メンバ の構成要素であることから、メンバ変数と呼ばれることもあります。

○フィールドについて:もっと詳しく
具体的なコードで確認してみましょう。

class Test{
  public static void main( String argv[] ){
    Student st = new Student();
    st.setFirstName( "太郎" );
    System.out.println( st.getFullName() );
  }
}

class Student{
  String firstName;

  public String getFullName(){
    String lastName = "浦島";
    String fullName = lastName + firstName;
    return fullName;
  }

  public void setFirstName( String s ){
    firstName = s;
  }
}

メソッドなどの中括弧 { } に囲まれずにクラスに直接宣言された変数のことをフィールドといいます。このコードの Student クラスでは赤い文字で示された firstName がクラスに直接宣言されていますね。
この変数のように、クラスに直接宣言された変数をフィールドといいます。

フィールドは、オブジェクトが生成されてからオブジェクトが ガーベッジコレクション に回収されるまでの間、ずっと保持されることになります。

ちなみに Student クラスの場合、青い文字で示されている lastName , fullName , s は ローカル変数といいます。
このローカル変数はその変数が宣言されたコードブロックを抜けると破棄されます。


------------------------------------------------------------

JAVA メモ 『staticとは 2』

February 08 [Fri], 2008, 10:15
以下のコードを見てください。

class Test{
  public static void main( String argv[] ){
    System.out.println( "Bugの数:" + Bug.num );

    Bug bug1 = new Bug( "無限ループ" );
    System.out.println( "Bugの数:" + Bug.num );
    System.out.println( "Bugの数:" + bug1.num );

    Bug bug2 = new Bug( "メモリリーク" );
    System.out.println( "Bugの数:" + Bug.num );
    System.out.println( "Bugの数:" + bug2.num );

  }
}

class Bug{
  static int num = 0;
  String name = "hoge";

  public Bug( String s ){
    name = s;
    num ++;
  }

  public int getNum(){ return num; }
  public String getName(){ return name; }
}

>javac Test.java

>java Test
Bugの数:0
Bugの数:1
Bugの数:1
Bugの数:2
Bugの数:2


インスタンスの参照 bug1 、 bug2 から static なフィールドにアクセスできています。

逆にクラスから非 static なメンバにアクセスするとコンパイルエラーになります。


class Test{
  public static void main( String argv[] ){
    Bug bug1 = new Bug( "無限ループ" );
    System.out.println( "Bugの名前:" + Bug.name );
    System.out.println( "Bugの名前:" + Bug.getName() );
  }
}

class Bug{
  static int num = 0;
  String name = "hoge";

  public Bug( String s ){
    name = s;
    num ++;
  }

  public int getNum(){ return num; }
  public String getName(){ return name; }
}

>javac
Test.java:4: static でない変数 name を static コンテキストから
参照することはできません。
      System.out.println( "Bugの名前: " + Bug.name );
^
Test.java:5: static でないメソッド getName() を static コンテキスト
から参照することはできません。
      System.out.println( "Bugの名前: " + Bug.getName() );
^


非 static なメンバはインスタンスと関連して記憶されています。
なので、クラスから非 static なメンバへアクセスしようとすると、どのインスタンスの メンバ にアクセスしたいのかコンパイラは判別できません。
そのためクラスから非 static なメンバにアクセスすると、コンパイルエラーとなります。

同様にクラスに関連付けられた static なメソッドから 非 static なメンバにアクセスするとコンパイルエラーになります。

class Test{
  public static void main( String argv[] ){
    Bug bug1 = new Bug( "無限ループ" );
    System.out.println( "Bugの名前:" + Bug.getName() );
  }
}

class Bug{
  static int num = 0;
  String name = "hoge";

  public Bug( String s ){
    name = s;
    num ++;
  }

  public int getNum(){ return num; }
  public static String getName(){ return name; }
}

>javac
Test.java:4: static でない変数 name を static コンテキストから
参照することはできません。
      public static String getName(){ return name; }
^


これもクラスに関連付けられたメソッドからだと、どのインスタンスのフィールド( name )にアクセスしたいのか、コンパイラが判別できないからエラーになってしまいます。

今までのことをまとめてみると、以下のようになります。

static 宣言されたメンバはクラスに関連付けられる。
(インスタンスとは無関係にクラスが一つだけ保持する)
クラスから static 宣言されたメンバへはアクセスできる。
インスタンスの参照からも static 宣言されたメンバへはアクセスできる。
非 static なメソッドから static なメンバへアクセスすることはできる。
クラスから非 static なメンバへはアクセスできない。
static なメソッドから 非static なメンバへアクセスすることはできない。
要するにインスタンスや、インスタンスに関連付けられた非 static なメンバからは全てのメンバにアクセスできます。
クラスやクラスに関連付けられた static なメンバからは、static なメンバにはアクセスできますが、インスタンスに関連付けられた非 static なメンバにはアクセスできません。
(なぜならどのインスタンスのメンバなのか判別できないからです。)


---------------------------------------------------------------




むき〜〜〜!
カリン様、超神水を一ダース着払いで郵送しておくれ!

JAVA メモ 『staticとは』

February 07 [Thu], 2008, 12:07
インスタンス化やらフィールドとかそこらへんに関してはてんでダメなワタクシです。

というわけで今回も例のステキなサイト様より参考になる解説をしていただきます。


---------------------------------------------------------------------

○static について:簡単に説明すると
static とは 修飾子 の一つであり Java の キーワード の一つです。
static を使用するとクラスメソッド、クラスフィールドを宣言することができます。

○static について:もっと詳しく
static には以下の3通りの使用方法があります。

・フィールドを修飾する。
・メソッドを修飾する。
・static イニシャライザをつくる。

このうち、 staticイニシャライザ についてはその項目を参照してください。
ここでは フィールド とメソッドの修飾について説明します。

static で宣言されたフィールドとメソッドは通常のフィールド・メソッドと何が違うのでしょうか。通常クラスのフィールド・メソッド(= メンバ )を使用する場合、最初に new でクラスのインスタンスを生成する必要があります。
しかし static 宣言されたメンバについてはインスタンスが無くてもクラスから直接利用することができます。
static 宣言されたフィールド・メソッドはクラスフィールド・クラスメソッドになるからです。

通常のフィールド・メソッドは個々のインスタンス毎に別々に保持していますが、static 宣言されたフィールド・メソッドについてはいくらインスタンスが生成されても、 クラスがただ一つだけ保持しています。

以下のコードを見てください。


class Test{
  public static void main( String argv[] ){
    System.out.println( "Bugの数:" + Bug.num );

    Bug bug1 = new Bug( "無限ループ" );
    System.out.println( "bug1の名前:" + bug1.getName() );
    System.out.println( "Bugの数:" + bug1.getNum() );

    Bug bug2 = new Bug( "メモリリーク" );
    System.out.println( "bug2の名前:" + bug2.getName() );
    System.out.println( "Bugの数:" + bug2.getNum() );

    Bug bug3 = new Bug( "不正な値" );
    System.out.println( "bug3の名前:" + bug3.getName() );
    System.out.println( "Bugの数:" + bug3.getNum() );
  }
}

class Bug{
  static int num = 0;
  String name = "hoge";

  public Bug( String s ){
    name = s;
    num ++;
  }

  public int getNum(){ return num; }
  public String getName(){ return name; }
}

>javac Test.java

>java Test
Bugの数:0
bug1の名前:無限ループ
Bugの数:1
bug2の名前:メモリリーク
Bugの数:2
bug3の名前:不正な値
Bugの数:3


static で宣言されたフィールド num はインスタンスとは無関係に、クラス Bug に関連付けられている様子が分かりますね。
逆に非 static なフィールドである name はインスタンス毎に別々に保持されています。
個々のインスタンスの name はお互い独立して保持されるので、違う名前を付けることができます。

ところで、このコードの Bug の getNum( ) メソッドを良く見てください。

public int getNum(){ return num; }

非 static なメソッドから、static なフィールド num にアクセスできています。
このように、非 static なメソッドから static なメンバへアクセスすることはできます。
また、インスタンスへの参照から static なメンバへアクセスすることもできます。


---------------------------------------------------------------------


〜続く〜

己の力量をもっとわきまえろ

February 06 [Wed], 2008, 11:25
超神水(デカビタ)を飲んでパワーアップしたオイラ。
きっとJavaのスキルも上がっているにちがいないと信じ、
先日トライした認定試験にリトライすることにしたんだ。


前回はfor文に関する一番簡単な問題だった。
今回はちょっと背伸び、および先走りで3つめの問題にトライ。



--------------------------------------------------------------
for の問題3
【3問目】
以下のようなコードがあります。(開始から終了までの部分)

//開始
public class Test{
  public static void main( String args[] ){
    for( int i = 0; i < 2; i ++ )
      System.out.println( "loop" );
      System.out.println( "i == " + i );
  }
}
//終了

このコードをコンパイルし実行したときに表示されるのもを
全て選択してください。
(コンパイル、実行の方法は正しく行われるものとします。)


a. i == 0
b. i == 1
c. i == 2
d. i == 3
e. loop
f. コンパイルエラーになる。
g. 実行時エラーになる。

--------------------------------------------------------------



むっこれは!
先日トライした1つめの問題と瓜二つッッ!!!
前回の知識を踏まえれば何も恐れる事はないな!

え〜〜〜っつとなになに?
表示されるものを全て選べ?

このメソッドだと
『for( int i = 0; i < 2; i ++ )』
この記述の直下の一文の
『System.out.println( "loop" );』
これだけが繰り返されるから
『i == ○』の文は繰り返されずに一回だけの表示になると。

となれば表示されるのはeの『loop』と、
あとはi・・・えっとiはどうなるんだ?
繰り返し自体はしてて、『i < 2』だから1でいいのかな?

よし、答えはbとeや!ファイナルアンサーッ!!!







--------------------------------------------------------------
for の問題3(解答)
f. コンパイルエラーになる。
--------------------------------------------------------------


ギャーーーーーーーース!!!!!!
全く持って予想GUYの答えや!



--------------------------------------------------------------
for の問題3(解説)
今回は for についての問題です。
for についてのもっと詳しい説明は以下のページで確認してくださいね。

SJC-P対策Java用語集・for

さて、今回の問題は問題1と同様の中括弧なしの for 文です。
ということは、 for ループの適用範囲は直後の文1つだけということになります。

したがって、問題文中の for 文は以下のように書き換えることができます。


for( int i = 0; i < 2; i ++ )
System.out.println( "loop" );
System.out.println( "i == " + i );

       ↓

for( int i = 0; i < 2; i ++ ){
System.out.println( "loop" );
}
System.out.println( "i == " + i );

ここで int i の宣言されている場所と i が利用されている場所に注目してみて下さい。

for( int i = 0; i < 2; i ++ ){
System.out.println( "loop" );
}
System.out.println( "i == " + i );

for の初期化文で int i は宣言されています。
この場合、 int i のスコープは for の中括弧で囲まれた部分、つまり上記の 赤い文字の部分ということになり、for の中括弧を抜けた時点で int i は破棄されてしまいます。

そのため、 for を抜けた後に実行される System.out.println( "i == " + i ); の時点ではすでに変数 i は破棄されていることになります。

破棄された変数は宣言されていないのと同じなのでコンパイルエラーとなるのです。

--------------------------------------------------------------





超神水おかわり〜〜〜

己の力量をわきまえろ

February 04 [Mon], 2008, 16:05
浅煎り珈琲Java アプリケーション入門様内のリンクで、1発合格Java認定試験というサイトに無料のサンプル問題なるものがあるとの事なので、試しにトライしてみたんだ。

トライしたのはSJC-P対策オンライン問題集の『for』に関するこの問題↓



-------------------------------------------------------------------

以下のようなコードがあります。(開始から終了までの部分)

//開始
class Test{
  public static void main( String argv[] ){
    for( int i = 0; i < 5; i ++ )
      System.out.println( "i == " + i );
      System.out.println( "Go to next!" );
  }
}
//終了

このコードをコンパイルし実行するとどうなるでしょうか。
選択肢から1つ選択してください。
(コンパイル、実行の方法は正しく行われるものとします。)


a. Go to next! は1回表示される。
b. Go to next! は2回表示される。
c. Go to next! は3回表示される。
d. Go to next! は4回表示される。
e. Go to next! は5回表示される。
f. Go to next! は表示されない。
g. コンパイルエラーとなる。

-------------------------------------------------------------------


ん?
『Go to next!』が何回表示されるかって??
え〜〜〜っと、
for文で5回繰り返されるってメソッドやから
『5回表示される』じゃないのかしら?
でもこんなに選択肢があるってことはそうでもないのかしら・・・

つうかコンパイルエラーって・・・なんだっけ?
勘だがコンパイルエラーってのはないな。うんない。

となれば後は何回表示されるかだが・・・


む〜〜〜〜〜ん



よし、『5回』だ。
きっと5回だよ。答えはeで!!!










-------------------------------------------------------------------
for の問題1(解答)
a. Go to next! は1回表示される。

-------------------------------------------------------------------



ナニーーーーッッ!!?
なんで1回なんや!?



-------------------------------------------------------------------
for の問題1(解説)
まずは for の構文を確認しましょう。

for( 初期化式; 条件式; 反復式 ){
  //ループ処理
}

基本的には上記のように記述するケースが多いかと思います。
しかし、Java では(おそらく)他の言語のプログラマに配慮して次のような構文も認めています。

for( 初期化式; 条件式; 反復式 )
  //ループ処理

この構文では中括弧 { } がありませんね。
でもこれも立派な for ループになります。
見て分かると思いますが、問題文のループ文もこれに相当します。
基本的にはいずれの構文も動作は同じですが、中括弧なしの構文には一つ注意事項があります。
それは、中括弧がない場合、for の適用範囲が直後の文1つだけに限られるということです。

つまり、次の for 文では文2はループの外ということになります。

for( 初期化式; 条件式; 反復式 )
  //文1(ループ内)
  //文2(ループ外)

このため、今回の問題の System.out.println( "Go to next!" ); という文もループの外ということになり、一回しか実行されません。
そのため答えは a となります。

-------------------------------------------------------------------



なんという事や・・・
括弧がないばやいは直下の一文だけが繰り返されるなんて・・・
つうか括弧なくても動くなんて知らんかった・・・・・


ちょっとカリン塔登って超神水飲んで来ます。

JAVA メモ 『アクセス修飾子』

February 03 [Sun], 2008, 10:25
ここんとこお世話になりっぱなしの浅煎り珈琲 Java アプリケーション入門様。
今回もコチラを参考にさせてもらいます。




○アクセス修飾子
アクセス制御を実現する修飾子。パッケージやクラスを単位として、プログラムのコードの他の部分からのアクセス可能性を記述する。メンバーの種類と階層に応じて指定可能なものが変わる。定義されているものは次の四つ:

○private...自分自身が含まれるクラス内からしかアクセスできない
○protected...同じパッケージ及び継承するサブクラスからしかアクセスできない。
○public...全ての場所からアクセス可能。
○デフォルト・アクセス...以上の何れも指定しない場合。パッケージ・アクセスとも言われる。同じパッケージに属するクラス内からしかアクセスできない。

○それ以外
アクセス修飾子以外の修飾子。メンバーの種類に応じて指定可能なものが変わる。定義されているものは次の六つ:

○abstract...抽象クラス、抽象メソッド。継承されて実装を記述されて初めてインスタンス化可能となる。
○static...インスタンス化してもしなくても利用可能なクラス固有のメンバー。
○final...継承できずオーバーライドできないメンバー。コア・パッケージのクラスは殆ど final。
○strictfp...FP 厳密。不動小数点数が CPU の処理系に依存せずに厳密に同じ演算結果となる。
○transient...直列化(シリアライゼーション)不可能。JVM の外部に書き出し不能なメンバー。
○volatile...マルチスレッドによるアクセス時に、必ずマスターコピーと同期を取る。


これらの修飾子は、同じものを複数指定することはできません。異なるものでも、同時に指定できるものと排他的なものが存在します。

例えば、同じものを同時に指定するとコンパイルエラーとなります。

class BadExample {
  // javac エラー
  public static static void printMsg() {
    System.out.println("Hello, World!");
  }
}

アクセス修飾子は複数同時指定することはできません。次の例は誤りであり、コンパイルエラーになります。

class BadExample {
  // javac エラー
  public private void printMsg() {
    System.out.println("Hello, World!");
  }
}


abstract と final は同時指定することができません。

class BadExample {
  // javac エラー
  final abstract void printMsg();
}


これらの意味は、後続の章で自ずから明らかとらるでしょう。ここでは言語仕様で定義されている修飾子をリストすることを目的としておきます。




アクセス修飾詞も漠然とした感じだったんで助かります☆
P R
スカウター : TOY BOX
プロフィール
  • アイコン画像 ニックネーム:Gerbera
読者になる
日々修行に勤しむ
ひよっこJAVAプログラマー。

主食は麺。
2008年05月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
https://yaplog.jp/agx-04_toybox/index1_0.rdf
にほんブログ村 ブログブログへ