2011年7月26日火曜日

最後の応用課題

最後の応用課題は自分で好きなものを作っていいみたいだ。
ただ、Activity,Service,BroadcastReceiver,ContentProviderを利用する事とお題がでたので、edixttextでユーザーに入力させたものをtoastで出力させようかと思う。

serviceボタン、Activityボタン、BroadcastReceiverボタンを作ってそれぞれを利用した処理でToastに表示させる。
見た目的に対して変わらず、大変地味なアプリだけども、自分には実装できるのかがまだわからないので、今回は全力で逃げるわ。

今日、出来なさすぎて泣きそうになったのは秘密の話。
まだjavaのクラスとメソッドの処理のことよくわかってないんだ。
戻り値があるものとか自分で好きには書けない。

2011年7月17日日曜日

メソッドの戻り値がある、なし

メソッドの戻り値がある、なしがいまいちうろ覚えだったので整理。
ついでに言うと戻り値はretrunのこと。
オレンジ色に発色したこの部分がメソッド
(1)public static int halve(int n){}
(2)public static void printGraph(int x){}
戻り値のあるなしはvoidで判断。voidは「無効の」とか「空の」って意味。
javaではvoidはメソッドの戻り値がないことを表す。
mainメソッドも同様。
また、計算(演算子)を求める場合は戻り値あり、
*のように記号を表示する為の物は戻り値なしということも念頭に入れておく。

★戻り値がある場合
public class Discount2{
public static void main (String[] args){
            int p,q;
            p = 10000;
            q = halve(p);
            System.out.println("元の値段が" + p + "円なら、半額だと" + q +"円になります。");
        }
        public static int halve(int n){
            return n/2;
        }
}
★戻り値がない場合
public class Graph1 {
public static void main(String[] args){
    printGraph(10);
}
    public static void printGraph(int x){
        for (int i = 0; i < x; i++ ){
            System.out.print("*");
        }
        System.out.println("");
    }
}

2011年7月9日土曜日

mainメソッド

mainメソッドはクラスをひとつのアプリケーションとして動作させるためのもの。
mainメソッドの前にあるpublicはパッケージの外から呼び出せる意味。
配列argsはクラスを実行しようとしたときの引数(コマンドラインパロメータ)
args.ength
args0];
args1];

args[args.length - 1]
ーーーーーーーーーーーーーーーーーーーーーーーーーー
public static void main(String[] args){
}

.....................................
★配列argsをSystem.out.println("")で表示
ただ、for(int i = 5;  i < args.length; i++)
としてみても、実行結果は変わらない。
なんで~??
というか、配列argsの中にいくつ格納されているのかがよくわからん。
型指定でStringに指定したargsはfor文章ではint型に指定したiとループ処理してるじゃないですか。
いいんですか!?そういう仕様なんですか?
lengthついてると変わるんですか?mainメソッドは特別なんですか?
私、この部分がわからなくて気持ち悪いので、疑問をまとめて検索しましょう。そうしましょ。

class ShowArgs{
public static void main(String[] args){
System.out.println("args.length = " + args.length);
for(int i = 0; i < args.length ; i++){
System.out.println(args[i]);
}
}
}
実行結果:
args.length = 0 ;
 
ーーーーーーーーーーーーーーーーーーーーーーーー
最近、プログラムにむかつくんじゃなくて、分からない自分にムカつく。
動作環境設定するのにひっかかるのも、エラーになるのも手が遅いのも自分が悪い。
PCやコードは誤作動おこすけども、基本嘘つかないし、正直者。
なにかに入信した気がする。

メソッドの書き方

メソッドの書き方がわからない、どういう状況下で使えばいいのか、スーパークラスとサブクラスで
継承関係をもったコードのとき役に立つということを教わったんだが、
それを自分で「このコードはメソッド使おう!」とかははじめたばかりでは思えない。

第一、去年iPhoneアプリをなんちゃってでも作るというのか、触ったんだけども、メソッド関係や親と子の関係とか、うろ覚えの状態でやってた。もう恥ずかしさ通り越して笑っちゃうよね。
初心者が公道運転してるようなもんだわ。
今、いちから教えてもらってて、あぁそうやったんか!という状態。

 ただ、相変わらずプログラムの考え方は身についていないので毎日かくしかないと思ってる。
何がわからないのかがわからない、書いてみてここがわからないことが分かる、
そこを繰り返し書いて覚えるしかないと実感してる。

「文型脳とか理系脳とか、知るか。書かんと覚えられんのじゃ。」っている体育会系的思考になってきた。愚痴っててもしかたないので、覚書メモ。

ーーーーーーーーーーーーーーーーーーーーーー
Rectangleっていう面積を求める計算を、メソッドの中で行う。
メソッドはインスタンスメソッド(非static)とクラスメソッド(static)がある。

★インスタンスメソッド
インスタンスフィールドのwidth,heightをすぐ使える。
ただ、以下のコードは省略して書かれていて、
returnの部分がreturn this.width * this.height;とthis省略されてる。
インスタンスメソッドはthisを暗黙の引数としてる。
書かなくても分かってよバカ///って感じ。
class Rectangle {
int width;
 int height;
 int getArea(){
 return width *height;
 }
}

 ★クラスメソッド
引数でインスタンスを渡してもらう必要がある。
class Rectangle {
int width;
 int height;
 static int getArea(Rectangle obj){
  return obj.width*obj.height;
 }
}

2011年7月7日木曜日

オブジェクト指向について

オブジェクト指向とはオブジェクトつまり
インスタンスを大切にする考え方のこと。
オブジェクト=フィールド+メソッド
またはオブジェクト=情報+操作

javaのオブジェクトはクラスから作られる。
クラス宣言の中にフィールドとメソッド、情報と操作をひとまとめに記述する。
以前は情報は情報で、操作は操作で記述していたので、
オブジェクト指向とは オブジェクト(インスタンス)を中心とした情報と操作をひとまとめにしたものの言語の事。

クラスとインスタンス

★クラスとインスタンス
クラス関連した情報を1つにまとめたもの
インスタンスは具体的な物

★クラス宣言フィールド
public class クラス名{
型 フィールド名;
型 フィールド名;
}

★インスタンスの作り方
クラス名 変数 = new クラス名();

コンストラクタはインスタンスをいっぺんに作る事が出来る
kamoku kokugo = new Kamoku("国語",63);みたいな感じ
クラス名とコンストラクタ名は同じ。
コンストラクタには戻り値の型を書かない。
 //public class クラス名
public class クラス名 {
String namae;
int tensuu;

//public クラス名()
public コンストラクタ名前(クラス名と同じ)(String namae,int tensuu){
    this.namae =namae;
    this.tensuu = tensuu;  
}
メモとして残しているものやコードが投稿のボタンを押すと文字数制限されているように切れるようになってしまった。
大変困った。
折角、残しておきたい、覚えたい物を書き出して入力しているのに、
それはないだろうと思ってしまう。
googleblog調子悪い気がする。


公開そうそう移転しようかと考えてる。

つれズレメモ

私はeclipseでJavaコード書いていまして、分からないものをメモとして載せています。


★lengthを繋げた式は配列tenの長さを表す。
tenは配列のことこの場合。配列の長さのぶんだけ
例 for(int i =0; i

いろいろメモ

いろいろとど忘れしそうなのでメモ

★final
★try.......catch処理.....catch
tryの中でおこったエラー処理

★n< 0||100default 定数式3:
処理3
break;
}
//breakはここで処理を終わるという意味
String型の文字列定数は二重引用符(")
例case "a":{}
char型の文字定数は一重引用符(')
例:case 'a':{}
★doubleやString型は整数じゃないので定数式作れない。

★Integer.parseInt
キーから入力された数字を整数に変換

★NumberFormatException
文字列が数字でなかった場合

★ line.charAt(i) 文字列のlineのi番目の文字を得る式

★ line.length()文字列のlineの長さを測る式


2011年7月4日月曜日

光の進む早さの計算

光の進む早さを30万㌔として、光が一日に進む距離の計算
public class Q31 {
public static void main(String[] args){
//正解
System.out.println("光が一日にすすむ距離は" + (24 * 60 * 60 * 300000L) + "kmです。");
System.out.println("光が一日にすすむ距離は" + (long)24 * 60 * 60 * 30000 + "kmです。");
System.out.println("光が一日にすすむ距離は" + (300000.0 * 60 * 60 * 24) + "kmです。");
System.out.println("光が一日にすすむ距離は" + (double)300000 * 60 * 60 * 24 + "kmです。");

//誤り
System.out.println("光が一日にすすむ距離は" + (24 * 60 * 60 * 300000) + "kmです。");

}
}

上から
光が一日にすすむ距離は25920000000kmです。
光が一日にすすむ距離は2592000000kmです。
光が一日にすすむ距離は2.592E10kmです。
光が一日にすすむ距離は2.592E10kmです。
光が一日にすすむ距離は150196224kmです。
と表示される。
------------------------------------
計算にもいろいろやり方がある。
★30万㌔メートルはオーバフローを起こすのでlong型の定数かdouble型をつけてあげる。
以下は、どちらも同じ書き方の違い。
◯long型
System.out.println("光が一日にすすむ距離は" + (24 * 60 * 60 * 300000L) + "kmです。");
System.out.println("光が一日にすすむ距離は" + (long)24 * 60 * 60 * 30000 + "kmです。");

◯double型
System.out.println("光が一日にすすむ距離は" + (300000.0 * 60 * 60 * 24) + "kmです。");
System.out.println("光が一日にすすむ距離は" + (double)300000 * 60 * 60 * 24 + "kmです。");

なんにも型指定しないと誤った数値が表示される
System.out.println("光が一日にすすむ距離は" + (24 * 60 * 60 * 300000) + "kmです。");

プログラムは

プログラムは書いた通りにしか動かないし、
どういう考え方や書き方をしていけばいいのか、
本当に考えて書くという行為をしないと。
まだわからなくて、少し書いてみて、そこからやっぱり回答みてしまう。

でも講習をうけていることは本当に充実していて、楽しい。

今日寝付けなくて3時間くらいしか寝てなかったから、フッととんだ瞬間あって奥歯かみしめたわ。この講習は本当にありがたいので、耳の穴かっぽじって聞かないとと思ってる。
私、結構まわりに呆れられてると知ってるw
今日のこの記事はコードじゃないけど、何か書き留めておきたい。

私にとってプログラムは作る物の手段だと思ってる。
これが作りたかったらJAVA勉強せなあかんやろうし、
あっちが作りたかったらC言語を勉強する。
臨機応変に対応していきたい。
Flashで作るのが最適だったらactionscript書く。
ただ、人一倍不器用なので唸ってるし、路頭に迷ってる。
でも、その考えが出来るようになったので大学いってよかった。
ただ、よく理解もせずsampleを使ってコピペするのは詰む。
だから今困ってるorz

だいたいユーザーは、中身なんて気にしてないんだよ。
バグがなくてUIよくて楽しめれば、いい。
それが一番難しい。

復習

今日は名前と年齢を聞いて、10年後の足した年齢を表示することを覚える。
以下は参考書をそのまま写したコード。

import java.io.*;
public class HowOldAreYou {
public static void main(String[] args){
System.out.println("あなたの名前を入力して下さい。");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try{
String line =reader.readLine();
System.out.println(line + "さん、こんにちは。");
System.out.println("年齢を入力して下さい。");
line = reader.readLine();
int age =Integer.parseInt(line);
System.out.println("いま" + age + "歳とすると、10年後は"+ (age + 10) +" 歳ですね。");
}
catch (IOException e){
System.out.println(e);
}
catch(NumberFormatException e){
System.out.println("年齢が正しくありません。");

}


}
}
★readLineは文字列を一行分取得して行くメソッド
String line =reader.readLine();//入力待ち
line =reader.readLine();

★reader.readLine
rederは変数
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
変数readerはBufferedReader の型
char a ='A';と同じで 
型 変数名=代入する値
代入するのはnew BufferedReader (゚_゚)フムフム…
BufferedReaderっていうのは、データを読み込む為のクラス

★その後の(new InputStreamReader(System.in));
InputStreamReaderはBufferedReaderを作る為の引数。
new InputStreamReaderで別のクラスのオブジェクトを作成
System.inはキーボードからデータを入力する為の物。


ということで、
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));は
System.inで入力された文字列をもとに、InputStreamReader作成→ BufferedReader作成→
変数readerを、そのオブジェクトに作成。
なにこれ逆から反応していくという事かいな。

Integerは整数を表すクラス
parseIntは数字の列を解析して対応する整数値を得るメソッド
parseは文法の解析

2011年7月3日日曜日

なんか焦るわ

プログラムを移すことに満足していてはいけないと、自分に忠告。
サンプルばかりをうつして、書いた気になっているようでは駄目だ。
でも、移す事も覚える事だから、
この動作が何をするための動作なのか意味を理解し考えながら書かないとと忠告。
卒業制作してみて、本当にこれは実感した。
そうじゃないと上達しないし、書かないと。

ーーーーーーーーーーーーーーーーーーーーーー
基本型は論理値及び数値を表す方double

参照型はクラス、インターフェース、配列や列挙型を表す方

2011年7月1日金曜日

コマンドプロンプト

XcodeやFlashでスクリプト書いて実行するときcommand+returnなんやけども、
今日の作業は一々実行するときファイル指定してあげないといけなかった。

テキストエディタでjava書く→コマンドプロンプトでファイル指定、デバッグ(classファイル生成)→実行

Macユーザーには「何これ〜」やよ、本当。
windows良く分からんとも思ったし、テキストエディタから読み込んでくるから早いのか複数の操作ができるというのか、マウス使わずキーボードだけで実行可能とか調べるといろいろでてくるけども。

でもはっきり言ってよくわかんない。
コマンドプロンプト(MS-DOS)ってcharacter user interfaceをもったOSってとりあえずメモっとく。

人事だけども、自分事。

詳しい事は言えないが、Java言語プログラミングレッスンを今日から使って勉強してく。
私はJavaとjavascriptって、C言語のobjective-cのような感じで勝手に解釈してた。
でも文法も動作する環境も異なり、直接関係ないよって書かれてた。MA・ZI・KA!!

★Javaの特徴
・機種依存性が非情に少ない。javaはほとんど移植をしなくてもいいように設計されてる
・型の制約が厳しいので、コンパイル時に発見されやすい
・オブジェクト指向言語
Javaはプログラム全体がオブジェクトという部品による構成
・マルチスレッドを取り扱える。複数のスレッドを簡単に扱う平行プログラミングが出来る。

うーん、何となく?
スレッドについてはここ読むと、分かりやすい。
これ読んだ私の解釈としてスレッドはプログラムを1行ずつ解釈して実行して行くのに対して、マルチスレッドは複数のスレッドが分担して作業を行ってるということかな。