- PR -

次のファイルを使用したJavaファイル作成のヒントを下さい

投稿者投稿内容
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-04-13 22:14
褒めたところでなにも出ませんよ?^^;

残念ながらどちらかを擁護するとか、どちらかを非難するとかそういうことは考えてません。
単純に、要求というか仕様レベルで与えられた文字列のある文字をキーに処理を振り分けるということはあり得る話ですのでアドバイス的に「こっちの方がいいよ」ならいいですが、間違いと決めつけてしまうのは言いすぎかなと思っただけですね。

などと言えばカッコよく聞こえますが、言いたいこと言ってるだけにすぎないと思います(笑)


「wあいう」だとして、私が示したgoogle検索からは、
「最初の1文字とそれ以外を切り出せればいい」

「文字列から一部の文字を切り取る」+「文字列の長さを調べる」
の組み合わせで解決できるというところにたどりついて欲しくて示しました。


引用:

恥ずかしながら、そのクラスを新たに利用するところま、私の頭脳では思いもつきませんでした。


クラスっていう概念は再利用可能性を高めるためにもあります。
Enshu1クラスはString配列を渡せばファイルに出力でき、String配列を受け取る形でファイルから読み取ることができるわけですね。
一歩進めるとI/O媒体が変わった場合、String配列というインターフェースというか仲介役を守ればDBに書き込んだりするクラスを用意して、メインのコードはほとんど変えることなくDBでやりとりするクラスを作って使用したり、xmlファイルでやりとりするクラスを作ったりできると思います。
そういう点から私は誰かに教えるときは、最初は仮にどんなしょぼい機能しか持ってなくても別のクラスをつくること、インスタンスを作ることを指示しています。
(Stringを引数にコンソールに出力する機能しかなくてもです。)


Kazukiさんの仰ってる事に私も共感しています。
1点だけ付け加えるとすれば、私は他の投稿とか他の掲示板の話を前提にしていません。
このスレッドのこの問題だけに焦点を当てていますので、予めご了承を。
dejavu
ベテラン
会議室デビュー日: 2009/03/13
投稿数: 71
投稿日時: 2009-04-13 22:41
Kazukiさん、いつもアドバイスありがとうございます。
引用:

結局"wあいう"みたいにwとあいうの間にスペースを入れないのか
"w あいう"みたいに入れるのかどちらが希望ですか?
入れる方法なら、ぴあちゃんさんの投稿にあるプログラムに
ちょっと手を入れるだけで動くような気がするんですけど。


『wあいう』の文字列の中に出てくる「w」と「r」は文字を書き込むか読み取るかを判別する記号のようなものだと思っています。
なので、『wあいう』から『あいう』だけと取り除いて書き込むプログラムがこれ以上複雑になるのでしたら、w + スペース + あいうで構いません。
今回は『あいう』だけの3文字だけですが、もっと長い文章を書き込み、読み取る場合に手間が増えるのは、あまりいいとは思えません。
ので、このままで行きます。
コード:
public class Enshu1 {
	public static void main(String[] args) {
		try {

			if (args.length < 1) { //r or w が必要
				throw new IllegalArgumentException("r or w が必要");
			}

			if (args[0].compareToIgnoreCase("w") != 0 && 
					args[0].compareToIgnoreCase("r") != 0) {
				throw new IllegalArgumentException("オプション指定ミス");
			}
	
			FileIOSample io = new FileIOSample();
			if (args[0].compareToIgnoreCase("w") == 0) {
				if (args.length < 2) { //w は2つ以上必要
					throw new IllegalArgumentException("w は2つ以上");
				}
				io.fileSave(new String[]{args[1]});
			}
			else { //r は1個でOK
				String[] lines = io.fileRead();
				for (String line : lines) {
					System.out.println(line);
				}
			}
			
		}
		catch (Exception e) {
			e.printStackTrace();
		}

	}
}


1つ今までソースコードを見てきて思うのですが、確かに大文字小文字を区別せずに読み取るならばcompareToIgnoreCase()メソッドが1番適していると思います。
でも、ここはequals()メソッドでもmatches()メソッドでも代用できるのではないか、という事です。
後は、単にソースコードが分からないのですが、
コード:
String[] lines = io.fileRead();
for (String line : lines) {
System.out.println(line);


ここだけが解読できません。
for文で何をしているのでしょうか。
質問は以上です。
引用:

# ここから質問内容とは関係ないです。
引用:

今度はいつ見て頂けるのでしょうか。
また書き込んで頂ける事を心からお待ちしております。


返答を期待して待つのはいいですが、それをこういう場で要求するような
意図を滲ませるのは、あまりよろしくないと思います。


そうですね。要求しているつもりは無かったのですが、そう受け取られてもおかしくない文章でした。
元のレスでは削除しておきました。
引用:

引用:

まぁ、これを見ている人の大半が『お前じゃ無理』と言っているようにも聞こえますが。


別に無理とか思ってないです。
そういう皮肉は不特定多数の人が見る場では控えましょう。


どうもすいません。自虐的な性格で劣等感の塊みたいな人間でして。
これからは、注意します。
引用:

引用:

この貼り付けて頂いたURLだけでは解決しませんでした。
最初に「w」を入力し、その後スペースをいれて「あいう」と入力すると「w」と文字が一致する場合、書き込まれるという事になると思いますが、私の見落としの可能性は大ですが、もう少しアドバイスを頂戴できないものでしょうか。


見てみたがわからなかった。
以上のことがわかりません。もうちょっと具体的に整理した内容で説明して頂けると
返事がしやすいです。
でないと、丸投げの俗に言う教えて君状態になってしまいます。


これは、日本語が下手だと言われても仕方がないですね。
教えて君ですか。確かに丸投げは良くないですね。
今までを振り返ると、随分教えて君状態なときがあったような気がします。
これからはもう少し文章を考えた上で聞き返したいと思います。
引用:

引用:

ハンドルネームは別のサイトでも拝見しました。
まぁ、別人かもしれないので別に構いませんが……。
あのサイトには今でも酷くショックを受けています。
何でか。
それはここにいる人たちを高度な知能を持つ分別を弁えた人たちだと思っていたからです。
大きく裏切られました。IT業界にはこんな低次元の人間しかいないのか、と思うと哀れでなりません。


ショックを受けられるような内容だと思います。
ただ、dejavuさんも上記に指摘したように、こういう場ではあまりやらないようなことを
この数回のやり取りの中でいくつかやっています。
そういう点を控えてやり取りを行っていれば、そのうち沈静化します。


そうですね。質問以外の内容が多いのと後は、Kazukiさんのおっしゃるとおり、こういう場ではあまりやらない事をやっていますね。
それが癇に障った方もいらっしゃるでしょう。
これも、注意して直すべき点ですね。
引用:

dejavuさんの文章は、感情を書きなぐってる部分と質問内容が文章の中で
混ざっていて質問内容を読み取るのが若干難しく感じます。
その点を分離して、質問で聞きたい部分だけに絞って
後の、愚痴や必要以上に謙ったり、相手を持ち上げる文章は別段落で
最低限だけ書いて頂ければ読みやすくなると思います。


Kazukiさんの指摘は百発百中ですね。
ここは質問とアドバイスを書く場所ですからね。
それ以外の文章はいりませんね。
いろいろとどうもありがとうございました。
dejavu
ベテラン
会議室デビュー日: 2009/03/13
投稿数: 71
投稿日時: 2009-04-13 22:54
デューンさん、適切な回答といい、適切なフォローといい、感謝しています。
アドバイスを含めた文章だけで十分お返しを頂いておりますので、お気になさらずに。
多分、デューンさんもKazukiもあのサイトは見られたのだと思います。
でも、私の質問に対する閲覧者の数が1万人を超すという異常な事態でしたから、恐らくはああいうサイトができている可能性を危惧していました。
それもこれも、自分が引き金を引いたのかもしれないので、これ以上あのサイトの事を口にするのは止めておきます。
ああいう事があってもアドバイスをしてくれる方がいる事が今はとても嬉しいです。
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2009-04-13 23:57
>ここだけが解読できません。
>for文で何をしているのでしょうか。

君が5の文法で書いてるから for in を引き合いに出しただけでしょ。
何ですか?じゃなくて、覚えましょうよ。



dejavu
ベテラン
会議室デビュー日: 2009/03/13
投稿数: 71
投稿日時: 2009-04-14 03:23
引用:

>ここだけが解読できません。
>for文で何をしているのでしょうか。

君が5の文法で書いてるから for in を引き合いに出しただけでしょ。
何ですか?じゃなくて、覚えましょうよ。


なるほど、なるほど。ぴあちゃんさんのおっしゃっている意味がやっと理解できました。まるで暗号を解いた気分です。
5のね。そうですか。最初は5って何???って感じでしたが、Java5からの新機能でしたか。
まだジェネリクスの<E>とか<T>の意味すらも知らない私にはちゃんとJava5の新機能と補足説明をして下さらないと意味不明に陥ってしまいましたよ。
今は専らJavaの基礎を学んでいるので、まだJava5の新機能まで覚える余裕がありません。
という事なので、
コード:
for (String line : lines) {
System.out.println(line);


は残念ながら、分かりませんでした。
一応ですが、こういうサイトを見つけました。
でも、説明が小難しくて例題もよく分からず何が何だか理解できません。
そもそもイテレーターを理解していないのが、ダメですね。
Javaの道は厳しい。


Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2009-04-14 06:48
書くのが楽なので、Java5で追加された構文で書いてしまいました。

コード:
for (String line : lines) {
  System.out.println(line);
}


上のプログラムは、下のプログラムと同じだと思って頂いて大丈夫です。
コード:
for (int i = 0; i < lines.length; i++) {
  String line = lines[i];
  System.out.println(line);
}

satomi
会議室デビュー日: 2008/06/11
投稿数: 12
投稿日時: 2009-04-14 07:29
引用:

まだジェネリクスの<E>とか<T>の意味すらも知らない私にはちゃんとJava5の新機能と補足説明をして下さらないと意味不明に陥ってしまいましたよ。
今は専らJavaの基礎を学んでいるので、まだJava5の新機能まで覚える余裕がありません。


もはやJ2SE1.4.2はサポートを終了しています。
そして、J2SE5.0も2009/10/30でサポートを終了します。
制御構文は言語の基礎ですから、新機能と分けて考えずに、習得しておいた方が良いですよ。(というか、既にJ2SE5.0は新じゃない)
dejavu
ベテラン
会議室デビュー日: 2009/03/13
投稿数: 71
投稿日時: 2009-04-14 09:16
何て言えばいいのでしょうか。
自分でも前のレスは少し反感を買うような記述をしているかもしれません。
確かに、ジェネリクスを使用しています。
ただ、これは必然的な事でそれを使わないとエラーになるから書きました。
引用:

書くのが楽なので、Java5で追加された構文で書いてしまいました。

コード:

for (String line : lines) {
System.out.println(line);
}


上のプログラムは、下のプログラムと同じだと思って頂いて大丈夫です。
コード:

for (int i = 0; i < lines.length; i++) {
String line = lines[i];
System.out.println(line);
}




なるほどって感じです。
前のレスでも書きましたが、以前ジェネリクスについて質問しました。
でも、その時初めてジェネリクスを知りましたし、知ったときには時既に遅くTigerについての本も品切れでした。
まぁ、古本を買えばいいのでしょうが、あまり古本は好きではありませんので今はジェネリクス、イテレーターについて記述のある別の本を買おうと思っています。
でも、for in構文と言えばいいのでしょうか。
またもや初耳情報です。こういうの知る度に自分の知識の古さを感じずにはいられません。
はっきり言って遅れていますね。遅れていると言う言葉自体が遅れているかもしれませんが……。


[ メッセージ編集済み 編集者: dejavu 編集日時 2009-04-14 09:42 ]

スキルアップ/キャリアアップ(JOB@IT)