LotosLabo

プログラミング技術とか気になった情報を載せていきます

Java言語について1

Java言語とは?


「ネットワーク対応のオブジェクト指向本格プログラミング言語」です。最近ではjavaに似たScalaというのが流行ってるみたいですね。

開発環境(IDE)は?

Eclipseというフリーの開発ソフトを使っていきます。フリーにしては機能が素晴らしすぎるぐらいのソフトです。

javaのインストール、EclipseのインストールにつきましてはJavaDrive様のサイトがわかりやすいのでおすすめします。

http://www.javadrive.jp/install/




書き方

プロジェクト作成までの手順

①ファイルタブ → 新規 → javaプロジェクト
②ファイルタブ → 新規 → パッケージ
③ファイルタブ → 新規 → クラス


プロジェクトとパッケージ、クラスの3つを作成します。
なお、パッケージ名は小文字、クラス名の頭文字は大文字と決まっています。


f:id:lo25131:20140128171112j:plain

f:id:lo25131:20140128171130j:plain

f:id:lo25131:20140128171136j:plain

f:id:lo25131:20140128171143j:plain


基本構成

package test;

public class Test {
	public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
	}
}


package test; 
パッケージ名を指してます。これは必須項目です。

public static void main(String[] args) {
}
メインとなる部分です。この{}の中に処理を書いていきます。


また文末に「;」セミコロンが必要です。

デバッグの仕方

f:id:lo25131:20140128171720j:plain

      ↑
この再生ボタンを押します。

例:

package test;

public class Test {
	public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
System.out.println("あいうえろ");
}
}


実行! ↓

下のコンソールに表示されます。

f:id:lo25131:20140128171848j:plain


基本プログラム

文字の表示


System.out.println("あいうえお");

改行+表示
System.out.print("あいうえお");


コメントの書き方

//  コメントとなる

/*    米
 *   コメントとなる
 */


データ型


整数型   int, byte ,short,long
浮動小数点 double,float
文字型   char
論理型    boolean
文字列型  String

変数宣言

int number;
double data;
int x;

キャスト変換


int number = (int)10.5; // numberは10に初期化される

double x = (double)number //xは10.0に初期化

演算子


後置 インクリメント・デクリメント
x++ x--  計算に使う直前に増減

前置 インクリメント ・デクリメント 

    1. x --y  計算に使った直後に増減する

乗、除、剰余  * / %

代入演算子 =  *=  /= %= += -=


例:

計算する前
x = 10
y = ++x + 5;    
y =  16   x  = 11

計算した後
x = 10
y = x++ + 5;  
y = 15   x = 11


文字列の連結


String name = "花小"
String s = "こんにちは" + "太郎" + "さん";
System.out.println("こんにち" + name + "さん");

代入演算子

変数 = 式

int val = 5;
val = val + 10;

複合代入演算子


int n;
n = n+10;


こちらだとコンパイルエラー

int m;
m += 10;


多重の代入式


int a,b,c;
c = 5;
a = b = c;

多重の再代入


int a=1, b=2, c = 3;
a +=b+=c;

平方根の計算


x = Math.sqrt(2.0);

四捨五入


long round(double a)

べき乗

double pow(double a, double b)
aはべき乗したい値、bは乗数

どちらか大きい方の値を返す


double max(double a, double b)

どちらか小さい方の値を返す


double min (double a, double b)

0.0 ~ 1.0の間の乱数を返すメソッド


double random()

キーボードからの入力

Input.javaというクラスをpackageの下に入れて読み込みます。

私は参考書からクラスをダウンロードしたのですが、ネットにあるかどうかわかりませんが探してみてください。
これをインポートしますと

Input.get型() というコンソールからキーボード入力の値を読み込むことが出来ます。

(InputクラスのAPI

getInt()   getLong()   getShort()   getByte()

getChar() getDouble()  getFloat()  getString()


配列


 名前 = {リテラルのリスト}

int n = {3,4,4,5}


<要素の表示>

int  []   dn  =  {21,32}

dn[0]   dn[1]


for文の書き方


for (int i=0; i< 回数; i++){
処理
}

例:

for(int  i=0;  i<5; i++){
System.out.println("やっほう!");
}




<配列要素の表示>

int  [] a=  {10,20}

for(int  i=0;  i<5; i++){
System.out.println(a[i]);
}




<配列要素の合計>

int  [] a = {10,20,30};		
int  total = 0;
for(int i =0; i<a.length; i++){
//配列要素の数を繰り返し回数とする
total += a[i];
}





<for文の省略>

for(;  i<10 ;){
System.out.println("aaa")
i++;
}



 ※ ; は省略できない




<無限ループ>

for (; ;){
system.out.println("aaa");
}



拡張for文


for (要素が入る変数の宣言  :  配列名) {
処理

例:

int [] a = {24,43}
for(int n:  a){
System.out.println(n + "");
}



関係演算子

> < <= >= == !=

文字列では
==の代わりに equalsメソッドを使う

例:

String  a  = "abc";
String  b  = "cdef";
<


a >0  &&  a < 20
//aは0より大きくかつ20より小さい


a<0  || a>20 
//aは0より小さいかまたは20より大きい


|
!(a==0)
//aは0ではない



(a==0) ^ (b==0)
//a==0 b==0 のどちらか一方がtrue



System.out.println(a.equals(b));
System.out.println(b.equals(a));


短絡演算子

++ a>0  && ++b>0

//aの値を1増やした後 a>0を検査する



非短絡的演算子

++ a>0  &  ++b>0

//aの値を増やさずに、a>0だけをやる


While文の書き方


while(反復条件){
処理

例:

条件が成立している間

while(i<5){
i++;
}



<for文との違いは?>

for(int i=0; i<5; i++){
}
while(i>5){
i++;      ← これを忘れると無限ループとなる!
}


doとwhile

do{
処理
}while(反復条件)

繰り返したい処理を少なくとも一回は実行

if文


if(条件){
処理
}else{
処理
}

例:

int n= Input.getInt();
if(n==1){
System.out.println("賛成");
}else{
System.out.println("反対");
}


else if文


if(条件A){
処理
}else if(条件B){
処理
}else{
処理


switch文


switch(n){
case1:
処理
break;
case2:
処理
break;
default:
処理
break;
}


例:

int n= Input.getInt();
switch(n){
case 1:
System.out.println("1です");
break;
case 2:
System.out.println("2です");
break;
default:
System.out.println("1,2以外です");
}



※switch文にはint,char,byte,short型だけを使用できる


break

for や whileで使うと中止の命令

例:

int touhyo, sansei=0,hantai=0, mukou=0;
while((touhyo = Input.getInt()) !=0){
if(touhyo <0){
System.out.println("中止します");
break;
}
if(touhyo ==1){
sansei++;
}else if(touhyo==2){
hantai++;			
}else{
mukou++;
}
}
System.out.println("賛成" + sansei);
System.out.println("反対" + hantai);
System.out.println("無効" + mukou);
}


continue

スキップする役割

例:

int touhyo, sansei=0,hantai=0, mukou=0;
while((touhyo = Input.getInt()) !=0){
if(touhyo <0){
System.out.println("中止します");
continue;
}
if(touhyo ==1){
sansei++;
}else if(touhyo==2){
hantai++;				
}else{
mukou++;
}
}
System.out.println("賛成" + sansei);
System.out.println("反対" + hantai);
System.out.println("無効" + mukou);
}



多重ループ

多重ループの際にbreakで脱出

for(int i=0; i<3; i++){
while (true){
System.out.println(i);
break;
}




<ラベル付break>

flag:
for(int i=0; i<3; i++){
while (true){
System.out.println(i);
break flag;


ここではflagという名前を付けたが、ラベルをつけると一気にfor文を脱出してしまう。しかし、continueを使うと。

for(int i=0; i<3; i++){
while (true){
System.out.println(i);
continue;
}



無限ループしてしまう


<ラベル付きcontinue>

flag:
for(int i=0; i<3; i++){
while (true){
System.out.println(i);
continue flag;
}


脱出できる

多重forループ

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


flag:
for(int i=0; i<2; i++){
for(int k=0; k<3; k++){
if(i>k) break flag;
System.out.println(i+ "-" +k);
}


flag:
for(int i=0; i<2; i++){
for(int k=0; k<3; k++){
if(i<k) continue flag;
System.out.println(i+ "-" +k);
}


配列変数

int [] n= {1,2,3}
System.out.println("n=" +n);

int [] n;
n = new int[3];
//このように書く!

int [] n= new int[3];
//変数は初期化しないと使えない

int [] n= null;
System.out.println(n[0]);
//nullは実行時例外が発生


配列要素への代入


int [] n = new int[3];

n[0] = 3;
n[1] = 5;


例:

int [] n= new int[3];
for(int i=0; i<n.length; i++){
System.out.print(n[i] + " ");
}
n[0] = 3;
n[1] = 5;
n[2] = 1;
System.out.println("");
for(int i=0; i<n.length; i++){
System.out.print(n[i] + " ");
}



配列の範囲外へアクセスすると実行時例外が発生


配列のコピー

int base = {3,2,5};
int
copy = base;

例:

int [] base = {3,2,5};
int [] copy;
copy = base;
copy[0] = 10;
System.out.print("base[0]=" + base[0]);		
}



copy をbaseに変換
copy[0]に10を代入

①オリジナルと同じサイズの配列を作成しnewで初期化しておく
②オリジナルの配列要素をコピー先の配列要素へひとつずつコピーする

多次元配列

in a = {{1,2}, {3,4,4}};
a[0][0]  = 1
a[0][1] = 2
a[1][0] = 3
a[1][1] = 4
a[1][2] = 4


<for文で2次元配列の要素を表示>

int [][] a = {{1,2}, {4,5,6}};
for(int i=0; i<a.length; i++){
for(int k=0; k<a[i].length; k++){
System.out.print(a[i][k]+ " ");
}
System.out.println("");
}



メソッドの役割

一つのメソッドにはひとつの機能を割り当てる

public static void main(String[] args) {
System.out.println("start");
message();
System.out.println("end");
}
	
public static void message(){
System.out.println("こんにちは");
return;
}



startを表示

messageメソッドを呼び出す

こんにちはの表示
return を呼び込むことで このメソッドを抜け出す

endを表示





<引数を持つメソッド

public static void main(String[] args) {
	
System.out.println("start");
message("田中",1);
message("鈴木",2);
System.out.println("end");
}

public static void message(String name, int sex){
if(sex==1){
System.out.println("こんにちは" + name + "君");
}else{
System.out.println("こんにちは" + name + "さん");
}
return;



main メソッド    message("田中", 1);      実引数
messageメソッド   message(String name, int sex) 仮引数

仮引数と実引数を一致させる




<値を返すメソッド

public static void main(String[] args) {
double myTax;
myTax = tax(1200);
System.out.println("税額は" + myTax + "円");
}
	
public static double tax(double gaku){
double t = gaku * 0.05;
return t;
}



myTaxを宣言する
myTax = tax(1200)を実行
tax(1200)を呼び出す
仮引数 gakuに1200を受け取る
計算して double t = 60.0
return で tの値をmainに返す
myTaxに値を代入