読者です 読者をやめる 読者になる 読者になる

職業訓練の授業71日目~Java:GUI、Scene builderの使い方~

f:id:nazuna_0124:20170310221050p:plain

む~ 最近なんだかイライラしっぱなしです。


なんだかこう、プログラミングを覚える上で

一番肝心なところに時間使ってない感覚が強いです。


とはいうものの、それが何かっていうとはっきりしてません。

とりあえず、写経は意味ないと思います。


時間を使う分だけ、ソースのコピペより価値が低いかもしれません。

この辺は賛否両論ありそうなので、またいずれ。最近そればっかり


お話変わって、合同企業面談会の結果の一つが出ました。

会社さん側から「うちの採用面接受けてみませんか?」というリクエストが届きます。


この時点で職歴、学歴は明確に伝わっていないので、

実質的に書類選考をパスして面接に行けるのが一つのメリット。


結果としてはお話を聞いた全部からリクエストがきたというオチ。

1,2社くれば十分とか思ってただけに想定外。


ただ、こうなると面談では大したフィルターしてないのかなという疑惑。

質問自体もそんな感じではありましたが……

少数からしか来ない人もいるので、ある程度はしてるようなのですけれど。


面接にも手間がかかるので、手当たり次第はおすす出来ないのではと余計な心配。



というわけで、どうでもいいことに悩むタイプの皆様こんばんわ。

本日の授業はGUIで引き続き、Scene Builderの出番です。


なにはともあれ、重くて遅いが第一印象です。

使い勝手は多分それなり。HTMLぽい形式なのでこの辺の知識はきっと必須。


Accessのフォームにこの機能あったらな~と思いつつも

総合的な使い勝手はあっちのほうが上かも。


各種設定やら、IDEの操作なんかを考えると

動画とって見させるだけでいいかも


ちょいと敷居が高いのですが、作成検討だけしてみます!

Javaでクラスという言葉の使い分け

f:id:nazuna_0124:20170326223448p:plain

ポリモーフィズムイベントハンドラという言葉が嫌いです。

いちいちそんな仰々しい名前付けんでよろしいとか思っちゃいます。


その一方でクラスにはどこで使ってもクラスなことに納得がいってません。

これこそ分けてほしいのに…


正直まとまってないですし、間違ってるところもあるはずなのですが、

ぐるぐる考え込んでしまうので吐き出しておくの回です。

ツッコミ大歓迎です。


というわけで、場面別のクラスの使い分けと簡単な説明。


クラスファイル

ファイル自体のことを指します。

クラス名=ファイル名なのは周知のとおり。


メインメソッド付きクラス

最初に覚えるおまじないが入っているクラスのこと。

これ

public static void Main(String[] args){

}

実行できるクラスともいいます。


モジュール化クラス

メソッドを名前管理しやすくするために作成されたクラス。

プロパティは持たないか、あってもgettersetterが存在しない。

こういうふうな使い方

class Calc{
    
    int add(int x, int y){
        return x + y;
    }
    
    int sub(int x , int y){
        return x-y;
    }   
}


クラス設計図

クラス型変数を作るための設計図、スペック表とかでもいい気がする。

タイヤキの金型>タイヤキの説明の時の金型の方。


考えると普通にこの説明は間違っている気しかしません。


炊飯器のスペック表(クラス設計図)

炊飯器(クラス型変数)

のが絶対いいと思う。


炊飯器のスペック表

  • メーカー:Panas○ic
  • 炊飯量:5合
  • 自動炊飯(メソッド)
  • 保温(メソッド)

こんなイメージ。


クラス型変数

クラス設計図を元にインタンス化したオブジェクト。

スペック表を元に炊飯器買ったのとおんなじ。


お米と水いれてボタン押すとご飯になる。

データと命令を一緒に持ってるのが特徴。


炊飯器使うと逆に焦がすことができない

このへんがカプセル化



ふむ。。。スッキリ!

でわ、おやすみなさーい!

職業訓練の授業70日目~Java:GUI、マウスクリックイベント、Canvasで画像表示~

f:id:nazuna_0124:20170301175105p:plain

なんだか急に難しいと感じてきてます。

相変わらず作りたいものに繋がるかが不明なので

それもちょっとストレスに。


作りたい料理はガトーショコラ、さばの味噌煮、チャーハンなのに

ずっと、キャベツの千切りと大根の桂剥き練習してる気分です。


EclipseNetbeansの2足のわらじもなかなか。

おかげで授業についていくだけになっちゃってます。


地味に愚痴りつつ本日のお題はマウスイベントです。

Javascriptなら楽

簡単なゲームのお題でした。

こんなかんじ

f:id:nazuna_0124:20170424211100g:plain


ランダムに画像が配置されて、クリックすると別の場所に移動というもの。

点数つけるとか、制限時間内のクリック回数とか付ければ

いくらかゲームっぽくなるかと思います。


この手のやつなら、画像は瞬間移動じゃなくて、普通に移動したくなりますが、

それやるにはスレッドが必要ぽいです。

習ってないのですよね…


相変わらず肝心なところが授業にない


さて、明日はタイピングゲームぽい何かがお題です。

Javascriptでつくったからもういいや←

paizaの問題を解答するための準備

f:id:nazuna_0124:20170319171727p:plain

ようやくpaizaに解答するための権利を手に入れました!


えと、登録できてなかったとかではなく、

標準入力がよくわかんなくて採点してもらえなかったのです。


思わずはまってしまって、結構遊んでしまいました。

わたしだとBランクの問題ができたりできなかったりです。


Tree構造と再起がわからないので完全にそのせいですね。


paizaの問題は基本的にアルゴリズムの問題です。

なのでJavaの練習にはなりません


ランクDに関しては、文法知ってれば大抵だいじょうぶ。

それでCなのですが、一般化というやつが必要です。


a[0],a[1],a[2]…となってたらa[i]と表せるってやつです。


この辺を教えてくれるのは見たことないです。

たまに才能で片付けられてるときも。


一般化をどう教えるかについて、いろいろ悩んでたので

思わずハマったというわけですが、それはまた別の機会に。


以下、備忘録です。

言い忘れました Netbeansでコード作成する人向けです。

Netbeansで標準入力するとCtrl+Dで修了できません。(見つからなかった)

そのための対処含めてになります。


標準入力について

いわゆるStreamで受け取れます。

テキストファイルに例を貼って、ファイルを読み込めば

おんなじ状況でテストできます。

ついでにコレクションに突っ込みます。

     Scanner sc = new Scanner(new File("C:\\test.txt")); 
     List<String> ls = new ArrayList<>();
        try {
            while (sc.hasNextLine()) {
                String line = sc.nextLine();
                ls.add(line);
            }
        } finally {
            sc.close();
        }


よく使う処理

知らないと参加できないケースが多いのでまとめ。

特定文字列で分割

半角スペース区切りが多いです。

返り値は配列になります。

Str.split(“ ”);

文字型<>数値型の変換

言語によってはいらないのかも?


文字>数字

Integer.parseInt(str);


数字>文字

String.valueOf(int)

文字のn番目の文字

i番目の文字を一文字だけ抜き出したいとき。

str.substring(i,i+1)


最後の一文字削除

これはやり方というより、最後に余分なスペースがあると

正解にならないことに注意です。

str.substring(0,str.length()-1);

JavaFXで押したボタンのID取得

f:id:nazuna_0124:20170327183448p:plain

寝る前に調べたらおもったよりはまったので備忘録。

押されたボタンのIDとテキスト取得です。


フォーム全般ではこれ使って分岐することが多いのですが、

どーにも見つからない…


なにか他の方法でもあるんでしょうか。

ExcelAccessJavascriptどれでもそこそこはまりました。


動作はこちら

f:id:nazuna_0124:20170423003208g:plain


コードはこんなかんじ


    @FXML
    private void handleButtonAction(ActionEvent event) {
        Button b = (Button)event.getSource();
        label.setText("押したボタンのID:" + b.getId() + "\n"
        + "ボタンのテキスト:" + b.getText());  
    }


Buttonオブジェクトに1回キャストしないとだめみたいなのです。


(Button)event.getSource().getId() とか

event.getSource().getId() なんてのは

できませんでした。


追記

コメントで頂きました。キャストをかっこでくくると1行でいけます。

System.out.println(((Button)event.getSource()).getId());

職業訓練でのJavaの基礎の総括

f:id:nazuna_0124:20170403224602p:plain

どこで見かけたのがわかんなくなってしまいましたが、

説明が上手い人とは、相手にどこまで説明するのか把握するのが上手い人

なのだそうです。


おおむねこれは教えるのが上手い人にも該当します。

そう考えると相手の実力を把握するのが上手い、

その仕組を構築してる人が教え上手と言えるのかなって思ったり。


ただ、そうすると、そもそも把握する気がない人

大人数の講義で把握する機会のない人を教え下手と言って

よいかはなかなかに微妙。


とりあえず、30人以下程度で時間が取れていて

生徒の力を把握する気のない授業であれば、

教えるのが下手な授業と言い切ってしまっていいのかなと。


結論なしで話を戻しますが、Javaの基礎のお話です。


いつぞやPHPはATの免許みたいって書きました。

shokuren.hateblo.jp


Javaの基礎部分はフライトシュミレーターで地味な練習という印象。


Javaはとにかく大規模な案件、そして事故ると死ぬことが

前提として作られてます。


そのためののルールと機能がいっぱいあって大変というやつです。


当面は使わない機能も多いだけに、頭に入りにくいというわけですな。


当面は使わないというのであれなんですが、一つ目的をコードを書くことから

読めることに変更するとやりやすそうな気がしました。


一人で全部作るのはまずないのがJavaです。

もう少し読む力を重視してもよさそうです。


具体的には人のコードにひたすらコメントだけつけていくとか……


む 悪くないかも? ちょっと提案してみよっ。


PHPでは全くわからなかったクラス関係が、Javaのおかげで

一気に把握できました。


PHPしかやらない人でもオブジェクト指向理解するためだけに

Javaに触れてみるのもありなのかも!

職業訓練の授業69日目~Java:GUI、ウィンドウの作成、イベント~

f:id:nazuna_0124:20170303054656p:plain

1日あけたあとも、合同企業面談会の話題でもちきりです。


話を聞く会社は早いもの勝ちだったので、なかなかに運が絡みます。


冷静に考えるとあのへんをもっとシステム化してもいいんじゃないかと。


研修で使うようのタブレットを各ブースに設置して

時間管理とか適当に…あとで各企業さんは自分の

登録ページだけ見られるとか。


相変わらず案だけは尽きないので、

思いついたものさくっと作れるようになりたいものです。


さて、本日はウインドウの作成です。


AWT、Swing、JavaFXとお決まりの説明から始まって

実際の操作はJavaFXで作成していきます。


この分野はここぞとばかりにIDEの機能を使います。

いつも通りEclipseとNetbensで試してみることに。


最初はFxmlは使わずに作成していきました。

このへんの使用感はhtmlタグを使わすにJavascriptだけで

Webページ作ってるようなもんですね


よくわからなくてイライラしていた、イベントリスナー

イベントハンドラという単語の意味がようやくわかりました!


取っ掛かりが出来てしまえば後は頭のいい人達が考えて作った仕組み

という感じなので芋づる式に把握できます。


ただ、ペースが早いのか、わからないという声が続出。

うつろな目をしている人が大半だったらしいです。


う~ん そろそろ本気で復習講義でもやったほうがいいのかと思ってきました。


そもそも希望者がいるのかということと、

わたしが教えるとできるようになっちゃうので躊躇してます。


みんなの就職先にはわたしはいませんので……

ここまで覚えておいて、かつ未経験者OKの会社に入れば

苦労が少なくてすむかも?


とゆーラインがいくらか見えてきたので、その辺に絞ってやってみようかと

こっそり検討中。


残り2ヶ月ちょっと! やるなら5月初めからですね!