★★ Java の宿題ここで答えます part51 ★★

このエントリーをはてなブックマークに追加
931デフォルトの名無しさん:2005/06/19(日) 22:16:32
>>930
IPはダミーですのですれ違いなら他にいきます。
すみませんでした
932デフォルトの名無しさん:2005/06/19(日) 22:40:03
ほぼ丸投げに近いのですが
例えば、java Find3 the < sample.txt を実行すると、sampleファイ
ル中に出現するtheの単語の数を数えてその数を画面上に表示する。
ただし、指定された文字列の大文字小文字は区別しないものとする。
つまり、theとTheは一致する。また、the とtheyは一致してはなら
ない。
標準入力から入力されるファイルは一般的な英文であるとし、指定
した文字列が正確に数えられるように工夫せよ。

大文字小文字の区別はできたのですが、文末や改行のところの単語、つまり
スペースに挟まれていない単語の検索方法がわかりません。
お願いします。

933932:2005/06/19(日) 22:41:32
プログラムはこんなかんじです。

import java.io.*;

public class Find2 {
public static void main (String[] args) {
if (args.length !=1) {
System.out.println("使用法:java Find2 検索文字列 < 検索対象ファイル");
System.out.println("例:java Find2 System < Find2.java");
}
String findstring = " "+args[0]+" ";
System.out.println("検索文字列は「" + findstring + "」です。");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int p = 0;
934933続き:2005/06/19(日) 22:42:05
try {
String line;
int linenum = 0;
while((line = reader.readLine()) !=null) {
line = line.toLowerCase();
int n = line.indexOf(findstring);
while(n >= 0) {
p++;
line = line.substring(n+args.length);
n = line.indexOf(findstring);
}
linenum++;
}
}catch (IOException e) {
System.out.println(e);
}
System.out.println(findstring + "が出てきた回数は" + p + "回です。");
}
}


935927:2005/06/19(日) 23:51:29
すいません、訂正です。
0.0056とか.00065とか-2.3600などの数値はOKだが
それ以外はNGとしたいんです。全角とかもNGです。
お願いします。
936デフォルトの名無しさん:2005/06/19(日) 23:55:00
>>933
char c = args[0].charAt(0);
String w = "[" + Character.toLowerCase(c) + Character.toUpperCase(c) + "]" + args[0].substring(1, args[0].length());
Matcher m = Pattern.compile("\\s" + w + "\\s").matcher(text);
int i = 0;
while (m.find()) i++;

こういうのが欲しいんじゃないよね。
937デフォルトの名無しさん:2005/06/20(月) 00:02:13
>>935
try{
 double d = Double.parseDouble(string);
}catch(Exception e){
 System.out.println("だめ");
}
938デフォルトの名無しさん:2005/06/20(月) 00:38:47
0.--.....

こう言うのが通っちゃうのはいやん。

^-?\d*\.?\d*$

こんな感じ?
939877:2005/06/20(月) 01:40:49
>>901
>>920

あげ直しててみました。
ttp://www.uplo.net/
ステルス型
ファイル 851
pass hw865

ここにネタが上がってから付け焼刃でAPI調べて作ったので
参考になるかどうかは分かりませんが。
940デフォルトの名無しさん:2005/06/20(月) 01:42:57
現在学校で多分木に関する課題を行っています。
括弧表記法で入力された物をコンピューターに理解させるアルゴリズムの部分がまったく見当もつきません。
どなたか教えていただけないでしょうか?
よろしくお願いします。
941デフォルトの名無しさん:2005/06/20(月) 02:08:30
>>936
textをtoLowerCase()するならこれでいいじゃん。
Matcher m = Pattern.compile("\\s" + args[0].toLowerCase() + "\\s").matcher(text.toLowerCase());
int i = 0;
while (m.find()) i++;

>>940
もっと詳しく。
942940:2005/06/20(月) 10:53:57
コマンドライン引数として
"(AA (BA BB) (CA CB))"
このような形のものが与えられるので、それをコンピュータ内部に取り込ませて、そこから
括弧表記
後置表記
図表現
の3種類の方法で出力するということをやりたいのです。
がこの「コンピュータ内部に取り込ませて」の部分のアルゴリズムがまったくわかりません。
一応
class Node {
String word;
Node left, right;

Node(String str) {
word = str;
left = null;
right = null;
}
}
のような形で2分木の場合におけるクラスがヒントとして与えられているのですが・・・。
どなたかよろしくお願いします。
943デフォルトの名無しさん:2005/06/20(月) 15:09:23
この課題では、多分木のノードと二分木のノードのどちらを作成するのですか?
ノードの内容となる文字列の区切りは、括弧とスペース(空白)でよいのですか?
944940:2005/06/20(月) 19:41:45
基本的に作成するのは2分木で、それの応用として多分木を作るそうです。
私はその最初の2分木のアルゴリズムすら理解できなくて・・・。
また区切りはそれでよいです。
945デフォルトの名無しさん:2005/06/21(火) 08:53:36
しかし、これだと
AA (BA BB) (CA CB))
ルートの下に3つノードがあるのですが・・・
2分木ではムリです・・・
946デフォルトの名無しさん:2005/06/21(火) 09:18:42
>>945
import java.util.Vector;
class Node {
 String word;
 Vector<Node> children; //いくつでもどーんと来やがれ!
}
947デフォルトの名無しさん:2005/06/21(火) 09:44:03
>>946
あ、それです。
構文解析部分も作りなさい。
セパレータは先に述べた括弧と半角空白です。
お願いします。
948デフォルトの名無しさん:2005/06/21(火) 11:29:58
2分木ではないね。
VectorはArrayListでいいんじゃない?
949デフォルトの名無しさん:2005/06/21(火) 11:47:11
Vectorはマルチスレッドセーフだけど、ArrayListはそうじゃないから
拡張性からしたらVectorの使用の方が正しいね。
並列プログラミングも視点にいれないと駄目だよ。
950デフォルトの名無しさん:2005/06/21(火) 11:49:08
マルチスレッドは難しいとはいえ、シングルスレッドプログラミング
だけのJavaでは、正に牛肉の無い牛丼と言った感じだ。
951デフォルトの名無しさん:2005/06/21(火) 11:59:40
Vectorは古いから、ArrayListの方がいいんじゃないかと…。
スレッドセーフにも出来るし。
952M.B.:2005/06/21(火) 12:37:54
>>951
> Vectorは古いから
すると時代は StringBuffer より StringBuilder?
953デフォルトの名無しさん:2005/06/21(火) 13:14:29
おお、M.Bたんが。懐かしい。
このスレってみんなどっか行っちゃうのだよな・・・
954デフォルトの名無しさん:2005/06/21(火) 13:36:06
>>952
Enumeration より Iterator
Vector より ArrayList
Dictionary より Map
Hashtable より HashMap
Stream より Channel
StringBuffer より StringBuilder
が密かなトレンド。

>>953
俺も帰ってきたぞ。名無しだが。
2ch より @IT?
955デフォルトの名無しさん:2005/06/21(火) 14:30:48
パッケージの作り方教えてください。
956デフォルトの名無しさん:2005/06/21(火) 19:08:38
>>954
2ch より人間レベルが低いが Java House がいい。
957デフォルトの名無しさん:2005/06/21(火) 21:32:36
次スレを立てました。

http://pc8.2ch.net/test/read.cgi/tech/1119356753/l50

現スレの回答は、このスレに書いてください。
958デフォルトの名無しさん:2005/06/21(火) 23:20:41
スレNo.はもうこのまま52, 53, 54, …となってしまうのだろうか。。。
959デフォルトの名無しさん:2005/06/23(木) 00:17:28
>>954
>Hashtable より HashMap
javadocによるとHashtableはスレッドセーフで、HashMapはそうじゃないみたいなことが
書いてあるけど、それでもHashMapのほうがいいのかな?
960デフォルトの名無しさん:2005/06/23(木) 00:57:33
>>959
Collections/ConcurrentHashMap
961デフォルトの名無しさん:2005/06/23(木) 04:28:42
>>959
synchronized されているからといって
スレッドセーフとは限らない。

当初考えられてたよりもスレッドセーフは微妙で、
長い?議論の末やっと 5.0 になって
メモリモデルが改善されたなどという微妙なところがあったりする。

Map の同期化については、いい題材で、
IBMの記事になってたりする。

でも、5.0 では標準ライブラリに
ダグリーのスレッドセーフなコレクションが載ってると思うから、
必要ならばそれを使うのが吉かと。
962デフォルトの名無しさん:2005/06/23(木) 21:21:29
名前を入力したら学生番号が出力されるプログラムってありませんか?
963デフォルトの名無しさん:2005/06/23(木) 21:27:00
あるだろうな。
964デフォルトの名無しさん:2005/06/23(木) 21:33:13
>>962
1人/日ってとこだな。\70000で請け負うぞ。
965デフォルトの名無しさん:2005/06/23(木) 21:39:47
留年しちゃいます。誰か作って下さい。
全く分かりません
966デフォルトの名無しさん:2005/06/23(木) 21:41:22
>>965
それが自分の実力じゃないか
留年しろよ
967デフォルトの名無しさん:2005/06/23(木) 23:35:20
>>965
///// 使い方
///// java Meibo [名前]
/////
class Meibo {
public static void main(String args[]) {
// ここに名前を入れておく
String storageName[] = {"Java", "C" , "Pascal"};
// ここに学生番号を入れておく
String storageNumber[] = {"001", "002", "003"};
// 当たり前だが名前と学生番号は対応する順序で無いと駄目

for(int i=0; i<storageName.length; i++)
if(storageName[i].equals(args[0])) {
System.out.println("学生番号は "+ storageNumber[i] +" です。");
System.exit(0); }
System.out.println("見つかりませんでした。");
}}
968デフォルトの名無しさん:2005/06/23(木) 23:41:11
>>967
あのねぇ。。。
969デフォルトの名無しさん:2005/06/23(木) 23:55:51
>>967
ありがとうございます
これを実行すればいいんですか?
970デフォルトの名無しさん:2005/06/24(金) 00:08:24
>>969
仕様が分からないからなんともいえないけど
>>967の配列部分に自力で学生番号と名前を入力しておけば動くよ。
971デフォルトの名無しさん:2005/06/24(金) 00:38:02
967さん、本当にありがとうございます。
972デフォルトの名無しさん:2005/06/24(金) 12:29:40
そんなのでいいのか?
973デフォルトの名無しさん:2005/06/24(金) 20:13:18
文句があるならもっといいものを貼り付ければいいのに
974デフォルトの名無しさん:2005/06/25(土) 00:32:51
RDBから実装してくれるんだろうな。楽しみだ。
975デフォルトの名無しさん:2005/07/01(金) 10:01:16
ラジオボタンの判定について質問なのですが、
メインとは違うクラスでボタン、ラジオボタン等の設置をしていて、
メインクラスで

public void actionPerformed(ActionEvent e) {
if(ボタンを押されたとき){
if(ラジオボタンAが押されていれば){
処理1;
}
else if(ラジオボタンBが押されていれば) {
処理2;
}
else if(ボタンBを押したとき){
if(ラジオボタンAが押されていれば){
処理1;
}
else if(ラジオボタンBが押されていれば) {
処理2;
}
}

のような判定を行いたいのですが、ラジオボタンの判定だけどうも上手くいきません。
どなたかご教授お願いします(´・ω・`)

ちなみに ボタンAが押されたとき はif(e.getSource() == window.A)で上手く処理できています。
window はボタン設置等をおこなっている違うバウンダリクラスです。
976デフォルトの名無しさん:2005/07/01(金) 10:04:48
ちなみに、ボールを複数表示し、それぞれのボールを選択でき、
上下左右の4つのボタンで任意に動かせるプログラムを作るという課題です。
ボタン設置などと、判定処理などは違うクラスで実装しないといけません。
977デフォルトの名無しさん:2005/07/08(金) 15:35:53
>708
激亀レスだが
MySQLのJDBCはAspectJのライブラリを要求されます。
AspectJをダウンロードしてインストール後、Tomcatの/common/lib
に格納すれば動きます
978デフォルトの名無しさん:2005/07/11(月) 01:38:51
Color c[] = {Color.yellow, Color.blue, Color.red,
Color.orange, Color.green};
こう書いておいて、
ランダムでこの中から色が選ばれるようにするにはどうすればいいんでしょうか?
979デフォルトの名無しさん:2005/07/11(月) 23:56:16
>>978
int tmp = (int)(Math.random() * 10.0) % c.length;
Color random_color = c[tmp];
980デフォルトの名無しさん
.wavファイルの特定の周波数と周波数の間のみを再生(または新しくフィルタを通った結果の.wavファイルを出力する)
するバンドパスフィルタを作れ。
バンドパスフィルタとは特定の周波数の間のみを残して、他の周波数成分をカットしてしまうフィルタである。

・wavファイルを開く機能を実装
・周波数帯を指定する機能を実装
・指定された周波数帯のバンドパスフィルターとして機能する
・バンドパスフィルタを通った後の結果を再生、またはファイルへ出力する機能を実装

*1 演算速度は求めない。
*2 .wavファイルのフォーマットはモノラル16bit 44.1kHzに固定するが、長さは不定とする。


よろしくお願いします。