2019年08月26日

「Exception in thread "main" java.lang.Error: Unresolved compilation problems: 」っていうエラーは、「mainメソッドが無い」というエラーではない(mainメソッドあるのに出てきたから)

こんな記事を読んだ。


けど、ダメだ、よくわからない。リファクタリングって何よ。


そうそう、これなんだよね。
Systemクラスの、printlnメソッド、インスタンス化せずに使ってるよな。
Java初心者が最初に教わるメソッドのはずだけど、何でSystemクラスのメソッド利用するのに、インスタンス生成を省略してるのって話よ。

そんで最近、こんなトラブルにも見舞われた。


記事にはビルド・パスを構成すればいいんだってね。
ライブラリのタブに、×マーク付いてるやつなんて、ないんだけど…。

ビルド・パス・エントリーが欠落しています: org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.8.0_111

っていうエラー、どうしてくれる!?
ライブラリ(jarファイル)がないんだよな。でも、

C:\eclipse-jee-oxygen\workspace\jdbc_sample\lib

に、ちゃんと置いてるんだけど。
よくわかんないから、

JREシステム・ライブラリー[jdk1.8.0_111](アンバインド済み)
 アクセス・ルール:ルールが定義されていません
 外部注釈:(なし)
 ネイティブ・ライブラリー・ロケーション(なし)

を除去してみたら。
もっとややこしいことになった。

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
String を型に解決できません
String を型に解決できません
System を解決できません
System を解決できません
System を解決できません
System を解決できません

延々と続くエラー。
どうすんだほんと。でも除去したら、ビックリマークは消えたんだよな。

はぁ〜。
posted by DJしかばね at 23:21 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2019年08月03日

コンストラクタはオブジェクトが生成されたときに自動的に呼び出されて、そしてコンストラクタのメソッド名は必ずクラス名と一致して、戻り値の型が指定できないやつ/オーバーライドはスーパークラスをextendsして、それぞれのクラスが同じ型だの引数だのメソッドだの定義して、だけどそれぞれ違う結果を出す、みたいなやつ

なんて、曖昧な理解。
Javaで出てくる継承とかオーバーライドとか、本当に理解が難しい。
HTMLの時はもっとサクサク覚えれたような気がするんだけどなぁ。


とか読むか。


ラッパストリームとかいろいろ難しそうね。
これも読んで内容理解したい。


も、オーバーライドの話題が出てきてるから、また読んでみるか。

そんで、話題変わるけど。
最近Shazamした曲を並べとく。


ラテンハウスっぽい曲。新宿の東急ハンズの6階で流れてたね。
なんか、


っていう、2015年に東急ハンズ主導で発売されたCDらしい。
それを2019年になっても流し続けるなんて、愛着あるんだなぁ。
amazonで売ってるが、プレミア価格になってるな。
いい感じなのに、全然、再生されてない。

Anto Vitale - Theorema Del Faya (tea party vocal)

は、めっちゃいい感じじゃないけど、このゆったりとした気怠い感じで溶けるような感じ、たまに聴きたくなる。


は、なんでshazamしたのかわからない。
聴いたけど全然、個人的に好みじゃないな、こういうアメリカンポップは。

あと、


そんで、


来たぞこれ。とりあえず渋谷出しとけPV。これで累計、何曲紹介したのかな。
数えてみた。


ってことで、15曲目か。
意外と少ないな〜もっとあるはずなのに。

またまた話題、変わるけど。
行ってみたいお店コレクション。

は、やっぱ次回にしよう。
posted by DJしかばね at 18:07 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2019年07月28日

中括弧でブロック作る範囲を間違え、必要なクラスもimportされてなくて2時間も疲弊。「x.intro();」で、他クラスの自己紹介用のメソッド呼び出してるのわからず…Systemクラスのinフィールドで標準入力を取得して…BufferedReader br = new BufferedReader(new InputStreamReader(System.in));の謎について

昨日、クラムボンがツイッターのトレンド入りしてみたい。どうやらフジロックがあったみたいで、

波よせて
1.KANADE DANCE
2.シカゴ
3.Lush Life!
4.nein nein
5.グラデーション
6.yet
7.タイムライン
8. reflection eternal with toe.徳澤青弦

のセットリストだったらしく、特にラストの「reflection eternal with toe.徳澤青弦」が「感動すぎた」「やばい」といった感じで絶賛の嵐だったそうよ。
あ〜いいなー。そういう感動体験、味わいたいね。
マイナスの方向の感動体験ばかりよ。そんな今日も、家でjavaのコード見ないといけない。
なんてったって、やるって決めたからには、簡単に逃げ出すわけにもいかない。
負け犬になっちゃう、そんなすぐ、自分のやると決めたこと曲げるなんてな。
1年やった負け犬と、3年やった負け犬なら、3年やった負け犬の方が信頼できるっていうか、評価できるはず…とはいえ誰かに評価してほしいとかいう人の目をそんな気にしてるというわけではないんだけど。

とかいって、変に自分を鼓舞したり、熱いメッセージ言ったり、人から聞かされるの、すごく苦手というかこそばゆい感じになる。
いわゆるルーキーズ的な、ちょっと喩えが古いけど。佐藤隆太的な熱血教師とか、夢を追う若者みたいな、そりゃステキかもしれんけど、ドラマなら耐えられるけど、そういうムードが日常にふと出てくると、ちょっと寒気が走る。

そういう時、なんて俺は冷たい人間だと思う時もあったが、そうでもないことに気付いた。
寒気が走ったのは、たぶん、美化してるからだろうからな。
自分の人生とか、仕事とか、活動とか、熱い思いを、美化して語る。
そのパフォーマンスが、「すごいですね」待ちみたいになって、疲れるんだよな。
そんなに自分の人生を美化したり、神聖化して語るけど、それ自慢と変わりないし。聞かされて太鼓持ちする方の気持ちも考えてくれということね。まあ太鼓持ちが嫌ってわけじゃないけど。「もうそのぐらいでええでしょ」というラインはあるのに、度が過ぎて語りをやめないケースもあったりね。

かといって俺のように自分の人生を卑下する方向に走りがちなのもよくないかもしれんけど。
「もうかりまっか」と言われたら、「ぼちぼちでんな」「全然ですよ」というコミュニケ―ションは実は温かくて、ここで「いや〜調子いいですよ!」とか「ばんばん売れてますね」みたいに正直に自慢するの、まあすごく正直な感じだと逆に気持ち良かったりするけど。
それがうまくないと、自慢にしか聞こえなくて。
謙虚に「ぼちぼちでんな」「全然ですよ」といって、変に自分のライフワークを美化したりせずに、相対的に自分ばかりが持ち上がらないように、ピエロになるまではいかなくと主役感を出し過ぎないというこの応え方は、デリカシーがあると思うね。

俵万智のサラダ記念日にある「「寒いね」と話しかければ「寒いね」と答える人のいるあたたかさ」は、「ぼちぼちでんな」「全然ですよ」にあるってことよ。相手に共感して、自分を持ち上げない謙虚さね。

とかだらだら、全然、プログラム書いてない。前に書いた?というか、古いメールに残ってて記載されてたコードが、エラーだったせいもある。
そのプログラムは、

public static void main(String[] args) throws IOException

の1行だけに、

この行に複数マーカーがあります

- 変数 main に void は無効な型です
- トークン "(" に構文エラーがあります。正しくは ; です
- 構文エラーがあります。";" を挿入して LocalVariableDeclarationStatement を完了し
てください

っていうエラーがあって。そのコードに「うーん」と昨日、スタバで1〜2時間は悩まされたりしたけど。
大したミスでもなくて、

package dj_shikabane;
public class Game {
{
public static void main(String[] args) throws IOException
・・・

の全文のコードで、中括弧 "{"が1個、いらなったってことだった。そんで、

package dj_shikabane;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Game {
public static void main(String[] args) throws IOException
・・・

の3つの「import java.io.BufferedReader;」「import java.io.IOException;」「import java.io.InputStreamReader;」の3文が足りなかった。ioライブラリのBufferedReader、IOException、InputStreamReaderクラス入れてなかったから、そのクラスにあるreadLine();メソッドも、使えないわな。

「Integer.parseInt」のころではエラーはなかった。IntegerクラスのparseIntメソッドは、imput文を省略してもいいlangライブラリに属してるからだろうな。

あと、他クラスのメソッド呼んでたのも気付くのにすごい時間かかった。

BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

っていうコードも、すぐには読み解けない。

まずBufferedReaderクラスの型を、クラス型の変数brに格納してる。
InputStreamReader(System.in)は何だ、これよくわらかん。
たぶんInputStreamReader型の、引数にSystem.inってことは…わからん。
入力のあるプログラム(演習2)http://www.ibe.kagoshima-u.ac.jp/edu/gengo2j/p6.html に、解説があった。

Systemクラスのinフィールドで標準入力を取得、まずこれが最初っぽいな。Systemクラスは、Exlipse上でF3キーを押せば、その中身が読める。たしかにフィールドの部分に、

// フィールド記述子 #21 Ljava/io/InputStream;
public static final java.io.InputStream in;

って、記述されてた。まあここまではよしとしよう。
全体を見ると、インスタンス、オブジェクトを生成しているのはわかる。new演算子があるからな。
・・・

解説
• readLineメソッド
▫ String line = reader.readLine(); ▫ 文字列を1行分取得するメソッド

• readerは?
▫ BufferedReader型の変数 ▫ 参照型のクラス
▫ データの読み込みを行うためのクラス

• new
▫ newの後にクラス名と()を付けると、そのクラスに属するオブジェクト生成を行う →これをインスタンス生成と言う


を読むと、何かわかってきそうな気がする。BufferedReaderクラスとInputStreamReaderクラス使うには、単にimport文だけ書けばいいってわけじゃなくて。クラス使うためのオブジェクト(インスタンス)を生成しないといけないって話。

よくわからないのは、BufferedReader(new InputStreamReader(System.in))と、入れ子構造みたいに、BufferedReaderクラスとInputStreamReaderクラスが、同時にインスタンス生成してるっぽくなってる点よ。
たぶん、引数とコンストラクタについて、まだ俺がちゃんと理解してないからだろうな。

コンストラクタはクラス名と同じ、というルールがある。
いや、違うな…コンストラクタは、この段階では出てきてない。

まだインスタンスを生成しただけの段階。

InputStreamReaderはInputStreamからbyte型データを受け取りUnicodeの文字に変換して文字(char型)として読み取れるようにするオブジェクトです。

 byteデータをSystem.inから読み、JISの文字コードを自動判定し、Unicode文字に変換して読むインスタンスは次のように作ります。このインスタンスからreadメソッドを使ってchar型のデータを読み出せます。http://www.ibe.kagoshima-u.ac.jp/edu/gengo2j/p6.html

new InputStreamReader(System.in, "JISAutoDetect");
っていう解説が、たぶん正しいんだと思う。Systemクラスのinフィールドから読み込む、どういう機構なのかわらないが、標準入力の仕組みは脇に置いとこう。それで沼にはまってる場合じゃないし。

つまり、まとめると。

BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

は、オブジェクト生成してる。BufferedReaderクラスを使うためのオブジェクトと、InputStreamReaderを使うためのオブジェクトの2つを。
そんでオブジェクトを作る時に、事前に処理を定義しておけば、それを自動的行ってくれる。いわば初期処理がコンストラクタ。

でもそれは勘違いで、コンストラクタ作ってるわけじゃなくて。
そもそもBufferedReaderクラスとInputStreamReaderクラスは、ioライブラリにある既に完成されたクラスだから、なんでjavaの利用者がコンストラクタを定義せないかんの?って話だ。

だからコンストラクタの話は関係ない。

これはフィールドとかメソッド、を呼び出すための準備。
オブジェクト生成なんだから。
InputStreamReaderクラスを使うためのオブジェクト生成時に、引数としてSystem.inからbyteデータを受け取る。
BufferedReaderクラスを使うためのオブジェクト生成時に、引数として、InputStreamReaderクラスによってUnicode文字に変換された文字「new InputStreamReader(System.in)」を、受け取る。

一旦、そういう風な理解で留めておこう。

おまじない、で覚えておいて、さっさと色々なコードを書いて慣れた方が気もするけどな。
どうも性格的に、一行一行、理屈を知りたくなるんだな、ほんとに。
posted by DJしかばね at 13:18 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2019年07月16日

ファイル名のクラス(.java)の中には原則、同じ名前のクラス名を記述し、そのクラスにmainメソッドがない場合、Javaアプリケーションをコンソール上で実行できない

この曲カッコいいな。


でもこんな曲が、バスターミナルとか町の先頭とか駄菓子屋とかで流れてたら違和感ありまくりって感じだな。


っていう、まとめもあったように。
そうなんだよな。バスタ新宿に併設してるNeWomanだったか?NEWWOMAN?New Woman?スペル忘れたが。
お土産にしては高いっていうかハイソ過ぎるっていうか、「これじゃない感」は確かに半端ないよな。
東京ソラマチみたいなテナントが入ってたら結構、いい気もするんだけどね。

閑話休題。

本題に入るか、記事のタイトルについて。どういうことかというと…

------------------------------
package dj.shikabane;

public class Underdog {
String musician;
String track;
}

class start {
public static void main(String[] args) {
Underdog music = new Underdog();
music.musician = "Tom Misch";
music.track = "South Of The River";
}

void show(String musician,String track) {
System.out.println("今日聴いた名曲は" + track + "です");
System.out.println("アーティスト名は" + musician + "です");
}
}
------------------------------

このコード、おかしいんだよな。
Eclipse上でコンパイルはできるのに、Javaアプリケーションで実行してコンソールで表示させることができない。
理由を探したところ、


であることが判明した。
ファイル名とクラス名が異なる、mainメソッドのあるクラスがファイル名と異なる、つまり。

------------------------------
package dj.shikabane;

public class start {
String musician;
String track;
}

class Underdog {
public static void main(String[] args) {
start music = new start();
music.musician = "Tom Misch";
music.track = "South Of The River";
}

void show(String musician,String track) {
System.out.println("今日聴いた名曲は" + track + "です");
System.out.println("アーティスト名は" + musician + "です");
}
}
------------------------------

と、ファイル名とmainメソッドのあるクラス名を同一にすれば行けるかと思ったが、publicの箇所で、まだエラーが出る。

------------------------------
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
public 型 start はそれ独自のファイル内に定義されなければなりません

at dj.shikabane.start.(Underdog.java:3)
at dj.shikabane.Underdog.main(Underdog.java:10)
------------------------------

な感じの。
でもJavaアプリケーションで実行することができた。

------------------------------
package dj.shikabane;
class start {
String musician;
String track;
}

public class Underdog {
public static void main(String[] args) {
start music = new start();
music.musician = "Tom Misch";
music.track = "South Of The River";
}

void show(String musician,String track) {
System.out.println("今日聴いた名曲は" + track + "です");
System.out.println("アーティスト名は" + musician + "です");
}

}
------------------------------

maiメソッドのある方のクラスにpublic付けるとエラーが消えた?
これは謎だな…今後、調べよう。
エラーなくコンパイルできるんだけど、結果が何も出力されんかった。
そうか、Underdogクラスでshowメソッドを呼び出してるのに、startクラスにshowメソッドが定義されてないからかな。

------------------------------
package dj.shikabane;
class start {
String musician;
String track;
void show(String musician,String track) {
System.out.println("今日聴いた名曲は" + track + "です");
System.out.println("アーティスト名は" + musician + "です");
}
}
public class Underdog {
public static void main(String[] args) {
start music = new start();
music.musician = "Tom Misch";
music.track = "South Of The River";
}
void show(String musician,String track) {
System.out.println("今日聴いた名曲は" + track + "です");
System.out.println("アーティスト名は" + musician + "です");
}
}
------------------------------

何で同じクラスなのに中身一緒のshowメソッドがある?これでもコンパイルできちゃうってのがおかしいよな。
実行しても、何も出てこないけど。

------------------------------
package dj.shikabane;
class start {
String musician;
String track;
void show() {
System.out.println("今日聴いた名曲は" + track + "です");
System.out.println("アーティスト名は" + musician + "です");
}
}
public class Underdog {
public static void main(String[] args) {
start music = new start();
music.musician = "Tom Misch";
music.track = "South Of The River";
music.show();
}
}
------------------------------

これでオッケー。
セオリー通り、mainメソッドのあるクラスからshowメソッドを呼び出して。
処理の中身は別のクラスに書く感じだ。

さて、今日聴いたTom Misch、かなりいいな。

Tom Misch - South Of The River (Official Audio)

ストリングスの使い方が何かJamiroquaiちょっと思い出したけど、若干違う。アコギとか手拍子とか口笛とか、プリミティブな音色も混じってて、かなり音作りこだわってるな。
ボーカルmainって感じじゃない。ボーカルも音として他の音と調和してる。

Tom Misch - Water Baby (feat. Loyle Carner) (Official Video)

JazzyPianoHipHopだ!氷上でドレッドヘアのcoolな黒人がダンスしてるPVも素敵。
『Geography』 - Tom Misch 買うかな、また。
posted by DJしかばね at 00:31 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2019年07月12日

「非staticフィールドageをstatic参照できません」がよくわからん/「javaにおけるstaticと非staticの判断基準」「静的メンバがインスタンスを生成しなくても利用できるなら、逆にインスタンスを生成することで何が利用できるのか?」も不明

超絶エラー出まくりのコード。

package dj.shikabane;

public class Underdog {
String name;
int age;
}

public static void main(String[] args) {
Underdog underdog1;
underdog1 = new Underdog();
underdog1.name = "負け犬";
underdog1.age = 100;

System.out.println("名前は" + name + "です");
System.out.println("年齢は" + age + "歳です");
}

何でだ?「ネストされた型 Underdog はエンクロージング型を隠せません」は、消すことができたけど。
一行ずつ考えてみた。
まず、

public class Underdog {
String name;
int age;
}

について、ブロックの終わり、最後の’}'でエラーが出ている。
これは何となく、あれじゃねえか。フィールドしかないから、クラスの中に。
恐らく「フィールド(性質)しかないクラスってどうよ?メソッド(機能)も入れてくれ」って話なのか?
いや、でもフィールドだけでも大丈夫だったような…。

package dj.shikabane;

public class Underdog {
static String name;
static int age;

public static void main(String[] args){
Underdog underdog1;
underdog1 = new Underdog();
underdog1.name = "負け犬";
underdog1.age = 100;
System.out.println("名前は" + name + "です");
System.out.println("年齢は" + age + "歳です");
}
}

無理矢理コンパイルした。
ちゃんと結果も出力された。でも、

Open the Java > Compiler > Errors/Warnings preference page and
highlight the problem to configure its severity.
問題: static フィールド Underdog.age には static にアクセスする必要があり
ます

みたいな、×エラーじゃないんだけど、⚠エラーが残る。何か気になる。Underdog.age、じゃねーっつーの。
Underdog1.nameとかUnderdog.ageと、書いてるのに。
もしかして、「Underdog underdog1」みたいに、underdog1っていうクラス型変数?をいちいち用意したせいか。

コンパイルするためになぜか、static付けないといけなくなったのも疑問だ。


で、少しは理解できた。
フィールド及びメソッドの静的メンバには、修飾子staticが付いて、そいつが付いてるメンバはクラスフィールドとかクラスメソッドっていう。
つまるところ、

package dj.shikabane;

public class Underdog {
static String name;
static int age;

public static void main(String[] args) {
Underdog.name = "負け犬";
Underdog.age = 100;
System.out.println("名前は" + name + "です");
System.out.println("年齢は" + age + "歳です");
}
}

だと、コンパイルできたし、問題なくプログラムの結果も出力できた。
クラス型変数underdog1も、ややこしいから消去。

変数nameも変数ageも、別にインスタンスも生成してくても利用できるクラスフィールドだから、普通に使えた。
逆に「インスタンスを生成しないと使用できないインスタンスフィールドとかインスタンスメソッドって何?」って話だ。

それを考える前に、クラスフィールドから呼び出しているコードだけど。
static除くと「非staticフィールドUnderdog.nameをstatic参照できません」とかいうエラーが出てくる。
何このエラー?そもそもjavaにおけるstaticと非staticの判断基準って?

なんていうか、

package dj.shikabane;

public class Underdog {
public static void main(String[] args) {

String name = "負け犬";
int age = 100;

System.out.println("名前は" + name + "です");
System.out.println("年齢は" + age + "歳です");
}
}

でも、別にいいのよ。ちゃんと同じ結果出るし。
しかしこれはすごい単純なコードなんだよな。単にnameとageに値を入れて、出力してるだけだから。
フィールド変数を使用せずにクラス型配列の中身を表示 https://teratail.com/questions/7492 みたいな話があるってことは、べつにフィールドが無くてもいいっていうか。
でもそれはオブジェクト指向プログラミングじゃないから、セオリーじゃないって話か。
すごい簡単なコードなら、別にフィールドに性質とか状態とか属性のデータを入れるためのフィールド変数とか用意しなくても、直接、適当に型だけ指定した変数に値を入れて出力してもいいし。
さらにいえば、変数とか用意せずに、値をそのまんま書いて標準出力してしまえばいいってなる。
でもそれだと、プログラムが複雑になった時に保守性とかが悪くなるから、やっぱり無理にでもフィールドとか使ってみないといけないんだよな。

というわけで、フィールドとかはちゃんと書いて、無理矢理コンパイルしたコード↓

-------------------------------
package dj.shikabane;

public class Underdog {
String name;
int age;

public void main(String[] args){
Underdog underdog1;
underdog1 = new Underdog();
underdog1.name = "負け犬";
underdog1.age = 100;
System.out.println("名前は" + name + "です");
System.out.println("年齢は" + age + "歳です");
}
}
-------------------------------

staticを除いてみた。するとコンパイルはできたのに、実行したらこんなエラーが出た。

エラー: メイン・メソッドがクラスdj.shikabane.Underdogのstaticではありません。次のようにメイン・メソッドを定義してください。
public static void main(String[] args)

何でstaticじゃないといけないの?
ちょっと考える必要あるな。
posted by DJしかばね at 00:40 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2019年06月30日

for文は「for( 初期化式 (initialization); 条件式 (condition); 継続式(increment/decrement) ) { // 処理 }」だけど、for (;;)みたいな無限ループする空のfor文もある

空のfor文は無限ループする http://wisdom.sakura.ne.jp/programming/java/java9.html って話があったんで、試しに動かしてみた。

package dj.shikabane;
public class Roopslider {
public static void main(String args[]) {
int count = 0;
for (;;) {
System.out.print("count = " + count + "\r");
count++;
if (count > 9999) break;
}
System.out.println("ループを抜け出しました");

}
}

forの継続条件とかは、コードブロックの中でも代替できるって話か。

count = 3847
count = 3848
count = 3849

count = 9997
count = 9998
count = 9999
ループを抜け出しました

みたいな結果が出てきたが。
「なんで3847から出てきたのか?」が、意味不明。
面白いのは「 + "\r"」っていうよくわからないコードを省いたら。

count = 0count = 1count = 2count = 3count = 4count = 5count =・・・9997count = 9998count = 9999ループを抜け出しました

と、改行せずに全く違う結果が出てくる。じゃあ\r は何だっていうと。
どうやら改行らしい。


だから改行されないってか、これを省いちゃうと。
たぶん出力結果が3847から出てきたのは、コンソールの最大行数を超えたからだと。
コンソールのバッファー・サイズ(文字)(B)は80000に設定されてた。


を参考に、とりあえず160000、倍にしてみたら。
ちゃんとcount = 0から表示してくれたね。

ちょっと小休止。


で、紹介されているサンプルコードを理解してみる。

package dj.shikabane;
public class Roopslider {
public static void main(String args[]) {
for (int i = 0, j = 10; i < 5 && j > 4; i++) {
System.out.println(i + ", " + j);
j -= 2;
}
}
}

jに入ってる値を−2して、jに代入すればいいってこと。
結果は、

0, 10
1, 8
2, 6

になる。1回目のループでjは10だけど、j -= 2で減算されるから、8になるってか。
2回目のループ、iは1、jは8、また-2されて6に。
3回目のループの終わりで、jは4まで減る。
そうなると「i < 5 && j > 4」っていう条件を満たせないから、4回目は行かずにループ抜けるってか。

はぁ〜今日はこの辺にしとくかな。
posted by DJしかばね at 09:06 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2019年06月08日

int型とdouble型、型が一致しない計算はdouble型が優先される/double型をint型にキャストした場合小数点以下は切り捨てされる

このコードの結果について。

class Nifa {
public static void main(String[] args){
int month = 9;
String japaneseMonth = "";
String quarter ="";
if(month == 9){
japaneseMonth = "長月";
} else if (month >= 7 && month <= 9){
quarter = "第二四半期";
}
System.out.println(japaneseMonth + "" + quarter);
}
}

答えろという問題、判らない…まず不明な記号が多すぎる。
ので、調べることになった。まず"&&"について。
これは論理演算子らしい、論理積、とか呼ばれてる。
右辺も左辺もtrueの時はtrue、どちらかでもfalseだったらfalseとか。
==”は確か代入だったような…違った、代入演算子が"="で、ダブルイコールは等価演算子。

これで結果が判る。まずmonth変数にはint型、整数の9が入る。
ただ、初期化してるかこれ…いや、変数を宣言して初期化するのと値を代入するのは、同時かつ一文で出来ることが、


で説明されてる。
だからmonthは9で間違いない。
String型のjapaneseMonth、quarterは、最初は""で、何も値が入ってないが。
monthに9が入っているという条件下の時は、japaneseMonthに"長月"という文字列が入る。
もしmonthに7以上9以下…int型だから、小数点が入ることはない・・・か、恐らく。

monthは9が入ってて、それ以外の値が入れられることはないから、else ifの条件指定の無意味。
monthが9の時は、変数japaneseMonthとquarterに、それぞれ指定の文字列が入る。
だから答えは「長月 第二四半期」になる。

あっ、違った。


で書いてる、&&は「かつ」を示す条件演算子だと。
monthの値は9だから、それ以外の値が入ることはあり得ない。そんな条件は記述されてない。


に書いてる。if文を抜けるってことだ、else if文に入らずに。
だから答えは「長月」だけってか。


を、ちゃんと読んどかないとな…。

ちなみにクラス名にしたNifaってのは、進撃の巨人 Season3を観てて出てきたキャラクター。
であり、お風呂サイドワゴンにも同じのがあるみたい。
聖愛中学高等学校のJava講座、判りやすいから読んでみるか、また。https://seiai.ed.jp/sys/text/java/
posted by DJしかばね at 21:59 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2019年06月07日

「javaでのメインクラスの戻り値はvoidのみ、intや他の型を返そうとして組むと実行時にメインクラスと認識できずエラーとなる」と知恵袋に/拡張for文は「for (取り出す要素の変数宣言 : 配列あるいはjava.lang.Iterableのインスタンス) { 繰り返し処理; }」みたいなやつ


そんで、


を読んだけど、エントリポイントって何?

カッコつけ用語だな。あと、仕事のメールで「EOLに伴い〜」とか来てたから、どういう意味?って思ったけど。
end of life、寿命の終わり、から転じて、何かソフトウェアとかのサポート終了みたいな感じよ。
紛らわしいし、ネガティブな言い回しを使うなっての。

EOL、と言えばElements of Lifeだっけ、MASTERS AT WORKのLITTLE LOUIE VEGAのバンドプロジェクト。

Luisito Quintero - Aquilas Coisas Todas (Louie Vega EOL Remix)

久しぶりに聞いたけどいいな〜何か外国で電車とか馬とかトゥクトゥクに乗って移動している時、現地の人に笑顔で声かけられたり何かくれたりするみたいな、深夜特急的な異国ロマンが漂ってるのよね。

そんで、いい感じの論文を見つけた。「カプセル化」「ポリモーフィズム」「継承」の概念を比喩を用いて説明する場合、

 クラスを携帯に例えて表現する。
携帯はボタンを押すとそれに対応した動作をするが、普通に使う分にはその中の仕組みを知る必要はな
い。勝手に触れると逆に壊れ易くなり、困ったことになるので触れない様にしておく【カプセル化】
 携帯の操作方法は同じだが、使う機種によってその性能は異なる。(近年の携帯は昔のそれと比べると
容量が大きくなっている) 【ポリモーフィズム】
 元々、携帯は一連絡手段として普及していたが、最近では音楽を聞いたり、動画を見たりすることが
できるようになっている【継承】

モジュール、インスタンス、オブジェクトについても有機的に説明されているな。
次に〜これ。

class Bakura {
public static void main(String[] args){
String area[] = {"東京","名古屋","大阪","岡山"};
for(String name : area){
System.out.println(name);
}
}
}


BakuraのMistaken、久しぶりに聞いたけど、サビへの入り方と小気味よいスキャットがいいね。
3行目は配列の宣言、初期化とともに値を用意している?感じか。
4行目のfor文、ループカウンタ無し、String型…あんまみかけないが、間違いではないらしい。

◆i am BEST : Java でももうループは書かない!?

が参考になるか。

あ〜頭が痛くなってきたからやめるか。
そもそもfor文で引数がString型だと?そんなのあるの?
ちょっと調べる必要あるな…おそらく「拡張for文」ってやつだ。

◆基本をしっかり押さえよう! Javaのfor文による繰り返し処理

ああ、サビへの入り方で思い出したが。
この「 Definition of Luv 」って曲、これも、サビに入る前の哀愁感っての、どこか懐かしい80年代っぽいアレンジ、優しく包み込むような柔らかいエレピの電子音がいいな〜♪

Joey Negro & The Sunburst Band - Definition of Love (東京高速道路-도쿄 고속도로)

suchmos聴いてカッコつけてるが、とりあえず渋谷出しとけカテゴリに入れることにした。


suchmosのmint、なんだけどね。「東急 ほけんのコンシェルジュ」とかが映ってる。
神奈川出身なら、渋谷やじゃなくて。
葉山のマーロウ、稲村ジェーンが崎じゃないの!?
suchmosみたいなカッコいい雰囲気の曲を聴くと、直球でハート揺さぶる感じの曲が聴きたくなるんだな。

ナオト・インティライミ「恋する季節」とかな。ストリングスのアレンジがいい。ヴァイオリン入れるとやっぱ上品で壮大な感じになるな。壮大なアレンジだから、逆に青臭い歌詞をマイルドにコーティングしてくれる感じ。カレーに半熟卵入れてちょっと辛さ抑えるみたいな、海鮮丼に半熟卵を入れる外道には判らんかもしれんが。

スペースシャワーtvで、ナオトインティライミがひまわり畑でいい感じに歌ってて気になった。「THE BEST!」ってアルバムに入ってるらしい。

この世界中どこ探しても君の代わりなんていないんだよ 君にしかなれない君がいるんだよ

なんつって。超励ましてくれるぞこの曲!
方向性を間違えたら、いかんけどね…。



posted by DJしかばね at 22:15 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2019年05月25日

演算の対象となる値を「オペランド(operand)」と言い演算の種類を表すものを「演算子(operator)」/classはインスタンスを作る機能を持ったオブジェクトでそれ自体の変数(フィールド)や関数(メソッド)を持てる

それでわかったことがある。

・変数の宣言時に、データ型を省略することはできない。
これは判る。

・int 型と double 型の変数の演算結果は、double 型になる。
これはちょっと「なぜ?」となって調べた。
どうやら整数と整数に対する演算を行った場合は得られる結果も整数となるが、演算子の対象の値がどちらか一つでも浮動小数点数の場合には演算の結果得られる値も浮動小数点数となる算術演算子 - 演算子 - Java入門)らしい。

リテラルは値のことhttps://qiita.com/koukonko/items/3331f6abe8db18d55bcc)ってのもわかった。リテラル「10」はint型だし、「3.33」はdouble型だ。


のサイトが判りやすい。byte 型→8ビット整数(-128〜127)、short 型→16ビット整数(-32768〜32767)、int 型→32ビット整数(-2147483648〜2147483647)、long 型→64ビット整数(-9223372036854775808〜9223372036854775807)ってのがわかる。
少数は、float 型→32ビット(単精度)実数,約6桁精度,範囲 ±3.40282×1038、double 型→64ビット(倍精度)実数,約15桁精度,範囲 ±1.79769×10308か。

・3E2というのは300.0。のことで、double型の数値リテラル。
これがどういうことかというと、浮動小数点リテラルの末尾に「E」を書き、さらに整数値を書くと、その整数値が「10の乗数」になるらしい「E」とは : JavaA2Z)から。だから3.0を10の2乗倍したら、300.0ってこと。
次は、

class devine {
public statcic void main(String[] args) {
int sum = 0;
fot(int i = 1; i < 10; i++){
sum += 0.1;
}
System.out.println(sum == 1);
}
}

の実行結果について。
このコードの実行結果…まず、"+="という演算子がよくわからん。
複合代入演算子(https://wa3.i-3-i.info/word13674.html)というらしいが。
つまり、int型の変数sumは、for文で整数の1から10までを足してるから、これでまず55。
こいつに0.1を足すと、55.1で、sumには55.1が代入されるわな。
そんで最後のプリントラインメソッド、についてはここが詳しくて。


== 演算子(比較演算子)は、exp1 が exp2 と等しければ true(真)、さもなくば false(偽) を返すhttp://www.tohoho-web.com/js/operator.htm#eq
らしいんで、一致しないから答えはfalseだな。

今日はこれぐらいでいいや。
「staticはメソッドのこと?staticメソッドって?」っていう疑問がJavaのデータ型を読んで湧いてきたから、また調べよう。
posted by DJしかばね at 13:04 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2019年05月19日

親クラス(スーパークラス)を継承したい時はextends〜を使う/属性≒アトリビュートやプロパティ、オブジェクト≒インスタンス、 メソッド≒関数やファンクション

一カ月ぐらいJavaの勉強してない。
ちょっと気合入れてやるか〜って気分になった。
で、過去問を解くことに。

・Javaアプリケーションには、mainメソッドが必要である。
・Javaのクラスファイルは、JVM(Java Virtual Machine)上で実行される。
・Javaでは、ガベージコレクション機能によって、メモリの解放が自動的に行われる。
・コメント「//」はそれ以降で改行までをコメントにする場合、また「/* 〜*/」は複数行をコメントにする場合に使用する。

上記はJavaの事実として覚えておこう。
ガベージコレクション、って何?って感じだけど…調べる気力がない。
ガレージ、じゃなくてガベージなのか、覚えにくいな。

ガレージが欲しいよほんと、所ジョージ的なよ。


で紹介されてる豪邸でなくてもいい、狭くてもいいから好きな物いっぱいおけるガレージ。
理想は、

TENDRE - SIGN

のPV出てきてるような、中庭とプールがあって、日がいっぱい差し込んでくる感じね。
ちょっとセキュリティ的に弱そうではあるが。
Tevaのサンダルも出てきてる、歩きやすそうだな。

んで次の問題は〜穴埋め的な感じだった。
例えば、

class Summertune extends Hitomitoi {}

っていうコード、SummertuneクラスはHitomitoiクラスを継承して、Summertuneクラスをサブクラス(子クラス)、Hitomitoiクラスをスーパークラス(親クラス)というらしい。


も読んでおくかな。
そんで継承によってコードの再利用ができるんだと。
クラス名はこの動画、

Dorian / summer rich feat. hitomitoi

を観て適当に付けた。いい曲だ〜。
夏が近づくとこういうの聴きたくなる。

山下達郎 - RIDE ON TIMEに収録されている「いつか」って曲、いい曲だな。
RIDE ON RIMEよりいいかもしれない。

class Yamatatsu {
String name;
int id;
void itsuka() {}
}

こんな風にYamatatsuクラスが定義されている場合、このクラスはメンバ変数name、idのようにオブジェクトを特徴付ける属性と、itsukaメソッドのようにオブジェクトの機能を表す操作をもっている。また、属性と操作をまとめることをカプセル化という

属性・操作についてはこのサイトが判りやすそうではある。

カプセル化により、属性を保護することが可能になる。これを情報隠蔽という。クラスを基に、具体的な情報を当てはめて、オブジェクトを生成することをインスタンス化という。その際には通常newキーワードが使われる

でたよ、インスタンス。
何か覚えにくいんだよなぁ、インスタンスって。
でも、


だと、インスタンス≒オブジェクトみたいに説明しているっぽいし。インスタンス化してオブジェクト作る、って覚えとくか。
そんでインスタンスって言われたら、オブジェクトのことだって考えるか。
この記事を読むと、クラスを使うためにインスタンス化してるっぽいが…クラスを使うにはインスタンス化しないといけない?のか…ちょっと裏を取るか。
属性はわかった。「String型とかint型とかの後に来る変数」「Stringとかintとかの型で性質を指定された変数」みたいなもんか。

コンストラクタはクラス名と同じ名前で、インスタンスを初期化…じゃあクラスを使う前に、インスタンス化とコンストラクタが必要ってことか?
"特別なメソッド”ってサイトに書いてるが、コンストラクタはメソッドと同じで機能の操作的なことやってんのか。

あっでも、


に「コンストラクタは、クラス名と同じ名前を持つメソッドのことで、インスタンス化したときに一度だけ実行されます。」って書いてるから、認識としてはそんなに間違ってないか。

ふぅ〜かなり頭使ったから、今日はこの辺にしとくか( ´Д`)=3 
posted by DJしかばね at 13:17 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2019年04月13日

Javaの例外処理を簡単なコードで学ぼうと「System.in.close();」を入れたり入れなかったり

今日はちゃんと勉強すっか、と思って。
こんな記事を読んでみたり。


tryブロックで発生する例外、catchブロックで処理内容を書く感じらしい。


は、「System.in.close();」を入れて、無理矢理エラー(例外)を出したもの。

-----------------------------------------------------------
文字を入力してください。
例外java.io.IOException: Stream closedが発生しました
-----------------------------------------------------------

が出てくる。
通常は「System.in.close();」いらない、


で、いいみたいなんだけどね。

はっきりいって、try〜catchをわざわざ書く理由がいまいち判らない。これは本当にまともに仕事で実装したり、まともなプログラム作ったことがないからだろうな〜ああ〜。
クラス名はTravelTheWorld、変数にvladmircetkarって書いてみたのは、名曲だったからな。

Vladimir Cetkar - Travel The World

忘れないように。ヴラディミール・チェトカー、言いにくいアーティスト名だけど。
ゴールデンウィークとかも行きたいけど、何でもない時にも急に行きたくなるよ〜日常からどっかへ。


そんなことする時間もお金ないんで、とりあえず古い漫画を読んで気分転換よ。
「月刊ベアーズクラブ」とかいう、クッソ古い漫画。
とりあえず全部読んでいく。

全くよく判らん?総集編みたいな感じにまとめられてた。ボクシングにラブロマンス加えた感じ。

●山科けいすけ 青春の門前ばらい
面白い。浦安鉄筋家族みていなピタゴラスイッチ的な展開の4コマ漫画で笑わせてくれる。水飴のプールでトレーニングするとかも滑稽。

漫画の合間に女のコ白書とかいう、SEVENTEEN特別編集とかの広告が入ってた。

フルヤヒロム ざけんじゃねェ!
漫画で「神戸高塚高校校門圧死事件」に言及してた。この雑誌が1990年のだから、ちょうど事件が起きた年なのか。漫画のキャラに「あの先生 絶対××にするべきスね」とか言わせたり、結構きわどいこと書いちゃってる。当時の漫画はそういう過激発言を漫画に混ぜても許される寛容さあったのかもな。
内容は何か、ちょいエロのラブコメみたいな。

レスリング漫画?

原作は船戸与一の小説か。この漫画は…かなり面白い、続きが気になる。南米が舞台でゲリラ同士の争い?みたいのが描かれてたか、何か描写がリアル。「血が騒いできたぜ…」なんて台詞、日常生活で言う事ないよなー。
浦沢直樹「MONSTER」とか好きな人は好むんじゃないか。
漫画に乗ってたのはSCENE3(第3話)だが、これは普通に買いたいな。この二人のコンビで「猛き箱舟」っていう漫画もあるらしい。

表紙に「超時空オカルト時代劇巨編」って書いてるが、すごいキャッチコピーだわ。色々詰め込んでる感じ。
今、上映中の名探偵コナンの紺青の拳も「真実vs奇術vs蹴撃 雌雄を決する三位一体(トリニティ)バトルミステリー」とかだよな。去年のゼロの執行人は「真実を暴く者vs.正義を貫く者 魂がぶつかり合う極秘任務“シークレットミッション”ミステリー」だったっけ。何か誇大広告みたいに感じるんだよな…。
そんで内容は川中島の戦いに妖怪ファンタジー加えたみたいな。「歴史に残る川中島の戦いは人馬の炸裂する轟音がゴングであったという」って書いてるけど、ほんとかいな…。
武田信玄が魔空とつながる?だの黄金城だの発犬士だの…とりあえず最初から読んでないから全然、判らん…南総里見八犬伝とかも混じってる感じか。

読み切り。「仕事祭」に収録されてるらしい。ビッグ錠は「包丁人味平」が面白いんだよな。といっても他の漫画読んでないから知らんが。3人の詐欺師の話みたいな。

バトミントンにラブロマンス混じってる感じの漫画。「アップタウンボーイズ」も面白そうな。

春日光広 - ギャググラスノスチ ブレインマン
ファジィコンピュータを搭載したロボットが何かコンテストに出て戦うみたいな。それなりに面白かった。

途中までしか読まんかったが、まあそれなりに楽しめたな。「山猫の夏」はちゃんと読みたい作品だ。

posted by DJしかばね at 21:53 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2019年03月30日

はい

いあ
posted by DJしかばね at 01:57 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2018年12月02日

javaでint型の"a"が「97」として扱われる理由とかパッケージとライブラリの違いとか

日曜日に勉強するのは日が昇っている時間帯に限るね。
夜だと「会社行きたくねえ〜」って、サザエさん症候群になるから。
そんな状態じゃあパフォーマンス落ちるから、頭脳労働できない。
逆に「明日の仕事、準備しとくか〜」って、仕事好きな人は、夜に励めるかもしれんけどな。
そういう仕事に巡り合いたいね、ほんとに。

で、今日本読みながら書いた簡単なプログラムだが。

package dj.shikabane;
import lib.Input;
public class sample {
public static void main(String[] args) {
int yen = Input.getInt();
yen = 'a';
System.out.println(yen);
}
}

これ、キーボードに整数を入力すると、変数に値を代入できて、結果を出力してくれるプログラム何だけど。
なぜか、どんな値を入れても"97"になる。
この理由を調べた。

例えば「yen = a;」だったり、「yen = "a";」だとすると、どちらもコンパイルエラーになる。
前者は、int型で表現できる値の数字でもないから。後者は、二重引用符で囲まれて文字列として扱ってるから、int型ではなくString型でないと表現できないから。
じゃあ何で、一重引用符"a"はOKなのかというと。
一重引用符で1文字しか入ってない値は、文字列ではなくて、文字を扱うchar型のデータであることを示している。
つまりyenに、整数だの少数だの、どんな値を入力しても。
「yen = 'a';」のとこで、char型の"a"が代入されてしまうから。
printlnメソッドで出力される結果は、常に同じ。

97である理由は、これを読んで理解できた。


char型は16進数で4桁。Unicodeが関係してるっぽい。
ココによると。

// char = a, unicode = 97// char = b, unicode = 98// char = c, unicode = 99// char = A, unicode = 65// char = B, unicode = 66// char = C, unicode = 67// char = 1, unicode = 49// char = 2, unicode = 50// char = 3, unicode = 51// char = ,, unicode = 44// char = :, unicode = 58// char = /, unicode = 47
みたいな感じで対応してるようだが。
いや、アスキーコードがどうこうっていう話もあるな。


だめだ、Unicode、アスキーコード、16進数だの10進数だの8進数だの、なんで8進数と16進数が4桁なのかとか、全く頭の整理が追い付いてない。
これについては今度、考えよう。

あと「import lib.Input;」について。これはキーボード入力をするためのInputクラスだと。
「lib.」は、パッケージ。javaのクラスファイルがいろいろ入ってる。
つまりlibパッケージの中にあるInputクラスをimportしてるってことね。

Inputクラスをインポートできたので、「Input.getInt()」で、InputクラスのgetIntメソッドを呼び出して使うことができる。
ライブラリとパッケージでややこしくなったが、ここに詳しく書いてた。


ライブラリはより大きい、その中にパッケージがあるイメージかな。
とりあえず今日はこんな感じで。

来週火曜(12/4)から楽天スーパーセール、なので。
気になる商品に目星、つけとくかな。

posted by DJしかばね at 15:06 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2018年12月01日

「Stringクラス」というのは「String型」といも言えるし「参照型のString」「Stringというクラス型」とも言えることに気付いた

だからややこしいんだ、javaは。
オブジェクトのインスタンスの違いってのも、統一されてないとか何とか。
一時的に「オブジェクト」という用語は使わない方がいいかもしれない。


を読んだら違いがあるみたいだけど。
「オブジェクトとはデータを入れた変数とメソッドの複合体」みたいに解説されてる本もあったり。
言葉の意味が正確に定義されてないというか、いまいち統一されてない。
だから混乱してくる。あんまり概念の意味にこだわらない方いいかもしれん。
理解しやすい概念を利用する、という感じの方がいいか。

クラスとインスタンスの関係は、データ型と変数の関係とほとんど同じ…。
String型はオブジェクト参照型の…ああ、何がなんだか。
char型とbyte型の違いもむずい。


で解説されてたが。
char型は16bit、Byte型は8bit。
つまりchar型は2の16乗通り(65,536通り)、byte型は2の8乗通り(256通り)
…いや違うぞ、char型も8bitだった気がする。
char型は8bit、byte型は8bit。

1文字1バイトのASCIIコードを扱えるデータ型、エスケープシーケンスの話…頭がこんごらがっうてくる。
でも、すごくわかりやすい解説を見つけた。


なるほどなという感じ。
左端が1の値を取る2進数を、10進数の整数だとマイナスにするってことだったと。
unsigned charってのもあるのか…そこに迫るのは今度にするかな。

char型は文字型でbyte型は整数型ってことだ。
を読んでわかった。

なんでfloat型とdouble型の2つを用意する必要あるんだってのもあるな。
正確に表現できる有効桁数が、float型が7桁まで、double型は15桁はまで。
大は小を兼ねるっていうし、double型だけあればいいと思うけどな。
まあfloat型の方がメモリー量は使わないかもしれん…でも末尾にfかFをつけろだの、忘れそうなルールがあるな。

Javaでは文字列はString型、文字はchar型…文字列は複数の文字が連結して列になっている。文字は1文字だけ、一重引用符で囲って1文字のデータであることを示さないといけない。

あ〜疲れた、しかしもう、嫌になってくるぜ。
漫画を買って息抜きよ。
ドリフターズ 6巻、楽天koboで買った。

これを読み週末は楽しもう♪
posted by DJしかばね at 17:39 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2018年11月16日

Javaに出てくる[](角括弧)とかローカル変数とメンバー変数(フィールド)を調べていると「ダブルフェイス」を思い出す

Java難しい、圧倒的に書けない。
HTMLの数十倍は難しい印象だ。たぶん「変数」なんてのが出てくるから厄介なのかな。
年取ったってのもあるか。でもここで張って何かプログラム書けるようになっとかないと、ワーキングプアになるのは目に見えてる。
技術水準は下がる、と俺は考えてる。例えば俺みたいな三下プログラマーだとしても、プログラマーやITエンジニアの求人がどんどん増えれば、「人がいねえしこいつでいいか」と、そんなに技術がないやつでも雇ってくれたりするんじゃないのか。

まあそれはさておいて、コーディングよ。
さっきからEclipse開いてまんま、どんどん時間は経っていってるけどな。
どうしたもんかね…でも俺は1つ、仮説を発見したぞ。

フィールド名がないと、メソッド名は入れられない(…たぶん?)」というやつだ。
例えば、mainメソッドの中に「System.out.println(name[i]);」とか書いても、エラーが出てくる。
んでエラーの修正は、たくさん提示してくるんだ、Eclipseは。


んで、フィールドってのはどんなんかというと、

private static String[] name;

とか、

private static int[] name;

みたいなやつ。何で"[]"の中身が空っぽなのかも判らん。調べると、argsの方の意味は出てきた。変数だったとはな。
"[]"は何か、配列の要素番号を指定するだの整数しか書けないだの。
型名[] 変数名 = new 型名[要素数];で配列を初期化するだの。
どうもいまいちしっくりこん…配列の要素数を指定するための構文…。
とりあえず角括弧は配列の要素を指定する、と覚えとくか。
あるいは、…配列が保持する要素のデータ型に続けて、識別子と、この識別子の前または後に角カッコを指定します。ってあるから、配列を初期化するために必要な記号、みたいに覚えとくか。

んでそういうの調べてて、思い出したが。
ちょっと前、西島秀俊と香川照之の「ダブルフェイス」あったよな。
インファナル・アフェアのオマージュでしょ」って甘く見てたけど、すごい面白かった。
潜入捜査官、これはローカル変数よ。
ローカル変数、メソッド終了時に破棄される、そのはかないというか危うい立場。
メンバ変数、クラス内のオブジェクトの属性を定義したもの。クラスの中の変数、だから1つじゃないよな。
まあローカル変数も1つじゃないかもしれんけど。
ヤクザとしても立ち回り、警察官としても立ち回る。いろんな属性を持っている。
「これから俺は生まれ変わって善人の道を歩きたい」「裁判官に言え」という緊張感の溢れるやり取り、よかったな〜西島秀俊もハマリ役だったよな。

あとノートに何かメモ書いてる。「mainメソッドが無いクラス」だと。
よく判らない…Gゼロクッション、楽天で買おうとしたら売り切れだった。

腰を痛めながら続けるかな。
posted by DJしかばね at 04:56 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2018年10月13日

華のあるRhyme「風抜けてく手 乗せたはずの絵/散って砂になってさっき舞った天/PEN 持ったRapper in the damn」をJavaで出してみる

ラジオで「Changes feat. JJJ」を聴き、衝動買いしたCDが今日、届いた。


15曲目しかまだ聴いてないけど、すごくいい。いい曲過ぎて鳥肌立ったな。
今年の洋楽部門のマイランキングの1位は今んとこ、


だが、邦楽部門はこの曲だな。
音作りがすごい。ピアノ、フルート、クリスマスの季節を彷彿とさせるスレイベルのような音色に、トランペットも混じって…それだけじゃない。鈍い印象のメロディーに急に転調する2番のAメロ、これがヤバい。深く深く深海に沈んでいくような、あるいは映画「インセプション」で、夢の階層の奥深くへどんどんと沈みこんでいくようなシーンみたいだ。
そんでまた、2番のBメロでピッチが変わったピアノ、1番とは違う音色になる。急に奥深い内省的な世界から現実に「ハッ」と目が覚めるようなサウンドスケープが眼前に広がる感じだ。それとともに歌詞も、1番で綴られる自叙伝のような心境の吐露から、誰かと未来を築いていくような前向きな趣に変化していく。哀愁とほのかな希望が漂うメロウなメロディーが、ラップの歌詞のメッセージ性をより引き立ててる。


星野源も「恋」とかで二胡(中国の楽器)の音を入れたり、音作りへのこだわりがすごく強いっぽいから、トラックメーカーとしてのSTUTSに惹かれていったんだろうな。

今日はこの曲を聴くついでに、ライム踏みまくりで気持ちいい「風抜けてく手 乗せたはずの絵 散って砂になってさっき舞った天 PEN 持ったRapper in the damn」ってところを、Javaの勉強がてら、PrintだのPrintlnだのを使って出力してみることにした。

package test_program;

public class test {

        public static void main(String args[]) {

         System.out.println("風抜けてく手 乗せたはずの絵");

         System.out.println("散って砂になってさっき舞った天");

         System.out.println("PEN 持ったRapper in the damn");

         System.out.println("");

         System.out.print("風抜けてく手 乗せたはずの絵");

         System.out.print("散って砂になってさっき舞った天");

         System.out.print("PEN 持ったRapper in the damn");

               }

}

ほんで結果がこれだ。

風抜けてく手 乗せたはずの絵
散って砂になってさっき舞った天
PEN 持ったRapper in the damn

風抜けてく手 乗せたはずの絵散って砂になってさっき舞った天PEN 持ったRapper in the damn

println( )メソッドとprint( )メソッドの違いとして、printlnの方は改行してくれるみたいだな。
改行の仕方がいかにも素人だな…「System.out.println("");」とか使うか、普通?
まあいいわ、ここはまた今度考えよう。

「Changes feat. JJJ」はKKBOXで視聴できるが、残念ながら2番は聴けないから、やっぱアルバム買うべきよ。
この曲だけじゃない。まだ聴いてないがたぶん他にもいい曲入ってる。STUTSの1枚目「Pushin'」も、いい曲ばっかりだったしな。

あとそういや二胡で思い出した。
ジャー・パンファンの「翔」っていうアルバムの1曲目に入ってる「空山鳥語」が、すごくいい。
ここで試聴できる。
久石譲的な郷愁と走馬灯感、現実から離れていく浮遊感と脱日常感があるな、ぜひ聴いてみてちょうだい。
posted by DJしかばね at 23:49 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2018年10月07日

Javaにおける"変数"は「プログラム内で使用するデータを格納するための入れ物」で、使う前には「型と名前を宣言しないといけない」とか

なんとかね。
ほんと、変数とか苦手なんだけどなぁ。かなり重要そうだから記事タイトルにしてみたりして。
んで、今日はこんなプログラムを動かしてみたぜ。

package dj.shikabane;


public class RoopAndRoop {

        public static void main(String args[]) {

               int x = 15;

               for (int i = 1; i <= x; i++) {

                       if (i == 8) {

                               System.out.print("温泉とか行きたい");

                       } else {

                               System.out.print("三連休だし");

                       }

                       System.out.println();

               }

        }

}


結果はこんな感じよ。

三連休だし

三連休だし

三連休だし

三連休だし

三連休だし

三連休だし

三連休だし

温泉とか行きたい

三連休だし

三連休だし

三連休だし

三連休だし

三連休だし

三連休だし

三連休だし


今回はif文。まあその説明は今度にするか。

しかし、単にテキスト吐き出すだけのプログラムなんて、Java使ってやる意味ねえんだよな。
Javaを使うのは、もっと高度で役に立つツールとかサービスを構築するときに使わないと、意味ねえ。

今日はあんまり勉強せんかった。明日も、あんまりする気は起きねえが、少しだけSQLはやっとくか。
まあそんなのブログに書く必要ないな。
それより今、楽天お買い物マラソンやってる。
9月末にもやったのに、10月またやるとは、意外だった。

お買い物マラソンの時に買うと、結構ポイントが貯まったりする。俺はこの商品が気になった。


美波動、要するに、電磁波を予防する、みたいな感じだ。
金に余裕がないと買えない商品だな…。
posted by DJしかばね at 23:37 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2018年09月29日

Javaのfor文は3つの式で構成されていて特に2つ目のtrue or falseでtrueなら繰り返し処理継続でfalseなら終了

そして1つ目はカウント初期値、3つ目はカウント処理だから、1つ目と3つ目で回しくていく感じか、2つ目でJUDGEされる。

for(式1; 式2; 式3;){
処理1
}

trueなら処理1が行われる。
んで式3にいって、式3から影響を受けて変化した式1が、式2で判断されて。
trueなら処理1が行われる。
んで式3に影響を受けて式1に戻って、また式2で判断されて。
trueなら処理1が行われる。
んで式3にいって、また式1に新たな条件を加えて、また式2で判断されて。
trueなら処理1が行わる。


の、繰り返しがfor文らしい。
最も単純なプログラムだと、

package dj.shikabane;


public class RoopAndRoop {

public static void main(String args[]){

for(int num=0;num<4;num=num+1){

        System.out.println( "num = " + num);

}

}

}

みたいな感じか。
結果はこうなった。

num = 0
num = 1
num = 2
num = 3

解説すると、
num=0からスタートして、4未満でtrue、んで処理1にいってnum = 0
0+1でnumが1になって、4未満でtrue、んで処理1にいってnum = 1
1+1=2でnumが2になって、4未満でtrue、んで処理1にいってnum = 2
2+1でnumが3になって、4未満でtrue、んで処理1にいってnum = 3
3+1=4でnumが4になって、4未満じゃないからfalse、プログラム終了。

って感じね。Javaの制御文で二重ループのとこやった時よりも簡単、っていうか、ここが原点みたいなもんだな。
for文の他にif文とかもあるみたいだが。
んで、

"ダブルクォーテーション"で囲ったところは文字列として扱う
んだったな、あぶねえあぶねえ、忘れるとこだったぜ。
numってのは、numberってことだぜ。んでよく、
num++
って書かれてるんだけど、俺は初心者だから同義である、
num=num+1
って書くようにしてる。
num=num+1=num++
なんだけどな、でも基本は、
num=num+1
が、わかりやすいから、これでいくかしばらくは。
はぁ、大した事してないのに、疲れたな。
こんな簡単なプログラムで?ってなってるんじゃ、いかんな。

変なPV見つけた、ヘヴィメタ?インダストリアル・ロック?
ラムシュタインとかいうドイツのバント。



コーンとかメタリカとか、ヘヴィメタ系はあんま聴かねえんだよなぁ。
メタリカはよく、MTVで流れてるのを観てた。でも別に好きにはならんかったな。
あと高校ん時、MTVでいつもこれが流れてたな。


5000万回も再生されてる。やっぱ名曲だったか、何かたまに聴きたくなるんだな。
ショッピングモールではっちゃけるU.S.AのDQN達。
アイスクリームの機械から直接アイスを食べるシーン、ちょっと前にtwitterで、アイスクリームのケースに入って何か盛り上がってたよな。
それに似てる。90年代で既にそれを描いてた、現代にも通ずる遊びだ!

System.out.printとSystem.out.printlnの違い、また調べるかな。
posted by DJしかばね at 23:35 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2018年08月26日

Javaは間違いがあったらコンパイルエラーと教えてくれる

書いたプログラムの処理内容、注意書きや説明書きを「コメント」というらしい。そのままやな。
そして、コメントをソースプログラムに記入する書き方は2つある。

一つは「//」の後に書く形式。これは行単位で書く。
行末までがコメントと認識され、コンパイルの時に無視される。

もう1つは「/*」と「*/」の間に書く形式。これは複数行にわたるコメントの時に使うらしい。

そしてJavaのエラーについて。

メソッドブロックが中括弧(})で閉じられていない状況を意図的に作って、コマンドプロンプトでエラーを出してみた。
出たエラーは「構文解析中にファイルの終わりに移りました」みたいな。
「ファイル名.java:7:」みたいに、2つのコロン(:)で何行目にエラーがあるか、コマンドプロンプトでも教えてくれる。しかも、「中括弧ですよ」(})みたいにどの部分かも表示してくれる。
中括弧の後には、斜線の四角みたいなのが表示されてるけど。
これは「閉じる括弧の後がおかしいですよ」って意味らしい。
6行目の中括弧を消したのに、7行目にエラーって出ると指摘されてるけど。
つまり7行目の中括弧を終わりだと認識したのかな?
エラーが出た行の、前の行のコードが間違ってる可能性が高い」と覚えとこう。

しかしセミコロン(;)消した時は、わざわざ「ファイル名.java:4:";"がありません」なんて、具体的に指摘してくれて、4行目の内容までズラリと出てきた。

そんで「public static void〜」みたいな予約語の辺りで、「Public static void〜」みたいな大文字にしてやると。
「…<identifier>がありません。」みたいに出てきたな。
アイデンティファイヤー、publicが予約語として認識されんかったんやな。

@中括弧の有無
A必要な文字の有無
B大文字・小文字

辺りは気をつけていくか。

なかなかコマンドプロンプトも指摘してくれるな、Eclipse使った時みたいにリアルタイムでは判らんみたいやけど。
続きを読む
posted by DJしかばね at 12:12 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2018年08月25日

classブロックの中にメソッドブロックがあってmainメソッドはjavaプログラムを実行するとき1番最初に呼び出される

Javaの簡単なルール。

・javaは「ブロック」と呼ばれる中括({})弧で構成される。
・javaのプログラム単位として最も基本的なブロックが、クラスブロック。1つのjavaソースファイルには、最低1つのクラスブロックを記述する必要がある。
・クラスブロックの開始の中括弧の前に「class+半角空白」を入れて、クラス名を指定する。
・クラスに属するプログラムの動作を記述するブロックを「メソッドブロック」という。このブロックは、クラスブロックの中に記述する。

これが基本ルール。

mainメソッドとか、何のこと?って思ってたけど。
ブロックのことだったんだね。
クラスブロックの中にメソッドブロックがあるんだ。
ほんでmainメソッドは、javaプログラムを実行するとき、1番最初に実行されるらしい。

フーン。プルダウンメニューからメモ帳に書いたソースコードを「名前を付けて保存」した。

ソースファイルの作成→コンパイル→実行

の流れらしいから、これからJavaバイトコードを生成して実行する。
コマンドプロンプトで、まずはjavac〜 と入れて、コンパイル。
しようと思ったけど、何かフォルダが違ってた。


に、コマンドプロンプトで目的のフォルダに移動できる方法が書いてる。
そのフォルダ内から、さらに下の階層のフォルダにアクセスする場合は「cd 」を前に入れたらいい。
上の階層に行くのはどうすんだっけ?
また後で調べるか…。

とりあえずそんな感じで、javaバイトコードファイルもできて、実行もできたから、よしとしよう。

posted by DJしかばね at 16:21 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。