Java の宿題ここで答えます。

このエントリーをはてなブックマークに追加
Java の宿題ここで答えます。

・丸投げOK
・前提条件も全部出しておくれよ 数学関係は数式も出しておくれよ
・GUI 関係などは基本的に放置
・内容単純でも規模デカすぎるのはめんどくさいから省略
・JavaScript など、他言語の課題は徹底的にゴルァ

前スレ
学校の宿題は俺にやらせて下さいver.2.0βfor Java
http://pc5.2ch.net/test/read.cgi/tech/1076054000/
学校の宿題は俺にやらせて下さいver.1.1βfor Java
http://pc2.2ch.net/test/read.cgi/tech/1065599192/
【Java編】 学校の宿題は俺にやらせろ 【Java編】
http://pc2.2ch.net/test/read.cgi/tech/1040552821/
2ぽろじょあ ◆niBmDfC40k :04/07/11 15:35
( 。3。) ぽろチャンが2GETですYOYOYO!!!
3ぽろじょあ ◆niBmDfC40k :04/07/11 15:36
(  .3.) 3GETですYO
4ぽろじょあ ◆niBmDfC40k :04/07/11 15:36
(  .3.) 4GETですYO
5ぽろじょあ ◆niBmDfC40k :04/07/11 15:37
(   .3.)5GETですYO
6ぽろじょあ ◆niBmDfC40k :04/07/11 15:38
(   .3.) 6GETですYO
7ぽろじょあ ◆niBmDfC40k :04/07/11 15:38
(    .3.) 7GETですYO
8ぽろじょあ ◆niBmDfC40k :04/07/11 15:40
(    .3.) 8GETですYO
9ぽろじょあ ◆niBmDfC40k :04/07/11 15:41
(     .3.) 9GETですYO
10名無しさん@そうだ選挙に行こう:04/07/11 15:42
デタラメに並んだ、学籍番号(アルファベット2字+数字6字)、氏名、年齢(数字2桁)、学年(数字1桁)を、
学籍番号,氏名,年齢,学年の順番に","で区切ってコンソールに出力する方法を教えてください。

デタラメというのは、「EE030475,名無しさん,19,2」だったり「2,名無しさん,EE030475,19」だったりするってことです。
11ぽろじょあ ◆niBmDfC40k :04/07/11 15:43
(     .3.) 11GETですYO
12ぽろじょあ ◆niBmDfC40k :04/07/11 15:43
(      .3.) 12GETですYO
13ぽろじょあ ◇niBmDfC40k :04/07/11 15:44
(     .3.) 13GETですYO
14ぽろじょあ ◆niBmDfC40k :04/07/11 15:45
(      .3.) 13GETですYO
15ぽろじょあ ◆niBmDfC40k :04/07/11 15:46
>>13
( .3.)ヌェー これあげるYO!
    ぽろじょあ#ぽろっぽ
16ぽろじょあ ◆niBmDfC40k :04/07/11 15:48
(       .3.) 16GETですYO
17ぽろじょあ ◇niBmDfC40k :04/07/11 15:48
>>14
18ぽろじょあ ◆1m8p8g/tU2 :04/07/11 15:49
poroppo?
19ぽろじょあ ◆niBmDfC40k :04/07/11 15:50
>>17
(  .3.) ペ ヨンジュン
2010:04/07/11 15:51
 ∧||∧
(  ⌒ ヽ
 ∪  ノ タイミングが最悪だった・・・
  ∪∪
21名無しさん@そうだ選挙に行こう:04/07/11 15:52
>>10はスルーでつ!
22ぽろじょあ ◆niBmDfC40k :04/07/11 15:53
(       .3.)22GETですYO
23ぽろじょあ ◆Q/8CwyxVqY :04/07/11 15:54
POROPPO?
test
(・3・) エェー この騒ぎは何なんだYO
26ぽろじょあ ◆niBmDfC40k :04/07/11 15:56
(       .3.)26GETですYO


このまま埋めましょう
27ぽろじょあ ◆niBmDfC40k :04/07/11 15:57
>>23
( .3.)ナルェー そのまま「#ぽろっぽ」でOKだZE!
     キミも今日から ぽろじょあ ◆niBmDfC40kだYO!
28ぽろじょあ ◆niBmDfC40k :04/07/11 15:58
( .3.) ヌェー ボクがいっぱいいるYO
スレタイ間違えたのが全ての元凶
30名無しさん@そうだ選挙に行こう:04/07/11 15:59
パズルつくりたいんですけどどうやっていいのかさっぱり判りません。
ピースがくっついてて、ずらして絵を合わせるやつです。
提出期限あと三日…タスケテクダサイorz
>>30
写メとって印刷して切り刻め。
こっちはぼろじょあに保守させといて、
新規の質問は前スレでやった方がいいかもしれない
>>27
( ゜3゜)ウェーわかんないよ。
34ぽろじょあ ◆niBmDfC40k :04/07/11 16:02
>>30
( .3.) ヌェー 1週間ぐらい学校休めば、相手も忘れてくれるYO
俺が死ねばいいんだろ どうせ いいよ死ぬから
36ぽろじょあ ◆niBmDfC40k :04/07/11 16:06
( .{{●}}.) ヌォー
37ぽろじょあ ◆niBmDfC40k :04/07/11 16:06
                ∴∴
( .{{○})三三三三三三●))Д´)) ←>>35
                ∵∴
>>35
( ゜3゜)ウェー 死んでも生きてもいいけど、おれに迷惑かけるな。
てす
( ゜3゜)ウェー、やっとできたよ。
41ぼろじょあ ◆qCbqICeyTc :04/07/11 16:13
>>40
( .3.)ノ ヌェー コングラチュレーションズだYO
42ぽろじょあ ◆niBmDfC40k :04/07/11 16:14
(*.3.) マルァー ボクが間違えちゃったYO
・・・・・ 夏休み?
>>43
( ゜3゜)ウェー、日曜日だYO
>>10
正規表現の使い方、よく分かってませんのでもっと良い方法があるかもしれません。
名前に数字が入っていると、名前の取得ができません^^;

import java.util.regex.*;

public class Q10 {
private static final Pattern NUMBER = Pattern.compile("(?:.+,)?(\\p{Alpha}{2}\\p{Digit}{6})(?:,.+)?");
private static final Pattern NAME = Pattern.compile("(?:.+,)?([^\\p{Digit}]+)(?:,.+)?");
private static final Pattern AGE = Pattern.compile("(?:.+,)?(\\p{Digit}{2})(?:,.+)?");
private static final Pattern GRADE = Pattern.compile("(?:.+,)?(\\p{Digit}{1})(?:,.+)?");
static void print(String input) {
StringBuffer ret = new StringBuffer();
Matcher m;
m = NUMBER.matcher(input);
ret.append(m.matches()?m.group(1):"不明").append(",");
m = NAME.matcher(input);
ret.append(m.matches()?m.group(1):"不明").append(",");
m = AGE.matcher(input);
ret.append(m.matches()?m.group(1):"不明").append(",");
m = GRADE.matcher(input);
ret.append(m.matches()?m.group(1):"不明");

System.out.println(ret);
}

public static void main(String[] args) {
print("EE030475,名無しさん,19,2");
print("2,名無しさん,EE030475,19");
}
}
46ぽろじょあ ◆niBmDfC40k :04/07/11 17:22
( .3.) マルェー 前スレ1000逝ったYO
>>46
( .3.)ウィー、マジスレになっちまうんじゃないかと思って、心配したYO
通報しますた。
>>48
( .3.)ウェー、その前に投票しろYO
50ぽろじょあ ◆niBmDfC40k :04/07/11 18:19
( .3.) エェー 今日ヒマだったのに不在者投票にしちゃったYO
51魔方陣:04/07/11 18:55
学校の課題で魔方陣が出ました。でも全く説明がなくて・・・。

c 氏名 日付
program pr2

integer a,i,j,k,l
parameter(n=3) !n は奇数
dimension a(n,n)

print '(1x,a,i2)','pr2 魔方陣 n=',n
print *,'学生番号 氏名’
  
   do k=0,n-1
do l=0,n-1
i=(k+l)*2+(n+1)/2+2
j=l-k+(3*n+1)/2
a(mod((i-1),n)+1,mod((j-1),n+1)=n*k+l+1
end do
end do

do i=1,n
print '(9i5)', (a(i,j), j=1,n)
end do
end  
     
これは3×3で、課題はこれを9×9で計算して提出しろ、というものなんですが、
どこをどう変えればいいのかわかりません。
助けてください。 
>51
1. まずスレタイを2つ隣の部屋に聞こえるくらいの大声で3回読め。
2. ロープを買ってこい。
3. それでくぶ吊って氏ね
( .3.) マルェー くぶってなぁに?
九分
ほとんど全部ってことじゃない
「マルェー」って
どういうイントネーションで発音するの?
>>55
( ゜3゜)ウェー、「マ」のmはほとんど発音しない感じだYO
57ぽろじょあ ◆niBmDfC40k :04/07/11 22:53
( .3.) ヌェー 「ゥアレー」に近いZE
58ぼろじょあ ◆TUb1f0bpDc :04/07/12 00:29
test
>>58
( ゜3゜)ウェー、過去レスみれYO
60カポコン:04/07/12 00:57
JSP&サーブレット(Java)を侮辱している、
ここの低レベルな腐ったみかんどもに制裁きぼん。

ttp://board.aaacafe.ne.jp/read.php/zatsudan/1089119409/index.html
自分でやれよ
62ぽろじょあ ◆niBmDfC40k :04/07/12 13:18
(;.3.) ヌェー 昼休みだYO 暑くてたまンNEー
( ゜3゜)彡ウェー、今日は風が強くて涼しいよ
さすが群体だな
65ぽろじょあ ◆niBmDfC40k :04/07/12 13:56
( .3.) エェー 今日はお昼休みのウキウキウォッチングが出来なかったから
      軽く鬱だYO
66ド素人:04/07/12 14:10
フレームの左半分に地図があって、右半分に工事の種類が書いてあるチェックボックスがズラリと並んでます。
チェックボックスにチェックを入れ、更新すると工事を行った地点が反映される、というソースを解析中なんですが。

//テンプレートファイル読み込み
String usrPath = req.getRequestURI();
System.out.println("usrPath before = " + usrPath);
usrPath = usrPath.substring(1);
usrPath = usrPath.substring(0, usrPath.indexOf("/"));
System.out.println("usrPath after = " + usrPath);
Document root = null;
という部分なんですが、「この部分はどういう処理をしている、どういう役目をしている部分でしょうか?」
さっぱり分からないのでお教え願います。
>>66
( ゜3゜) マルェー、さっぱりわからないなら、しかたないYO
68ぽろじょあ ◆niBmDfC40k :04/07/12 14:19
( .3.) ヌェー 九九の出来ない子供に積分を教えるようなものだNE
       じゃあ仕事行って来るYO
>>66
System.out.println("usrPath before = " + usrPath);

System.out.println("usrPath after = " + usrPath);
があるんだから、自ずとわかるだろ。
結局、このスレで続けるの?
別スレ建てることもないだろ
>>66
処理内容は見たままだ。
/abcdefg/hijklmn → abcdefg という変換。
たぶん、フルパスのうちの最初のフォルダ名を調べてるんだろう。
これ以上の類推、何故その処理が必要かは無理。
フレームだのチェックボックスだの、目に見えることだけ書いたってムダ。
73ド素人:04/07/12 14:51
>>69,72
ありがとうございました。
スレタイが "Java" から始まってるからスレ違いのアホが少なくなるかと思ってたんだけどな。
はやばやと >>51 でぶちかましやがった。
結局「宿題」という一語に向かって突っ込んでくるのか。
75学生:04/07/12 17:03
import java.io*
public class Sample52 {
public static void main(String[] args) {
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
String[] lines = new String[10];
int count = ;
try {
while(ture) {
System.out.print("input> ");
String str = in.readLine();
if(str.equals("")) break;
lines[count] = str; ++count;
}
for(int i = count-1; i >= 0; --i) {
System.out.println(lines[i]);
}
} catch(Exception e) { System.out.println("error: " + e); }
}
}

これを元にして、配列の最大収容数まできたら、もっと大きな配列を
用意しなおすプログラム

それと配列に実数値を読み込み(0が入力されたら終わりとする)、
その中から平均より大きい値のみを選んで、入力に現れたのと同じ順番で
打ち出すプログラム

初歩的なことかもしれないですがよろしくおねがいします
76学生:04/07/12 17:05
import java.io*
public class Sample52 {
public static void main(String[] args) {
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
String[] lines = new String[10];
int count = 0;
try {
while(ture) {
System.out.print("input> ");
String str = in.readLine();
if(str.equals("")) break;
lines[count] = str; ++count;
}
for(int i = count-1; i >= 0; --i) {
System.out.println(lines[i]);
}
} catch(Exception e) { System.out.println("error: " + e); }
}
}

ちょっと間違ってました
77一つめ:04/07/12 18:06
>>75
import java.io.*;
public class Sample52 {
public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String[] lines = new String[10];
int count = 0;
try {
while (true) {
System.out.print("input> ");
String str = in.readLine();
if (str.equals(""))
break;
lines[count++] = str;

if (count == lines.length) {
String[] temp = new String[lines.length * 2];
System.arraycopy(lines, 0, temp, 0, lines.length);
lines = temp;
}
}
for (int i = count - 1; i >= 0; --i)
System.out.println(lines[i]);
}
catch (Exception e) {
System.out.println("error: " + e);
}
}
}
78二つめ:04/07/12 18:06
import java.io.*;
public class Sample52 {
public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int[] lines = new int[10];
int count = 0, sum = 0;
try {
while (true) {
System.out.print("input> ");
int num = Integer.parseInt(in.readLine());
if(num==0)
break;
lines[count++] = num;
sum += num;
if (count == lines.length) {
int[] temp = new int[lines.length * 2];
System.arraycopy(lines, 0, temp, 0, lines.length);
lines = temp;
}
}
for (int i = 0; i < count; i++)
if(lines[i]>=(double)sum/count)
System.out.println(lines[i]);
}
catch (Exception e) {
System.out.println("error: " + e);
e.printStackTrace();
}
}
}
>>75
String str = in.readLine();
if (str.equals("0"))
80学生:04/07/12 23:09
ありがとうございました
前スレにあったかもしれんが、
自動販売機をシミュレート(模擬)するクラスVendingMachineを作成しなさい。
 お金を入れて、商品を排出する自動販売機をシミュレートする。シミュレートする機能は、お金の投入、商品の選択、商品とおつりの排出。また、管理機能として、商品の在庫、自動販売機内の現金が確認できるようにする。
 扱う商品は、ジュース(110円)、お茶(150円)、ビール(250円)の三種類。最初は各商品が10個ずつ入っている。
 扱う硬貨は、500円玉、100円玉、10円玉の三種類(50円玉を入れてもよいが、おつりの計算が少し複雑になる)。
 最初は、100円玉10枚と、10円玉30枚がおつりのために、入っている。つまり、自販機の中の現金は1300円から始まる。
 VendingMachinのクラスは極力ブラックボックス化する。
まず、「いらっしゃいませ」と表示する。
メニューを表示し、お金を入れてもらう。
商品が選択されたら、商品とおつりを排出し、自販機の中の状態を更新する。
import java.io.*;

class kadai11
{
public static void main(String[] args)n
{
VendingMachine vm=new VendingMachine();
for(;;)
{
vm.interact();
}
}
}

class VendingMachine
{
//ここに埋める

金種まで考慮して釣り銭を計算する。
この問題をおながいします。
こんなの共通科目なのか?
大変だな
>>81
金の投入や商品の選択はどーすんの?
84デフォルトの名無しさん:04/07/13 01:22
>>81
なんか見覚えがあるぞ。

それ、独習UMLにのっているクラス図作成サンプルだろ。
それをむりやりソースコード化しているだけじゃないのか?
いやユースケース図だったかな?
for(;;)
{
vm.interact();
}

となっているということはThreadを使うと言うことか。
java.ioを使うと言うことはSystem.inでコンソールから選択したキーを読みとる形式か。

"1"を押すとコーラがでる、"2"を押すとウーロン茶がでる、みたいなものか? 
>>81
( ゜3゜)ウェー、Javaの課題で「{」が単独の行になってるのは、出題者がJava知らない可能性が高いYO
88デフォルトの名無しさん:04/07/13 01:46
まず最初にやることはステートチャート図(状態遷移図)をかくことだろう。
お金をなにも入れていない状態を初期状態として。

10円をいれたらどうなろうだろうか?
ここでジュースボタンをおしたらどうなるだろうか?(当然j金が足りないので何も反応しない)

で、状態をどうやって表すかだ。
コインが0円状態が初期状態。
10円玉をいれた状態。、100円玉を入れた状態、500円玉を入れた状態、
あるいはそれらを組み合わせて入れた状態、あるいは途中でジュースか何かを買っておつりが
いくらか返ってきた状態、これらをステートチャート図で表すってところだろうか。
ってな感じでできそうだな。

東大の大学一年の授業ですらこんな難しいのださないらしいし、
これは共通科目の授業ではない可能性があるな。
ソフトウェア工学の授業か何かか? それともいきなりレベルの高い問題を教授またはTAが出したとか?
>>87
GNUマンセーな人かも知れないな。
最近ではEclipseなどで{}の配置をコードフォーマッタによって
ああいうふうにすることもできるようになっている。

しかし、内容がオブジェクト指向チックに見えてしまうので
以外とJava知ってる人かも。

アプレット内で2種類のキャラクタークラスを作ってキャラクターの描画自体は各クラスに任せてます

public class MyApplet extends Applet {
MyApplet(){
 Character1 c1 = new Character1(this);
 Character2 c2 = new Character2(this);
}
public void paint(Graphics g) {
 c1.draw(g);
 c2.draw(g);
}

で2種類のキャラクタークラスは自分の画像を読み込んで表示します。

public class Character1 {
Image chara1;
Applet applet;
Character1(Applet applet) {
 this.applet = applet;
 chara1 = applet.getImage(applet.getDocumentBase, "chara1.gif");
}
public void draw(Graphics g) {
 g.drawImage(chara1, 10, 10, applet);
}

Character2も読み込む画像が違うだけで同じです。
ここで問題が発生したのですが、最初はちゃんと表示されるのですが、ブラウザの更新をかけると、画像が表示されなくなることがあるのです。
そこでMediatrackerを使ってみたのですが、どうもうまくいかず、isErrorID()メソッドを使ったところエラーが発生しているようです。
画像の読み込みエラーが起こる原因として考えられることは何か無いでしょうか?ご教授お願いします。
ちなみにローカル環境で実行してるので通信上のエラーはないと思います。
91デフォルトの名無しさん:04/07/13 02:21
>>90
java.applet.Applet#repaint()
java.awt.image.BufferedImage
92デフォルトの名無しさん:04/07/13 02:33
public class Coin {
//コイン情報をStateパターンで記述
 toStirng(){//何か }
}

VendingMachine extends Thread {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Coin ten = new Coin(10); Coin hundred = new Coin(100); //略
 public void run(){
  if(in.readLine().equals(ten)){
   if(もしまだ10円をつかっていないならば){ //10円投入処理を記録 }
  } else if(in.readLine().equals(hundred)){
   if(もしまだ100円をつかっていないならば){ //100円投入処理を記録 }
  } else if(in.readLine().equals(fiveHundred)){
   if(もしまだ500円をつかっていないならば){ //500円投入処理を記録 }
  } else if(in.readLine() == "ジュース"){
   //金があるか釣り銭があるならジュースがでる
   //釣り銭処理メソッド・クラス実行
  } else if(in.readLine() == "お茶"){
   //金があるか釣り銭があるならジュースがでる
   //釣り銭処理メソッド・クラス実行
  } else if(in.readLine() == "ビール"){
   //金があるか釣り銭があるならジュースがでる
   //釣り銭処理メソッド・クラス実行
  } else if(in.readLine() == "釣り銭"){
   //釣り銭を下ろす。初期状態に戻る
  }
 }
}
>>92
ifの所でreadLine()やると、上手くいかんぞ。
んにゃreadLine()の外部化が必要だな。
if文の外に出してreadLineしたものを変数に突っ込んでそれから
if文かswitch文で判定だ。
>>89
> しかし、内容がオブジェクト指向チックに見えてしまうので
> 以外とJava知ってる人かも。

Javaもよく知らず、オブジェクト指向にあこがれている、でもよくわかってない先生が、自分では問題を作りきらないから、独習UMLのサンプルをそのまま使った、という説。
96デフォルトの名無しさん:04/07/13 07:05
【問題】継承、カプセル化、ポリモアフィズムを使ったプログラムを作成しなさい。
題材は何でも構いません。但し、効果的にポリモアフィズムが使用されていること、拡張性があること。

という宿題だ出ているのですが、何か良い例はあえいませんか?
ネット上に落ちてないか探しているのですが、良いのが見つかりません。
宜しくお願い致します。
( ゜3゜)ウェー、いっぱいネットに落ちてると思うYO
>>96
デザインパターンの本やサイトそのままつかえばいい
>>90
あんまりアプレットのコンストラクタ書かないよな
動いてるなら良いが
100デフォルトの名無しさん:04/07/13 09:40
class A {
}

class B extends A {
}

上のクラス階層で、次の文においてエラーになるのはどれか。
1) A a = new B();
2) B b = new A(); 
また、その理由を継承の観点で述べよ。
>>100

2)

継承的予想。
102デフォルトの名無しさん:04/07/13 09:42
>>100
自分でコンパイルしてみればわかるだろ
103ド素人:04/07/13 09:42
66と同じプログラムです
//表示制限の取得
if (conf.getValue(usrPath + ".basemap.disp.limit").equals("on")) {
System.out.println("D*[BaseMapContents].doGet : limit on!");
String scaleStr = "";
if (scale <= 5000) scaleStr = "10k";
else if (scale <= 30000) scaleStr = "50k";
else scaleStr = "200k";

String topY = conf.getValue(usrPath + ".basemap" + scaleStr + ".limit.topY");
String rightX = conf.getValue(usrPath + ".basemap" + scaleStr + ".limit.rightX");
String bottomY = conf.getValue(usrPath + ".basemap" + scaleStr + ".limit.bottomY");
String leftX = conf.getValue(usrPath + ".basemap" + scaleStr + ".limit.leftX");

//制限値のチェック
if (topY.equals("") || rightX.equals("") || bottomY.equals("") || leftX.equals("") ) {
System.out.println("制限値不正");
}
else {
//中心座標のチェック
System.out.println("cx -> " + cx);
System.out.println("cy -> " + cy);
if ((cx > Double.parseDouble(rightX)) || (cx < Double.parseDouble(leftX))
|| (cy < Double.parseDouble(bottomY)) || (cy > Double.parseDouble(topY))) {
try {
res.setContentType("image/svg+xml");
GZIPOutputStream gzout = new GZIPOutputStream(res.getOutputStream());
ここまでのソースはどんな処理をしているのか教えてください。
104デフォルトの名無しさん:04/07/13 09:49
>>103
まず最初にconfがどのクラスのオブジェクトなのかわからないことには
>>103
あのな、断片だけ拾ってきてもしょうがないんだよ。
全体を俯瞰しないとなんともいえねっつの。
if も try〜catch も、幾つもが中途半端じゃねーか。そんな引用の仕方があるかぁぼけぇ。

・・・どーもサーブレットくさいのでそういう前提で類推するが、
地図のベースになる画像(工事箇所のデータに関わらず普遍的な地形や道路などのデータ)が縮尺によって数種類用意されており、
GET 時に渡されたパラメータから判断された scale からどれを使うか決める。
conf の位置付けが今ひとつ分からないが、
GET/POST ともに、ユーザがおかしなパラメータ形式を与えることも可能なので、
その点でおかしなことをされてないかチェックし("制限値不正" の前の if)、
中心とする座標が地図データの一端にでもひっかかってれば (cx 云々のあたり)、
地図画像の出力をはじめる。
最後の二行は、出力ファイルの MIME を SVG であると予告し(これは wwwサービス経由でユーザに通知される)、
GZIP 圧縮された SVG 画像(GZIP は SVG の標準圧縮手法)を出力しようとしている。
ちなみに SVG は xml で記述されたベクタ画像形式。ベクタ画像とは座標値データからなる図形の集合。
×普遍的な
○不変な

>>66 の Document (なんの意味があってこの最後の行も持ってきたんだ?) は
javax.swing.text.Document じゃなくて org.w3c.dom.Document なんだろうなぁたぶん。

趣旨が違うけど答えてやるよ。でもせめて { } 単位で貼ってくれよな。
107デフォルトの名無しさん:04/07/13 10:33
abstract class A {
void whoami() {
print();
}
abstract void print();
}

class B extends A {
void print() {
System.out.println("B");
}
}

class Test extends B {
void print() {
System.out.println("Test");
}
public static void main( String[] args ) {
new Test().whoami();
}
}

コンパイルして実行すると出力は Test なんですが
経緯の解説お願いします。

書いてあるとおり。
public static void main( String[] args ) { //ここからはじまる
new Test() // Test のインスタンス作る
whoami(); //whoami メソッドを呼ぶ
//Test には定義されてないが B を継承しているので B の方を見る
//B にも定義されてないが B は A を継承しているので A を探す
void whoami() { //A に whoami メソッドがあったので実行する
print(); // print メソッドを呼ぶ
void print() { //Test に定義されているので Test の print メソッドを呼ぶ
System.out.println("Test"); //表示される

「何のクラスのインスタンスか」によって、
何重にもオーバーライドされているうちのどのメソッドが呼ばれるか決まる。
(static メソッドとかフィールドとか、も少しややこしい例もあるが)
110デフォルトの名無しさん:04/07/13 10:59
>>109
どうもありがと。
111デフォルトの名無しさん:04/07/13 11:03
class Test {
private String name;
Test( String name ) {
this.name = name;
}
void ping( Test test ) {
System.out.println( name );
test.ping( this );
}
public static void main( String[] args ) {
Test x = new Test("x");
Test y = new Test("y");
x.ping( y );
}
}

結果、xyxyxyxyxy...でStackOverflowErrorになります。
解説お願いします。
112デフォルトの名無しさん:04/07/13 11:03
c言語は答えてくれますか?
113ぽろじょあ ◆niBmDfC40k :04/07/13 11:16
( .3.) ヌェー スレ検索ぐらいしろYO
>>111
そりゃどっかでif文でbreakする機構をつくらなければ
永久ループになるだろう。
ping()メソッドが再帰呼び出ししているんだからな。
pingメソッド無いにif文で呼び出しているpingを制御しろ。
カウンタでもつけてカウンタがある値に達したら終了するか
キーリスナーからの反応があったら終了するとかに汁
115ド素人:04/07/13 11:50
>>106ありがとうございました。
116ド素人:04/07/13 12:05
>>103
のことで質問です。CONFに下記の定義がなされていたのですが、
その場合はどう変わりますか?サーブレットの対応ソースなんですが。
public class BaseMapContents extends HttpServlet {
//SystemConfig conf = new SystemConfig();
static SystemConfig conf;
static Document templ;
static Document temp;
static Document uLay;
static File adobeFile;
SVGUtil sutil = new SVGUtil();
教えて君で申し訳ありません。
>>111
インスタンスが二つできているが、それらが交互にメソッドを呼んでいる。
メソッドをひとつ呼ぶ(以外にもいろいろタイミングがあるが)たびに、
VM は、どこまで処理を行ったか、などの情報をスタックというところにためる。
延々メソッドが呼ばれて、一度も「メソッドが完了した」という時点に達しないので、
スタックがぱんぱんになっていく。
VM もしくは OS やマシンによって定まるところのスタック容量に到ってしまい、
VM は Error を出してしまう。
>>116
SystemConfig はたぶんそのソースの開発者が
勝手に作ったかどっかから持ってきたクラスなので、こちとらわかりっこない。
11990:04/07/13 12:41
>>99
すみません書き間違えました。
コンストラクタじゃなくinit()内でちゃんとインスタンス化してます
>>119
ブラウザはネスケ7.xだったりする?
12190:04/07/13 12:47
>>120
IE6.0ですよー
アプレットのpaint()メソッドってだいたい何msぐらい毎に呼び出されてるのでしょうか?
呼び出される頻度を教えてくださいm(_ _)m
>>122
一定時間毎に呼ばれるわけじゃない。
再描画の必要があるときだけ呼ばれる。
124122:04/07/13 13:29
>123
答えて頂いてありがとうございます
そこでさらにお聞きしたいのですが、その再描画の必要性の判断はどのような基準でされるのですか?
あと、paint()メソッドをスレッドのran()メソッドのように使っているプログラムをたまに見かけますが、
そのような使い方は間違っているのでしょうか?
125横槍:04/07/13 14:04
>>124
主に、
1) そのコンポーネントの上に他のコンポーネントが重なり、また退けられたとき
2) TextArea の文字列が変わった、List の構成要素が変わったなど
3) その他諸々プログラマによってしかけられた repaint() が呼ばれたあと
 (repaint メソッド内では行われない。参考文献は多いので探すこと)
1)、2) の例は、再描画しなきゃユーザにとって不便なんだから当たり前。
3) もそう思ってプログラマがしかけるんだから当たり前。
(2) もつまりは 3) と同じで、repaint() などで解決している)

>あと、paint()メソッドをスレッドのran()メソッド
run のことか。「〜のように」の意味がサッパリ分からないが、
「間違っている」と答えておくか。

画像インスタンスを用意し、表示内容をことあるごとにそこに更新し、
paint メソッドではその画像をペロンと表示するだけ、てのが、
メモリの使い方が贅沢ではあるが最も理想的な実装。swing は基本的にそうなってる。
例えば・・・星が100,000個表示されるがその位置は滅多に変わらない、なんてなとき。
我がウィンドウの前を別アプリケーションのダイアログがちょろちょろしたとしても、
再描画の度に100,000ヶ所描画しなくて済む。

スレ違いだからこれ以上は相談スレに行ってね。
たぶん>>122は時間で変化する動的な表示させたいんでしょう。
それなら、タイマーを使って一定時間ごとにイベントを発生させ、
イベントハンドラの中でAppletのrepaint()を呼んでやればいい。

具体的な方法は何通りかある。調べてくれ。
キーワードはTimer
127横槍:04/07/13 14:14
>swing は基本的にそうなってる。
あ、これは全部が全部じゃないんだったかな? 興味があったら自分で調べてくれ。
swing のそのものはきっと、ソースとか見ても複雑だから参考にならんだろうけど。
"ダブルバッファリング" ちうやっちゃ。
swingではコンポーネントのsetDoubleBafferred(true)を呼べば
それでダブルバッファリングしてくれる。
各自の興味がある分野(ゲームでも何でもよい)のプログラムを作成することを考える.
その場合,多相性を利用するとうまくいきそうな部分は何であるかについて,
具体的な例を交えて考察せよ.
さらに,それを説明するためのプログラムをJavaで作成せよ.

おねがいします。
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.awt.*;

public class GUI extends JFrame{
public static void main(String[] args){

GUI test = new GUI("GUITest");

test.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){System.exit(0);}
});

test.setVisible(true);
}
131130:04/07/13 14:37

public GUI(String title){
setTitle(title);
setBounds(0,0,500,500);

JTextArea area1 = new JTextArea(10,7);
JTextArea area2 = new JTextArea(5,7);
JTextArea area3 = new JTextArea(5,7);

JLabel label1 = new JLabel("予約");
JLabel label2 = new JLabel("キャンセル");
JLabel label3 = new JLabel("追加予定");
JLabel label4 = new JLabel("現在飛行中");

JTextField tf1 = new JTextField(10);
JTextField tf2 = new JTextField(10);

JButton button1 = new JButton("予約",);
JButton button2 = new JButton("キャンセル");

GridBagLayout gb = new GridBagLayout();
getContentPane().setLayout(gb);
GridBagConstraints c = new GridBagConstraints();

132130:04/07/13 14:38
c.weightx = 0;
c.weighty = 0;
c.anchor = GridBagConstraints.CENTER;


c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
c.gridheight = 6;
gb.setConstraints(area1, c);

c.gridx = 3;
c.gridy = 4;
c.gridheight = 2;
c.gridwidth = 2;
gb.setConstraints(area2,c);

c.gridx = 5;
c.gridy = 4;
c.gridheight = 2;
c.gridwidth = 2;
gb.setConstraints(area3,c);
133130:04/07/13 14:39
c.gridx = 2;
c.gridy = 2;
c.gridheight = 1;
c.gridwidth = 1;
gb.setConstraints(label1,c);

c.gridx = 2;
c.gridy = 3;
c.gridheight = 1;
c.gridwidth = 1;
gb.setConstraints(label2,c);

c.gridx = 3;
c.gridy = 4;
c.gridheight = 1;
c.gridwidth = 1;
gb.setConstraints(label3,c);

c.gridx = 5;
c.gridy = 4;
c.gridheight = 1;
c.gridwidth = 1;
gb.setConstraints(label4,c);
134130:04/07/13 14:40
c.gridx = 3;
c.gridy = 2;
c.gridheight = 1;
c.gridwidth = 2;
gb.setConstraints(tf1,c);

c.gridx = 3;
c.gridy = 3;
c.gridheight = 1;
c.gridwidth = 1;
gb.setConstraints(tf2,c);

c.gridx = 5;
c.gridy = 2;
c.gridheight = 1;
c.gridwidth = 1;
gb.setConstraints(button1,c);

c.gridx = 5;
c.gridy = 3;
c.gridheight = 1;
c.gridwidth = 1;
gb.setConstraints(button2,c);
ラウンジって知ってる?
136130:04/07/13 14:40
c.gridx = 3;
c.gridy = 2;
c.gridheight = 1;
c.gridwidth = 2;
gb.setConstraints(tf1,c);

c.gridx = 3;
c.gridy = 3;
c.gridheight = 1;
c.gridwidth = 1;
gb.setConstraints(tf2,c);

c.gridx = 5;
c.gridy = 2;
c.gridheight = 1;
c.gridwidth = 1;
gb.setConstraints(button1,c);

c.gridx = 5;
c.gridy = 3;
c.gridheight = 1;
c.gridwidth = 1;
gb.setConstraints(button2,c);
137130:04/07/13 14:41
getContentPane().add(area1);
getContentPane().add(area2);
getContentPane().add(area3);
getContentPane().add(label1);
getContentPane().add(label2);
getContentPane().add(label3);
getContentPane().add(label4);
getContentPane().add(tf1);
getContentPane().add(tf2);
getContentPane().add(button1);
getContentPane().add(button2);

}
}
おいおい…
139130:04/07/13 14:42
このプログラムで
area1に文字列(飛行機の便名)をいくつか列挙して
tf1に入れた文字列(飛行機の便名)をbutton1を押すとarea2に文字列が入るようにして
tf2に入れた文字列(飛行機の便名)をbutton2を押すとarea2から削除される
ようにしたいのですが、actionの使い方がいまいちわからずできません。
これをできるようにしてください。お願いします。

途中重複してしまいもうしわけございません。
長々と書いてしまいましたが、お願いします。
GridBagLayout について聞かれるかと思って身構えていたのに、質問それかよw
141130:04/07/13 14:45
すみません。
GridBagLayoutもいまいちよくわかってないんですけど、なんとか不細工ですけどこの形にできたのでいいかと。。。
それで、アクションが。。。
>>141
NetBeans使えば一発だYO
143デフォルトの名無しさん:04/07/13 15:39
F:>java CountA asdfasdfa
と、適当なアルファベットの羅列を入力したとき、
a:***
d:**
f:**
s:**
このようにアルファベット順に表示して、
各文字の個数をアスタリスクで表示するモノを…

よろしくおながいします。
>>139
>area2から削除される
テキストエリアってのは、あんまりそれ単体で「削除」の表現をサポートするようなもんではないぞ
そういうプログラム見たことあるか? 滅多にないだろ? JList かなんか使えばいいのに。
あと、JTextArea にせよ JList にせよ JScrollPane で包まないといかんよ。
とりあえず俺的には
new JButton(new AddAction(tf1, area2));
new JButton(new RemoveAction(tf2, area2));
class AddAction extends AbstractAction {
//それなりのコンストラクタとメンバと getValue オーバーライド
 public void actionPerformed(ActionEvent ev) {
  dest.append(src.getText() + "\n");
 }
}
class RemoveAction extends AbstractAction {
//それなりのコンストラクタとメンバと getValue オーバーライド
 public void actionPerformed(ActionEvent ev) {
  String name = src.gettext();
  String txt = dest.getTex();
  int j = txt.indexOf(name);
  if (j != -1) {
   dest.setText(txt.substring(0, j) + txt.substring(j + name.length() + 1));
  }
 }
}
納得いかない実装だけど前提からして好みじゃないからしょうがないな。
便名の集合を別途クラスとして立てて (JList なら ListModel にするといい)、
それにたいして add/remove して、その結果がコンポーネントに反映されるようにするといい。
それと、ツール使わないならレイアウトに凝るのはいっちゃん最後にしたほうがいい。
設計が先にしっかりしてないと、書き直しの時ごちゃごちゃして困る。
>>143
public class CountA {
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("単語指定せよ");
System.exit(-1);
}
String word = args[0];
int[] counts = new int[26];
for (int i=0; i<counts.length; i++) {
counts[i] = 0; //要らないけど行儀よく初期化
}
for (int p=0; p<word.length(); p++) {
int i = word.charAt(p) - 'a';
if ((i >= 0) && (i < counts.length)) {
counts[i]++;
}
}
for (int i=0; i<counts.length; i++) {
if (counts[i] != 0) {
char c = (char)('a' + i);
System.out.print(c + ":");
for (int j=0; j<counts[i]; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
}
小文字限定。
>>143
Cの宿題スレでも同じ問題見たような気がする。
同じ学校なのかな?
>>129
最初の3行、できるとこまで自分なりにやれよ。
4行目を実行するにあたって荷が勝ちすぎない程度に題材を絞って。
>>143
import java.util.*;
class CountA{
 public static void main(String[] args){
  String word = (args.length == 0) ? "" : args[0];
  Map w = new TreeMap();
  for(int i = 0; i < word.length(); ++i){
   String ch = word.substring(i, i + 1);
   int num = 0;
   if(w.containsKey(ch)){
    num = ((Integer)w.get(w)).intValue();
   }
   w.put(ch, new Integer(num + 1));
  }
  for(Iterator i = w.entrySet().iterator(); i.hasNext(); ){
   Map.Entry me = (Map.Entry)i.next();
   System.out.print(me.getKey().toString() + ":");
   for(int j = 0; j < ((Integer)me.getValue()).intValue(); ++j) System.out.print("*");
   System.out.println();
  }
 }
}
149デフォルトの名無しさん:04/07/13 16:13
>>145
> System.exit(-1);
この部分を
 throw new Error("単語指定せよ");
または
 throw new Exception("単語指定せよ");
として

> for (int i=0; i<counts.length; i++) {
> counts[i] = 0; //要らないけど行儀よく初期化
> }
この部分を
java.util.Arrays.fill(counts, 0);
としたくなるのは漏れだけですか?

>>130 に挑戦しているんだけど難しいなぁ。
JTextArea をクリアして、新たに書き直すのがなぜかむずい。
Document駆使しなくちゃ無理なのか?

151150:04/07/13 16:51
いや難しく考えすぎてた。
setText()で用は足りました。

>>130
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=151&fi=no
152ド素人:04/07/13 17:23
System.out.println("[BaseMapContents].doGet : File get and parse start");
// proxyサーバを使用するかどうかの判定
String useProxy = "off";
String proxyHost = null;
int proxyPort = 0;

useProxy = conf.getValue("service.use.proxy");
if(useProxy != null && useProxy.equals("on")){
proxyHost = conf.getValue("service.proxy.host");
proxyPort = Integer.parseInt(conf.getValue("service.proxy.port"));
}
// SVGZ,jamarファイルを各Serverから取得
Thread[] thd = new Thread[urls.length];
SVGRequestThread[] rth = new SVGRequestThread[urls.length];

for(int i=0;i<urls.length;i++){

System.out.println("url[" + i + "] = " + urls[i]);
// MapServiceサーバへのリクエストにプロキシを使用するか
rth[i] = new SVGRequestThread(urls[i] + params[i].toString());
System.out.println("params[i]" + params[i].toString());

if(i == 0 && useProxy.equals("on")){
System.out.println("D*[BaseMapContents].doGet: use proxy host["+proxyHost+":"+proxyPort+"]");
rth[0].setProxy(proxyHost, proxyPort);
}
thd[i] = new Thread(rth[i]);
>>103の、少し飛ばした後の続きです。処理内容と「RTH」について教えてください
コマンドライン引数を受け取って、それが one ならスペイン語の uno 、
two なら dos ・・・と変換するプログラムを作成せよ。
変換処理は静的メソッドを用いること。
というプログラムなんですが、コンパイル・実行可ですが
引数をoneにしてもInvalid argumentのメッセージが帰ってきます。。。
どうぞ宜しくお願いします。

public class OneToUno {
 String s;
 OneToUno(String ss) {
  s = ss;
 }
 static void conversion(String s) {
  if( s == "one" ) System.out.println(s + " is \"uno\"");
  else if( s == "two" ) System.out.println(s + " is \"dos\"");
  else if( s == "three" ) System.out.println(s + " is \"tres\"");
  else if( s == "four" ) System.out.println(s + " is \"quatro\"");
  else if( s == "five" ) System.out.println(s + " is \"cinco\"");
  else System.out.println("Invalid argument.");
 }
}

class OneToUnoMain {
 public static void main(String[] args) {
  OneToUno otu = new OneToUno(args[0]);
  OneToUno.conversion(otu.s);
 }
}
>>152
もう、読んだままだな。
ある URL で表されるリソースから SVG データを取り出すのであろう。
必要ならプロクシを介するのでサーバとポートの設定をする。
名前が "〜Thread" となっているが、Thread の引数になっているから、
実際は Runnable の実装なだけかもしれない (Thread も Runnable だけど)。
SVGRequestThread の中身がなきゃこれ以上分かるわけない。

もっとロジックっぽいとこ貼ってくれよ。といってもどこがそうだか分かるわけもないか。
映画のワンシーンだけ見せられても、そのシーンの台詞を翻訳するぐらいはできるが、
映画全体のあらすじや、登場人物の位置付け、全体に対してそのシーンが担う役割までは説明できない。できっこない。
そういう話なんだが。やったとしても憶測。ほとんど口から出任せ。

新人研修で「読んで来い」って言われて読んでるの?
>>153
s == "one"の部分をsequals( "one" )と言った風に全部変えろ
>>153
== は同じインスタンスかどうかを判定する。
実行時にコマンドラインからやってくるものと、
ソースにはじめから書いてあるもの(リテラルという)は、違うインスタンス。だから false になる。
文字の並び方が同じかどうか調べるには、equals メソッドを使うこと。

例:
new String("one") == new String("one") // false
new String("one").equals(new String("one")) // true
new String("one").equals("one") //true
"one".equals("one") // true
"one" == "one" // true. まったく同じリテラルは、
//コンパイル・実行時に効率化が図られ、同じインスタンスを表すから。

なお、オブジェクト型の変数で == を用いるメリットはあんまりない。
各クラスの equals メソッドの中では、最低限 == 判定もやってて、
かつ上記の例のように「中身」も同じかどうかの判定をする、ってのが常。
だからとりあえず equals 呼んどけばいい。
== は「メソッド呼ぶわけじゃないから計算がはやい」ってなくらいのもの。
>>153
なんかキモチ悪いクラスですね
いかにもMapをつかってくれという問題だがな。
import java.util.HashMap;
public class OneToUno { 
  HashMap hashMap = new HashMap();
  public OneToUno() { 
    hashMap.put("one", "uno");
    hashMap.put("two", "dos");
    hashMap.put("three", "tres");
    hashMap.put("four", "quatro");
    hashMap.put("five", "cinco");
  } 
  public void conversion(String s) { 
    String ans = (String)hashMap.get(s);
    if(ans == null) System.out.println("Invalid argument.");
    else  System.out.println(s + " is \"" + ans + "\""); 
  }
  public static void main(String[] args) { 
    OneToUno otu = new OneToUno(); 
    otu.conversion(args[0]); 
  }
}
159122:04/07/13 20:59
いろいろありがとうございました。
runのスペルを間違ってしまうなんて情けないです…。

paint()の呼び出し頻度を尋ねたかといいますと、
うまく表せなかったのですが、先ほど書きましたように、run()メソッド内で行うべきであるような
内容を、paint()メソッド内に書き込んで、一定間隔(?)で実行させてるようなソースを見かけたので
そういうやり方もあるのかと思い質問しました。
>>159
paintが一定間隔で呼ばれるような仕組みを自分で作れってこった。
161ぽろじょあ ◆niBmDfC40k :04/07/13 22:30
( .3.) ヌェー 梅雨明け宣言だYO
>>155, >>156, >>158
どうもありがとうございます。
特に>>156さんの回答は明快で非常に参考になりました。
まだHashもMapも勉強してないので>>158さんの方法は無理ぽです。。。

ありがとうございました。
またよろしくお願いします。
163デフォルトの名無しさん:04/07/13 23:21
import java.io.*;
public class mondai {
public static void main(String[] args) throws Exception {
BufferedReadwe in =
new BufferedReader(new InputStreamReader(System.in));
System.out.print("input> ");
int i = (new Integer(in.readLine())).intValue();
while(i > 1) { i = i - 2; }
if (i == 0) {
System.out.println("Even.");
} else {
System.out.println("Odd.");
}
}
}

これを利用して
正の整数値x、yを入力し、「乗算演算子*を使わないで」xとyの積を計算し
出力させるプログラム
よろしくおねがいします
>>163
import java.io.*;
import java.math.*;
public class Mondai {
 public static void main(String[] args) throws Exception {
  BufferedReader in =
   new BufferedReader(new InputStreamReader(System.in));
  System.out.print("input x> ");
  BigInteger x = new BigInteger(in.readLine());
  System.out.print("input y> ");
  BigInteger y = new BigInteger(in.readLine());
  System.out.println("result:" + x.multiply(y));
 }
}
165デフォルトの名無しさん:04/07/13 23:39
import java.io.*;
public class reidai {
public static void main(String[] args) throws Exception {
BufferedReadwe in =
new BufferedReader(new InputStreamReader(System.in));
System.out.print("x> ");
int x = (new Integer(in.readLine())).intValue();
System.out.print("y> ");
int y = (new Integer(in.readLine())).intValue();
System.out.print("z> ");
int z = (new Integer(in.readLine())).intValue();
if(x > y) {
if(x > z) {
System.out.println("largest value = " + x);
} else {
System.out.println("largest value = " + z);}
} else {
if(y > z) {
System.out.println("largest value = " + y);
} else {
System.out.println("largest value = " + z);}}}
}

xとyの中で、大きい方の値を持つint型のメソッドmaxを作成し、それを用いた
プログラムに変更しなさい(等しい場合は、先の引数値とする)
メソッドの定義記述は
int max(int x,int y){}
お願いします
>>165
> 大きい方の値を持つint型のメソッドmaxを作成し

問題が不適切です。
ということを指摘するのが正解だとみた。
問題は適当に解釈しちゃだめだからな。
>>163
> int i = (new Integer(in.readLine())).intValue();

こんなん利用したくないよな。
parseInt使えよ、と。
169青島:04/07/13 23:56
すみません。。切羽詰っちゃってるので
連続投稿します;;

import java.io.*;
public class toi {
public static void main(String[] args) throws Exception {
BufferedReadwe in =
new BufferedReader(new InputStreamReader(System.in));
System.out.print("x> ");
int x = (new Integer(in.readLine())).intValue();
int y = x - 1;
boolean sose = true;
while(y > 1) {
if(x % y ==0) {sosu = false;}
y = y - 1;
}
System.out.println("sosu: " + sosu);
}
}
これを利用して
xが素数ならば、「素数です」そうでなければ「素数ではありません」と
画面に出力するメソッドsosuを作成し、それを用いたプログラムに変更しなさい
メソッドの定義記述は
void sosu(int x){}
170130:04/07/14 00:04
>>144
>>155
さん、ありがとうございます。
これを参考にがんばってみます。
171130:04/07/14 00:06
まちがえた。。。
>>144さん
>>150さん
ありがとうございます。
172青島:04/07/14 00:06
import java.io.*;
public class toi2 {
public static void main(String[] args) throws Exception {
BufferedReadwe in =
new BufferedReader(new InputStreamReader(System.in));
System.out.print("x> ");
double x = (new Double(in.readLine())).doubleValue();
double a = 0.0;
double b = x + 1.0;
while(b - a > 0.0000001) {
double c = 0.5 * (a + b);
if(c*c < x) { a = c; } else { b = c; }
}
System.out.println("value = " + a);
}
}

Mathクラスのメソッドを用いず、xの平方根を実数型で持つメソッドMysqrtを作成し、
それを用いたプログラムに変更しなさい
メソッドの定義記述は
double Mysqrt(int x){}
>>169
import java.io.*;
public class Sosu {
 public static void main(String[] args) throws Exception {
  BufferedReader in =
  new BufferedReader(new InputStreamReader(System.in));
  System.out.print("x> ");
  sosu(Integer.parseInt(in.readLine()));
 }
 static void sosu(int x){
  int y = x - 1;
  for(; y > 1 && x % y != 0; --y);
  String msg = "素数" + ((x % y) == 0 && y > 1 ? "ではありません" : "です");
  System.out.println(msg);
 }
}
ちなみに、ここの回答を利用する場合には、先生に
「あなたはもう少しJavaを勉強してください」
と付け加えること。
>>172
> xの平方根を実数型で持つメソッドMysqrtを作成し

問題が不適切です。
という指摘が正解のはずだ。
import java.io.*;
public class toi2 {
public static void main(String[] args) throws Exception {
Mysqrt(0);
}
double Mysqrt(int x){
BufferedReadwe in =
new BufferedReader(new InputStreamReader(System.in));
System.out.print("x> ");
double x = (new Double(in.readLine())).doubleValue();
double a = 0.0;
double b = x + 1.0;
while(b - a > 0.0000001) {
double c = 0.5 * (a + b);
if(c*c < x) { a = c; } else { b = c; }
}
System.out.println("value = " + a);
}
return 0;
}

Mysqrtの中に平方根持つからOKのはずだ。
しかし、明らかにJavaわかってない出題だなぁ。
やらされるほうも可哀想だ。
命名規則すら知らない時点でDQN教官。
東大にもいて困る。
出題がこれだから、授業内容もおそらくダメダメで、これではプログラムがどういうことかわかるはずがない。
質問なんですが
まずボタンを配置しまして、そのボタンをクリックすると
それまでイベントが全て初期状態にもどる、なんてのをやりたいんですが
どうすればよいでしょう?

ちなみに僕は物凄い初心者です
質問の意味がわからなかったらすみません
よろしくお願いします
>>180
> イベントが全て初期状態にもどる

わけわからん。
ボタンがどうの、はNetBeans使ってやれ。
>>181
ああ、やっぱわけ分かりませんか
何かが動いていて、その動きが最初からやり直しになるっていう・・・・
なんか日本語下手ですいません

NetBeansですね、調べてみます
レスありがとうございました
>>182
> 何かが動いていて、その動きが最初からやり直しになるっていう・・・・

そんなもん、やることによる。
ボタンの処理とかActionListerとか、自力で書くな。
ツールがやってくれる。
184デフォルトの名無しさん:04/07/14 01:13
>>153
> コマンドライン引数を受け取って、それが one ならスペイン語の uno 、
> two なら dos ・・・と変換するプログラムを作成せよ。
> 変換処理は静的メソッドを用いること。
それ「独習Java」まんまの問題じゃないか。
>>172
import java.io.*;
public class Toi2 {
 public static void main(String[] args) throws Exception {
  BufferedReadwe in =
  new BufferedReader(new InputStreamReader(System.in));
  System.out.print("x> ");
  int x = Integer.parseInt(in.readLine());
  System.out.println("value = " + Mysqrt(x));
 }
 double Mysqrt(int x){
  return StrictMath.sqrt(x);
 }
}
これが一番シンプルだな。たぶん正解。
186青島:04/07/14 08:59
皆様ありがとうございました
なんとかんりそうです;;
助かりました
>>182
やり直す前に、その「動き」を完結させるとこまで行ってるのか?
それが先だろ
それができたら、やり直せるような設計かどうか検討して、
必要ならなおして、そのあとで「やり直ししろ」の部分を設計
188ド素人:04/07/14 09:16
>>154
ありがとうございました。
「このソースを解析しろ」との命令が下っていまして。知識については名前どおりなものですから
何がなんだかサッパリです。
189デフォルトの名無しさん:04/07/14 09:52
3つの数字(int型)を入力し、大きい順に表示する
プログラムを作りなさい。ただし、途中で必ずfor文を使うこと。
すいません、これ教えてください!!
> コマンドライン引数を受け取って、それが one ならスペイン語の uno 、
> two なら dos ・・・と変換するプログラムを作成せよ。
> 変換処理は静的メソッドを用いること。
それ「独習Java」まんまの問題じゃないか。

>>184
そうです。独習Javaの課題です。
>>189
int size = 3;
ArrayList list = new ArrayList();
BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );
for ( int i = 0; i < size; i++ ) {
System.out.print("number"+i+":");
String num = reader.readLine();
list.add( new Integer( num ) );
}
Collections.sort( list );
Collections.reverse( list );

for ( int i = 0; i < size; i++ ) {
System.out.println( list.get( i ) );
}
192189:04/07/14 15:23
どもです!助かりまっす!

「式」を表す抽象クラスに,次のクラスを追加せよ.
乗算演算子を表すクラス.
除算演算子を表すクラス.
階乗(n! = 1 * 2 * ... n)演算子を表すクラス.
ただし,不正な計算(ゼロ除算や負の階乗)を含む式については,
エラーメッセージを表示して実行を停止するようにせよ.
// 「式」を表す抽象クラス
abstract class Exp {
abstract public int eval(); // 式の値を求めるメソッド
}

// 整定数
class Con extends Exp {
private int value;
public Con(int value) { this.value = value; }
public int eval() { return value; }
}

// 単項演算子のマイナス
class Neg extends Exp {
private Exp e;
public Neg(Exp e) { this.e = e; }
public int eval() { return -e.eval(); }
}
194193:04/07/14 15:33
// 加算
class Add extends Exp {
private Exp e1, e2;
public Add(Exp e1, Exp e2) {
this.e1 = e1;
this.e2 = e2;
}
public int eval() { return e1.eval() + e2.eval(); }
}

// 減算
class Sub extends Exp {
private Exp e1, e2;
public Sub(Exp e1, Exp e2) {
this.e1 = e1;
this.e2 = e2;
}
public int eval() { return e1.eval() - e2.eval(); }
}
「式」を表す抽象クラスで定義した各クラスでは,toString メソッドが定義されていない.
読みやすい形で式を表示できるように、「式」を表す抽象クラス及び追加した各クラスで,
toString メソッドを定義せよ.たとえば,次のようなテストプログラムに対して
// テストプログラム
class Test1 {
public static void main(String[] args) {
// (1+2) + 3
Exp e1 = new Add(new Add(new Con(1), new Con(2)), new Con(3));
System.out.println(e1 + " = " + e1.eval());

// -(1-2)-3
Exp e2 = new Sub(
new Neg(
new Sub(
new Con(1),
new Con(2))),
new Con(3));
System.out.println(e2 + " = " + e2.eval());

// (2 + 3)!
Exp e3 = new Fact(new Add(new Con(2), new Con(3)));
System.out.println(e3 + " = " + e3.eval());

// (5 / (3 - 3))
Exp e4 = new Div(new Con(5), new Sub(new Con(3), new Con(3)));
System.out.println(e4 + " = " + e4.eval());

}
}
次のような結果が得られるようにせよ.

((1 + 2) + 3) = 6
(-(1 - 2) - 3) = -2
(2 + 3)! = 120
Error: zero division
197デフォルトの名無しさん:04/07/14 15:48
天羽優子--------------gt;天羽苛子
http://pc5.2ch.net/test/read.cgi/prog/1084784737/
とりあえず Div 。出力結果を見る限り・・・これでいいのかなぁ。
それとも演算実行時かなぁ。わからん。
class Div extends Exp {
private Exp e1, e2;
public Div(Exp e1, Exp e2) {
if (e2.eval() == 0) {
System.err.println("Error: zero division");
System.exit(0);
}
this.e1 = e1;
this.e2 = e2;
}
public int eval() {
return e1.eval()/e2.eval();
}

public String toString() {
return "(" + e1 + " / " + e2 + ")";
}
}
Fact。
class Fact extends Exp {
private Exp e1;
public Fact(Exp e1) {
this.e1 = e1;
if (e1.eval() < 0) {
System.err.println("Error: 負の階乗");
System.exit(0);
}
}
public int eval() {
int f = 1;
for (int i=2; i<=e1.eval(); i++) {
f *= i;
}
return f;
}
public String toString() {
return e1 + "!";
}
}
Con, Neg, Add, Sub の toString は、Div の例を参考にして自分でやってみそ。
ただし Con のメンバは int なので、"" + value などとして String に変換すること。
年月を入力させ、指定した月のカレンダーを表示するプログラムを作成せよ。
というのをお願いします。
>>200
BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );
System.out.print( "年を入力しる:" );
int year = Integer.parseInt( reader.readLine() );
System.out.print( "月も入力しる:");
int month = Integer.parseInt( reader.readLine() )-1;

Calendar cal = Calendar.getInstance();
cal.set( Calendar.YEAR, year );
cal.set( Calendar.MONTH, month );
cal.set( Calendar.DAY_OF_MONTH, 1 );

System.out.println( year + "年" + (month+1) +"月" );
System.out.println( "Su Mo Tu We Th Fr St" );

Calendar c = Calendar.getInstance();
c.set( Calendar.DAY_OF_WEEK, Calendar.SUNDAY );
for ( ; c.get( Calendar.DAY_OF_WEEK ) != cal.get( Calendar.DAY_OF_WEEK ); c.add( Calendar.DAY_OF_WEEK, 1 ) ) {
System.out.print( " " );
}
while ( cal.get( Calendar.MONTH ) == month ) {
if ( cal.get( Calendar.DAY_OF_WEEK ) == Calendar.SUNDAY ) {
System.out.println();
}
if ( cal.get( Calendar.DAY_OF_MONTH ) < 10 ) {
System.out.print( " " );
}
System.out.print( cal.get( Calendar.DAY_OF_MONTH ) );
System.out.print( " " );
cal.add( Calendar.DAY_OF_MONTH, 1 );
}
System.out.println();
202200:04/07/14 18:11
>>201
素早いレスありがとうございました。
ハノイの塔の解法を表示するプログラムを作成しなさい。

ハノイの塔とは、一番左の棒をA、真ん中の棒をB、一番右の棒をCとし、Aにはn枚の円盤が置いてあり、
棒Bを利用して全ての円盤をAからCに移すパズルである。

・一回に一枚の円盤しか動かしてはいけない。
・移動の途中で円盤の大小を逆に積んではいけない。常に大きい方の円盤が下になるようにする。
・棒以外のところに円盤を置いてはいけない。

これをお願いします。
204デフォルトの名無しさん:04/07/15 00:21
ハノイって、普通にプログラムすると再帰になるから、Javaだと
スタック消費しまくっちゃうな。まあループにすりゃいいんだけど。

出題したセンセイは、綺麗な再帰で書かせたい?
それとも、ベタに状態変数変更しながらループで書かせたい?
メリットデメリットの説明くっつけて両方書いたら点数上がるかもよ。
205203:04/07/15 00:37
 n枚の円盤をBに移すとき、(n-1)枚の円盤を移動する方法が分かっていたとすれば、(n-1)枚の円盤をAからCに移動しておいて、n番目の円盤をAからBに移動し、
 Cにおいてあった(n-1)枚の円盤をBに移せばよい。
 nが1の時には、そのままその円盤を移動すればよい。
 移動の手順を表示するメソッドをhanoi(n,From,To,Via)とする。nは円盤の枚数、
 FromからToへ移動し、もうひとつの場所をViaとするとき、 Hanoi(n,From,To,Via)は

 n>1のとき
 Hanoi(n-1,From,Via,To)
 n番目の円盤をFromからToへ移動する。
 Hanoi(n-1,Via,To,From)
 n=1のとき
 1番目の円盤をFromからToへ移動する。
 とすればよい。
 
 ここでは、nをキーボードから入力し、n枚をAからBへCを利用して移動するステップを表示するプログラムを作成せよ。

こんな感じなんですが…。
アウトプットが美しくないから、この問題やりたくない。
二次元のひし形はどうやってつくるんでしょうか?
>>207
drawRect
>>207
Polygon
>>207
&diams;
chatとチェスが2PC間でできるserver とclientを使ったプログラムコードをjavaでかいてください><;
>・GUI 関係などは基本的に放置
簡単なトランプゲームの課題です。どうかよろしくお願いしますm(_ _)m
ランプのカードのクラスCardを定義せよ。インスタンスフィールドとしてはスーツ(Clubs, Diamonds, Hearts, Spades)
を表すint型の変数suitと1から13までの数を表すint型の変数numberを持つものとする。スーツと数を指定して
Cardのインスタンスを作るコンストラクタを書け。"スペードの5"のような形の文字列を返すメソッドtoString()を書け。
ただし、1、11、12、13はそれぞれ、エース、ジャック、クイーン、キングという文字列にすることとする。
一組のカード(52枚)を表すクラスCardDeckを定義せよ。インスタンスフィールドとしては、Card型の配列deckを持つものとする。
コンストラクタで52枚のカードを作ってその配列に入れることにする。
カードデックから1枚のカードを引くメソッドdealを作れ(乱数を使って52枚から1枚を選ぶ。
214213(2):04/07/15 20:05
一度引かれたカードがまた引かれないように、引かれたカードの後にはnullを入れておく。
nullはそこにないも入っていないことを表す。変数aにnullを代入するには a = null;
とし、aがnullであるか調べるには if ( a == null) ... とすればよい。
一度引かれたカードがまた引かれないようにするもう一つの方法はカードデックを
作ったときにそれをシャッフルしておくことである。引くときには、それから順番に出していけばよい。
シャッフルはたとえば、0 <= i < 52に対して乱数で整数0 <= j < 52を作り、
i番目とj番目のカードを交換すればよい。)
mainメソッドでカードを5枚引いてそれをプリントしてみよ。
ポーカーの役はできているか。(mainメソッドはもうひとつ別のクラスを作ってそこに書いてもよいし、
クラスCardDeckの中に書いてもよい。)
215213(3):04/07/15 20:06
 ポーカーでは、5枚のうち何枚かを1度だけ引きなおすことができる。
最初に引いた5枚はCardの長さ5の配列に入れておき、そのうちの何枚かを
引きなおすことができるようにせよ。
(5枚のそれぞれについて、引きなおすかどうかを聞き、イエスと答えたカードだけ引きなおし、
最後に5枚をプリントする。)

長文失礼しました。どうかよろしくお願いします。
217213:04/07/15 22:52
>>216
ありがとうございます 助かりました〜。
参考にさせてもらいますm(_ _)m
むむむ〜、C言語ですが似たような課題ですね;
>>195
のConの toString の仕方だけがわからないです、お願いします教えてください。
>>218
自明。というか
>>198
でもまぁ。
public String toString() { return(""+value);}
>>218
// 整定数
class Con extends Exp {
private int value;
public Con(int value) { this.value = value; }
public int eval() { return value; }
public String toString() { return (""+value);}
}
でコンパイルしようとすると、変な文字化けが出てコンパイルできないのです。
他のNeg、Add、SubなどのtoStringはコンパイルできたのですが・・・、
自分のJava環境によるものなのでしょうか?
ここ見てると、クソみたいな出題がおおいんだが、「これは」という良い問題、あったら晒して欲しい。
>>218
Windows 環境かな?
Windows 上からだと Con.* というファイル名は作れません。
他の環境だったら作れますけが・・・・・。

別の環境でコンパイルするか、別名にしてみましょう。
>>222
別の名前にしたら出来ました!ありがとうございます。
問題つくった先生のPCがMacだったのを思い出しました。
>>223
めずらしい問題にぶちあたったね。
俺、DOS 時代からのユーザのくせにわかんなかった。
次のうち継承の関係にあるのはどれか
1家ードア 2人間-学生 3学生ー教員 4車ータイヤ
よろしく御願いします。
>225
一つも無い。
一見、2がそうであるように見せているが、人間でない学生(例:マルチ)が
十分考えられるためこれは違う。
学生というのは単なる属性だからな。
学生としてうまれて、一生学生のままでいる人間はいない。
228デフォルトの名無しさん:04/07/16 13:29
定期試験の問題なんですが…

intx[]=[50,150,221];inty[]=[50,60,90];
drawPolyline(x,y,3);で描く折れ線の長さの値を0.1%以内の
誤差で書け
229228:04/07/16 13:39
もう1問あって

a0=a1=1,ak=a(k-1)+0.5a(k-2),k=2,3,…,101
としたとき、a101の値を0.1%以内の誤差で書け

よろしくお願いします。授業ではjBuilder使うんですが、
教官が一人で勝手に授業進めて全然わからないんです(つД`)

どっちも単純な数式をJavaで書き直すだけなんですけど・・・
231228:04/07/16 15:12
>>230すいません。それすらわからんのですよ・・・
( .3.) ヌェー 2chやる以前にやることがありそうだNE
授業でわからなかったら、質問して聞けよ。
質問に答えない教官はクズ。
「おら、みんなの前で質問するのはんずかしいだ」ってんなら授業終わった後聞きに行けよ。
234228:04/07/16 15:30
jBuilderで色々手引き通りやってみるんですが
エラーばっかりで答えが出ないんですよ。
もう授業終わってるし、定期試験の問題を質問しにいくわけには
いかないかと思いまして・・・
>229

import java.math.*;

public class Q229 {
private static final BigInteger TWO = new BigInteger("2");
public static void main( String args[] ) {
BigInteger ak1Numer, ak2Numer, akNumer, denom;
int i;
for( i = 2, akNumer=BigInteger.ONE, ak1Numer = BigInteger.ONE, ak2Numer = BigInteger.ONE, den\
om = BigInteger.ONE; i <= 4; ++i ) {
// a(k) = a(k-1) + 0.5a(k-2)
// 2ak = 2a() + a()
akNumer = ak1Numer.multiply(TWO).add( ak2Numer );
denom = denom.multiply(TWO);
ak2Numer = ak1Numer.multiply(TWO);
ak1Numer = akNumer;
}
System.out.println( akNumer + "/" + denom );
}
}
どんなコードでどんなエラーよ?
237235:04/07/16 15:32
おっと、muleからコピペした時にちょっとミスった。
×for(..., den\ om=...
○for(..., denom=...
238228:04/07/16 15:42
早速コピペさせてもらいました。ありがとうございます。
for( i = 2, akNumer=BigInteger.ONE, ak1Numer = BigInteger.ONE, ak2Numer = BigInteger.ONE, deno
この行の部分でですね、「ステートメントではありません」というエラーと
「,が必要です」というエラーが出るんですが・・・
ご教授できればよろしくお願いします
239235:04/07/16 15:44
ただで単位が取れるほど世の中甘くない。
自分で考えろボケ
こんぐらいも直せないようじゃ(ry
またはそのままコピペ丸出しで提出しる
RPGのキャラクタークラスを考えよう.いま,このゲームには,次のような4種類のキャラクターがいるとする.

普通の人間
戦士:武器が使える
魔法使い:魔法が使える
魔法戦士:武器と魔法の両方が使える
このようなキャラクターを持つゲームプログラムをJavaで作成する場合,
クラス階層及びインタフェース間の関係をどのようにすればよいだろうか?
各自が考えたクラス及びインタフェースの構造について,そのようにした理由を説明すると共に,
簡単なサンプルプログラムを作ってみよ.
ほんとは235が間違っただけだろうけどね
>>241
ほんとうにわからないの?
考えてない&調べてないだけじゃない?
わかったとこまで書いてみてよ。
class Human{}
interface WeaponUser{}
interface MagicUser{}
class Warrior extends Human implements WeaponUser{}
class Mage extends Human implements MagicUser{}
class MagicWarrior extends Human implements WeaponUser,MagicUser{}
できてんじゃん
この顔文字→( ゜3゜)の人、見なくなったな
>>244
それだと中身が無いから実際には、こんな感じかな?
魔法が使える人に関しては自分で考えてみ。

class Human{
int hp;
int mp;
int maxhp;
int maxmp;

Human(int mhp,int mmp){
maxhp=mhp;
hp=mhp;
maxmp=mmp;
mp=mmp;
}

void damage(int d){
hp-=d;
if(hp<0)hp=0;
}

void heal(int h){
hp+=h;
if(hp>maxhp)hp=maxhp;
}
}
248247:04/07/18 14:12
interface WeaponUser{
public int useWeapon();
}

interface MagicUser{}

class Warrior extends Human implements WeaponUser{
Warrior(int mhp){
super(mhp,0);
}

public int useWeapon(){
return(10);
}
}
class Mage extends Human implements MagicUser{
Mage(int mhp,int mmp){
super(mhp,mmp);
}
}
class MagicWarrior extends Human implements WeaponUser,MagicUser{
MagicWarrior(int mhp,int mmp){
super(mhp,mmp);
}

public int useWeapon(){
return(5);
}
}

『継承とポリモアフィズムを効果的に使ったプログラムを作成しなさい。
内容は何でも構いません。但し、拡張性を考慮しなさい。(とってつけたようなポリモアフィズム
はいけません)』
という課題が出ていて、ネットで探しているんですが、いまいち見つかりません。
拡張性というのが分からず、苦戦しています。
どうか宜しくお願い致します。
なんつーか、ネットで探しているという時点でもう・・・ね。
継承とポリモルフィズムについては理解しているのか?
ちょっとぐぐってみたんだが、
 ポリモーフィズム の検索結果 約 2,180 件
 ポリモルフィズム の検索結果 約 849 件
 ポリモフィズム の検索結果 約 1,070 件
 ポリモアフィズム の検索結果 約 42 件

"ポリモアフィズム"ってどこの用語だ?
>>249 のセンセーか >>249 自身のオレ用語でしょ。
polymorphism → ポリモアフィズム
ほかにも constructor → コンストラクトア compiler → コンパイレア
とか書いてるんだろうよ
finalizer → ファイナライゼア
NullPointerException → ぬるぽインテアエクセプチオン
>>254
がっ
256デフォルトの名無しさん:04/07/22 16:35
それぞれJava言語を用いてプログラムすること.

課題1
約10000個の値を格納するハッシュ表を作りたい.オープンアドレス指定法を
用いてハッシュ表を構成し,ハッシュ関数の違いによって実行時間が
どのように変わるのか,性能を比較せよ.それぞれの値は乱数で
発生させた自然数とし,ハッシュ表への挿入と探索のみを考え,
削除は考えなくてよい.

課題2
与えられた要素の中のi番目の数を求めたい.
クイックソートを用いた場合と,10.2節の平均線形時間の選択法,
または10.3節の最悪線形時間の選択法を用いた場合とで,
性能を比較せよ.(10.2節,10.3節のどちらか一方で構わない.)

課題3
ポインタを用いずに連結リストを実現し,簡単な使用例を示せ.


お願いしますm(_ _)m
257インスタント:04/07/22 16:39
麻雀の4人打ちで、ネットワーク対戦のできるようなものつくれませんか?
258デフォルトの名無しさん:04/07/22 17:54
ttp://www.gazo-box.com/wisecrack/src/1090485932185.jpg
↑のクラス図をJAVAコードにしてください!
よろしくお願いします^^
>>257
つくれます。
>>256
Javaの問題なのに「ポインタを用いずに」というところがクソだな。
>>258
さすがにそんくらいは自分でやれ
そりゃそうだ。
263izawa:04/07/22 23:37
>>258
class Factory{
int x;
void int(){
}
}

class Concrereclass{
void set( int x) {
}
}

これでいいですか?
>>263
だめ。ゼッタイ。
・・・
258の問題教えてください。御願いします。
>>266
あなたの目は節穴ですか?
268デフォルトの名無しさん:04/07/23 01:22
3次間数を表示するプログラムを作成してください
System.out.print("3次間数");
>>256
課題1
class myhash{
Object[] list;
int size;
myhash(){
size=20000;
list=new Object[size];
Arrays.fill(list,null);
}
void add(Object o){
int index=Math.abs(o.hashCode())%size;
while(list[index]!=null){
index++;
if(index>=size)index=0;
}
list[index]=o;
}
Object search(Object o){
int index=Math.abs(o.hashCode())%size;
while(list[index]!=null){
if(list[index].equals(o))return(list[index]);
index++;
if(index>=size)index=0;
}
return(null);
}
}
271270:04/07/23 10:12
>>256
デバッグしてないからよろしく

10.2 節と10.3 節のアルゴリズムをざっとでいいから書いてよ。
話はそれから。

課題3 は 260 じゃないけど、やる気がしない。
まぁ領域を配列に確保し、次の要素へのインデックスも格納しておく。
とかでやればいいんだけど。ねぇ。
>>271
結局、配列からインスタンスへの参照はポインタだしな。
(正確にはポインタじゃないけど出題者の"ツモリ"から言えば)
リスト構造そのものを構築せよということであってそれ以外は不問ということなのかもしれないが、
舌足らずもいいとこだな。
こーゆーダメな教育者がダメプログラマを育てるんですか?
でもこんな教育受けてちゃプログラマになんかならないか。
いやしかし2ちゃん見てるとそれでもやっていけるっぽいし・・・
274デフォルトの名無しさん:04/07/23 13:50
>271 
課題1についてありがとうございます。
一応資料UPしました。

<資料>
http://jp.y42.briefcase.yahoo.co.jp/matusitapdf
ここのマイ・ドキュメントの
「kougi.rar」に資料があります。
275sage:04/07/23 13:54
<クイックソート>
/*
* 軸要素の選択
* 順に見て、最初に見つかった異なる2つの要素のうち、
* 大きいほうの番号を返します。
* 全部同じ要素の場合は -1 を返します。
*/
int pivot(int[] a,int i,int j){
int k=i+1;
while(k<=j && a[i]==a[k]) k++;
if(k>j) return -1;
if(a[i]>=a[k]) return i;
return k;
}

/*
* パーティション分割
* a[i]〜a[j]の間で、x を軸として分割します。
* x より小さい要素は前に、大きい要素はうしろに来ます。
* 大きい要素の開始番号を返します。
*/
int partition(int[] a,int i,int j,int x){
int l=i,r=j;

// 検索が交差するまで繰り返します
while(l<=r){

// 軸要素以上のデータを探します
while(l<=j && a[l]<x) l++;

// 軸要素未満のデータを探します
while(r>=i && a[r]>=x) r--;
276sage:04/07/23 13:54
<続き>
if(l>r) break;
int t=a[l];
a[l]=a[r];
a[r]=t;
l++; r--;
}
return l;
}

/*
* クイックソート(再帰用)
* 配列aの、a[i]からa[j]を並べ替えます。
*/
public void quickSort(int[] a,int i,int j){
if(i==j) return;
int p=pivot(a,i,j);
if(p!=-1){
int k=partition(a,i,j,a[p]);
quickSort(a,i,k-1);
quickSort(a,k,j);
}
}
/*
* ソート
*/
public void sort(int[] a){
quickSort(a,0,a.length-1);
}
で?
すまん、質問かとオモタ。
279デフォルトの名無しさん:04/07/23 22:10
教えて下さい優しい人!
javaのMath.random()を使って10.0〜190.0の値をランダムで出したいのですがどうすればよろしいでしょうか?
それ以外の値が出たら取り直す
281270:04/07/23 22:21
>>256
10.2
pivot , partition は自分で書いたの使ってね。
public int find(int[] a,int i,int j,int rank){
if(i==j) return(a[i]);
int p=pivot(a,i,j);
if(p!=-1){
int k=partition(a,i,j,a[p]);
if(k-i>rank){
return(find(a,i,k-1,rank));
}
else{
return(find(a,k,j,rank-k+i));
}
}
else{
return(a[i]);
}
}

>>279
180.0*Math.random()+10.0
282279:04/07/23 22:23
(´Д⊂ ありがとうございました
>>283
それだと時間かかる
そりゃ無限ループだもんな
ワロタ
286デフォルトの名無しさん:04/07/24 00:11
Webページに公開されてるアルゴリズムコピペする馬鹿発見。
287デフォルトの名無しさん:04/07/24 00:19
誰かportletやjsr168について詳しい方いますか?
288デフォルトの名無しさん:04/07/24 00:21
どうやったらportletで開発すればいいかわかんないっす。
289デフォルトの名無しさん:04/07/24 00:27
「portletで開発」っていう日本語があってるかどうかもよくわからんのですけどね

tomcatみたいなサーブレットコンテナがあるのでしょうか?

apache plutoってのがそれなんですかねえ…

ウェブスフィアやウェブロジックみたいな統合開発環境ではすでにjsr168のをとりこんでみるみたいなんですけど…

290デフォルトの名無しさん:04/07/24 02:06
JBoss3.2.0が使っているJetty4.2.9は、HttpServletRequest#setCharacterEncoding()に
問題があって、日本語が文字化けする、というのを本で見かけたのだが、
具体的にどの文字が化けるかとか、知りませんか。

いわゆる、Web系でNGな丸付き数字とかは別として。
「このサイトを見ろ」でもいいので・・・

教えてくんで、すまそ。
291デフォルトの名無しさん:04/07/24 17:46
課題がわからないので質問します

public class Ripple {
public static void main(String args[]) {
int ncell=75 ;
int i,j,k,left,right ;
int dcell[]=new int [ncell] ;
int odcell[]=new int [ncell] ;
for(i=0;i<ncell;i++) {
dcell[i]=0 ;
odcell[i]=0 ;
}
int ngeneration=ncell ;
dcell[0]=1;
dcell[1]=2 ;
dcell[ncell-2]=2 ;
dcell[ncell-1]=1 ;
for (i=0;i<ncell;i++) {
if(dcell[i]==0) System.out.print(' ') ;
if(dcell[i]==1) System.out.print('#') ;
if(dcell[i]==2) System.out.print('*') ;
}
System.out.println();
for(i=0;i<ncell;i++) {
odcell[i]=dcell[i] ;
}
}
}
292デフォルトの名無しさん:04/07/24 17:48
(続き)

さてこのプログラムに続きを作ります。最後ののfor文のあとに(つまり下から2行目と3行目の間に)以下のシナリオで示す通りのプログラムを付け加えてください。

1. 以下のことをngeneration-1回繰り返す
    1. 以下のことをi=0からi<ncell繰り返す
        1. 1世代(generation)前のdcell[i]を参照する。その左の(i-1)のcell値(left)と右の(i+1)cell値(right)を足す。もしi=0なら左のcell値は0(left=0), 同じようにもしi=ncell-1であるなら右のcell値は0(right=0)とする。
        2. そのときの中央の(i)のcell値に応じて(それをpivotと呼ぼう)、以下のように次の世代のcell値(i)を決める。
          pivot値が0で、 left+right値が2以上なら、それは2とする、そうでなければ(left+right値が 2より小なら)0とする。
          pivot値が1ならどんな場合でも次世代cell値は0、
          pivot値が2でleft値あるいはright値が0である限り次世代cell値は1、そうでなければ(pivot値が2であっても)次世代cell値は2
    2. 上の例のようにcell値に応じて文字を出力(i=0,i<ncell)、行末に改行を挿入。
    3. cell配列の世代交代をする。
2. なにも後始末せずに終了。
自分なりに考えたつけたしの部分です。
実際起動してみると、空白の行ばかりになってしまいます。
初めて半年も経っていないので、あまり分かってない上
おかしな部分もありますし、全然スマートにできていませんがすみません。
どこがおかしいか教えていただきたいです。

for (j=0;j<ngeneration;j++) {
for(i=0;i<ncell;i++) {
right=0 ;
left=0 ;
if(i==0) {
left=0 ;
} else if(i==ncell-1) {
right=0 ;
} else {
dcell[i-1]=left ;
dcell[i+1]=right ;
}

(続く)
294デフォルトの名無しさん:04/07/24 17:55
(続き)
if(dcell[i]==0 && left+right>=2) {
odcell[i]=2 ;
} else if(dcell[i]==0 && left+right<2) {
odcell[i]=0 ;
} else if(dcell[i]==1) {
odcell[i]=0 ;
} else if(dcell[i]==2 && left==0 || right==0) {
odcell[i]=1 ;
} else {
odcell[i]=2 ;
}
}
for (i=0;i<ncell;i++) {
if(odcell[i]==0) System.out.print(' ') ;
if(odcell[i]==1) System.out.print('#') ;
if(odcell[i]==2) System.out.print('*') ;
}
System.out.println();
for(i=0;i<ncell;i++) {
odcell[i]=dcell[i] ;
}
295219:04/07/24 18:13
解決しました
長文で汚してすみませんでした
219から295はぜんぶ同一人物の長文って解釈でOK?
297デフォルトの名無しさん:04/07/24 20:47
Yahoo!オークションの詳細な残り時間アプレットのそすクレ
クラスファイルを盗ってきて逆コンパイル
最後の方の授業に出てなかったのでJAVAの問題が全く分かりません…。
どなたかご教授願えないものでしょうか(;´Д`)

@<input>要素を2つ作成する。   

A 作成した<input>要素に「onClick」イベントハンドラー名を追加する。
イベントハンドラーとして関数を用いる。

B関数を用いて「Liquid Layout」のヘッダー部のスタイルを変更する。
<input>要素をクリックすることにより、次のスタイルを変更する。
background-colorを変更する。
borderにスタイルを与える(border-style, border-colorなど)

Cもう一方の<input>要素をクリックすることにより、
ヘッダー部のスタイルを元に戻す。                           

300299:04/07/25 00:27
問2

@ メニュー部の<div>要素に「onMouseOver」と「onMouseOut」  
イベントハンドラー名を追加し、イベントハンドラーとして関数を用いる。
なお、関数へのオブジェクトの引渡しは「this」を用いる。

A カーソルがメニュー部に乗るとメニュー部の「background-color」
と「color」を変更する。
                      
B カーソルがメニュー部を離れるとスタイルを元に戻す。          
301299:04/07/25 00:33
このHTMLに↑のJAVAを組み込めとのことなのですが…。

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta name="robots" content="noindex,nofollow">
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>Three Column Layout</title>
<link rel="stylesheet" href="../sample.css" type="text/css" />
<style type="text/css">
<!--
#header { width: 100%; height: 5%; text-align:center;
background-color: #eeeeee; color: #333333;
}
#menu-col { width: 25%; height: 95%; float: left;
background-color: #c0c0c0; color: #333333;
margin-top: 5px; margin-right: 5px;
padding: 1em;; border: 0;
}
#content-col { height: 95%; border-width: 0 0 0 0;
margin-top: 5px; padding: 1em;
background-color: #fffabc; color: #333333;
}
-->
</style>
</head>
302299:04/07/25 00:34
<body>
<div id="header"><h1 class="h1pos">サンプル番号(sample110)</h1></div>
<!-- Begin the menu Column -->
<div id="menu-col">
<h2 class="h2color">サーチエンジン</h3>
<div>
<ul>
<li><a href="http://www.google.co.jp/"/>Google</a></li>
<li><a href="http://www.google.co.jp/"/>Yahoo</a></li>
<li><a href="http://www.infoseek.co.jp/"/>Infoseek</a></li>
</ul>
</div>
</div>
<!-- Begin the Content Column -->
<div id="content-col">
<h2 class="h2color">内容の表示</h2>
<div>
<p>Liquid Layout Exampe</p>
</div>
</div>
</body>
</html>
えっと、これをJAVAといってしまっている以上は

> 最後の方の授業に出てなかったので

ではなくて、最初の方の授業も、真中あたりの授業も出てなかったとしか思えない。
とりあえず、スレ違い。
再履修せろ。
こういうことを授業で(しかも最後のほうで)やるっていうのもどうかなぁ
デザイン学科ででもやってるのかな?
こんな半端なレベルなら いっそやらない方がよろしい
どうしようもないですな
また Java と JavaScript の区別がつかないヤシが出てきたな
>>304
高校の宿題とかじゃないの?
308デフォルトの名無しさん:04/07/25 22:09
53の階乗を正確に計算して出力するjavaプログラムを作りたいのですが、
教えてくれる友人がいないので助けてください。
アルゴリズムは、一桁分の数を記憶するオブジェクトを多数作り、それらの協調で
計算を進めていきます。
例題のプログラムをラウンジのソースを置くスレ268に置きましたので参考にしてください。
ラウンジとか行くのマンドクセ
BigInteger使ったらあかんの?
import java.math.*;

public class Q304{
public static void main(String args[]){
BigInteger bi=new BigInteger("1");
for(int i=1;i<=53;i++)bi=bi.multiply(new BigInteger(""+i));
System.out.println(bi);
}
}
>>312
BigInteger#valueOf使え。
314デフォルトの名無しさん:04/07/25 23:39
入力値が全角カナかそれ以外かを判断するソースの書き方を教えてください。
boolen manaKana(入力値 n) {
return (n == 全角カナ);
}
>>314
boolean hoge(String str){
 for(int i = 0; i < str.length(); ++i){
  if( "アイウエオ・・・".indexOf(str.substring(i,i + 1)) >= 0) return true;
 }
 return false;
}

public static final String zenkakukana = "アイウエオ(ry";

public boolean isZenkakuKana(String str) {
 for (int i = 0; i < str.length(); i++) {
  if (zenkakukana.indexOf(""+str.charAt(i)) < 0) {
    return false;
  }
 }
 return true;
}

/*
かなりの糞コードかもしれんが
*/
static忘れた
319デフォルトの名無しさん:04/07/25 23:56
>>かなりの糞コードかもしれんが
クールなコードってどんなのですか?
全然想像できないので、宜しくおねがいします。
>>319
文字コードの範囲で判断
検索に対数オーダーなら cool
>>320
それそれ。
317書くのにStringのAPIマニュアル見てる漏れじゃ手に負えん。
マジレスすれば、Map使う。
もっとマジレスすれば、IBMのライブラリ使う。
324Cooooooool!:04/07/26 00:17
return str.matches(".*[アイウエオ(ry].*");
マジレスすれば,全角カナとか使わない.
>>323
Map使ったソースきぼん テヘッ
return str.matches(".*[ア-ョ].*");
最初と最後の文字が分からんけど、こんなんはできへんのか?
return str.matches(".*[ァ-ヶ゛゜].*");
>>326
判定だけならSetだった。

Set kana = new HashSet();
kana.add("あ");
kana.add("い");
以下略

 for(int i = 0; i < str.length(); ++i){
  if( kana.contains(.str.substring(i,i + 1))) return true;
 }
 return false;

実際には、全角→半角変換用にMap使っておくんだけど。
330Overlapped!:04/07/26 00:27
OTZ
>>329
それはダサい例か?
kana.add("あ");
kana.add("い");
以下略

↑これはめちゃくちゃダルい気がするのだが、どうかね。
文字列の方がエレガントな気がしないわけではないと言えなくもない。
333It solved! HA! HA!:04/07/26 00:44
kanas = "アイウ(ry";
kana = new HashSet();
for (char c : kanas.toCharArray()) {
kana.add(Character.toString(c));
}
>>332
とりあえず、実行効率考えれば、単純な比較は やってられん。
Setの用意は、好きにすれ。
っていうか、自分で組まずに、IBMのライブラリ使え。
java.lang.Character.UnicodeBlock.KATAKANA.of(対象文字c)
は使えないのん?
336335:04/07/26 14:30
なんか間違えまくってるな。(実は板も一度間違えた)

Character.UnicodeBlock.of(対象文字) == Character.UnicodeBlock.KATAKANA
で。
スレだろ
>>336
いろいろなことを考えると、使えなかった。
結局変換がからんだりするし。
339308:04/07/27 09:53

すみません、BigIntegerまだ習ってないので、使わないでください。
習ってないからって、またアホな物言いだな。
小学生が鶴亀算を連立方程式で解いたら「まだそんなの習ってないでしょ」って先生に怒られるみたいな感じか?
53! を求めるのが目的じゃなくて、
多倍長整数計算を実装するのが目的でしょ?
BigInteger使ったら簡単過ぎて問題にならないし。
習ってないからじゃなくて、知ってても使うべきじゃない。
>>339
1桁の数を記憶するクラスを作ることまでわかってるのに
なんでその先がわからないんだ?

掛け算の筆算をするときに各「桁オブジェクト」で起こりうる現象を列挙してみなさい。
たとえば、ある桁オブジェクトの数に他の桁オブジェクトの数を掛けたとき、
10以上になったら「繰り上がり」を考えなきゃいけないよな?
343339:04/07/27 11:56
3桁の数 a3a2a1 と1桁の数 b1 を掛けて数 c4c3c2c1 が得られる手順を考えると。

まず a1 * b1 を計算して「一の位」と「それ以上の位」に分解すると
  a1 * b1 の「一の位」は c1 の値(c1 が確定)
  a1 * b1 の「それ以上の位」は c2 への繰り上がり
次に a2 * b1 を計算して「一の位」と「それ以上の位」に分解すると
  a2 * b1 の「一の位」+「c2 への繰り上がり」は c2 の値(c2 が確定)
  a2 * b1 の「それ以上の位」は c3 への繰り上がり
次に a3 * b1 を以下略

上の処理を一般化すると1桁の数を掛ける処理がわかるので、
それをさらに一般化して何桁の数を掛けてもちゃんと処理できるようにする。
344339:04/07/27 11:59
ちなみに、複数桁の数を掛けた場合、
「○○への繰り上がり」自体が10より大きくなることがあることに注意。
実際に下からの繰り上がりとしてプラスする数は、その繰り上がりの一の位の数だけだからな。

ここまで言えばもうコーディングするだけだね。
345デフォルトの名無しさん:04/07/27 13:57
>一桁分の数を記憶するオブジェクトを多数作り、それらの協調で
強調でってのが分からんナァ
import java.util.*;
import java.math.*;

public class MyNumber {

public static void main(String[] args) {
MyNumber num = new MyNumber(1);
BigInteger bin = new BigInteger("1");
System.out.println(num);
System.out.println(bin);
for (int i=2; i<=53; i++) {
num = num.mul(new MyNumber(i));
bin = bin.multiply(new BigInteger("" + i));
System.out.println(i + "! = " + num);
System.out.println(i + "! = " + bin);
}
}

private List digits;

public MyNumber(int num) {
digits = new ArrayList();
do {
digits.add(new Integer(num%10));
num /= 10;
} while (num > 0);
}
346あげちゃった:04/07/27 13:58
public MyNumber(List digits) {
this.digits = digits;
}

public String toString() {
String str = "";
for (int i=0; i<getOrder(); i++) {
str = digit(i) + str;
}
return str;
}

private int getOrder() {
return digits.size();
}

private int digit(int index) {
if (index < getOrder()) {
return ((Integer)digits.get(index)).intValue();
} else {
return 0;
}
}

private void shift() {
digits.add(0, new Integer(0));
}
347あげちゃった:04/07/27 13:58
public MyNumber add(MyNumber num) {
int index = 0;
int carry = 0;
List tmp = new ArrayList();
while ((index < getOrder()) || (index < num.getOrder())) {
int x = digit(index) + num.digit(index) + carry;
carry = x/10;
tmp.add(new Integer(x%10));
index++;
}
if (carry != 0) {
tmp.add(new Integer(carry));
}
return new MyNumber(tmp);
}

private MyNumber mul(int num) { // < 10 であるぞよ
int carry = 0;
List tmp = new ArrayList();
for (int i=0; i<getOrder(); i++) {
int x = num*digit(i) + carry;
carry = x/10;
tmp.add(new Integer(x%10));
}
if (carry != 0) {
tmp.add(new Integer(carry));
}
return new MyNumber(tmp);
}
348あげちゃった:04/07/27 13:59
public MyNumber mul(MyNumber num) {
MyNumber base = new MyNumber(0);
for (int i=0; i<num.getOrder(); i++) {
//一桁かける
MyNumber numtmp = mul(num.digit(i));
//オーダーずらす
for (int j=0; j<i; j++) {
numtmp.shift();
}
//ベースに足す
base = base.add(numtmp);
}
return base;
}
}

一桁って digit でよかったのかな
教えてください。
テキストファイルから文字を読み込んでint型の変数に
格納したいのですが、文字列の最初の5文字だけを取り出すのって
どうやったらいいんしょうか??
お願いします。
すみません。
public class y{
public static void main(String args[]){
int a[]=new int[10];
for(int i=0;i<10;i++){
int rnd=(int)(Math.random()*20+1);
a[i]=rnd;
System.out.println(a);
}
}
}
このようなコーディングをして実行すると
[I@5224ee
が、10回表示されるのですがどうして
整数が出てこないのでしょうか?
>351
あなたがそう表示するようにプログラムを書いたからです。
ひとめで分かれよそれくらい。
表示で不都合が出たんだから、まず表示のとこから穴が開くほど見れ。
>>351
int配列オブジェクトのtoString()出力ですよそれ。
System.out.println(new int[0]);とかして味噌。
>>351
System.out.println(a);
この行を
System.out.println(a[i]);
こうする。
もう夏休みで課題は出ないのかね
2chで聞いてでもやろうという人は、すでに出尽くしました。
あとは8/25くらいからガンガン
どれ、仕事一段落したし、ゲームでも作るか・・・RMI で軍人将棋かな

そうだイラクとアメリカのにしよう
イラクは覆面つけさせられて自軍のコマすら見えない
対CPU戦は自軍イラク、対人は双方イラク
戦争って悲惨だねということを(ry
359デフォルトの名無しさん:04/08/01 16:16
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=288

上のプログラムを改造して、URLをコマンドライン引数として受け取り、
HTTPサーバと交信し、ページをファイルにダウンロードするプログラムsimpleGetを書け。
例えば simpleGet http://XXXXXXXX/index.html
とするとindex.htmlファイルをダウンロードする。

また、以下のプログラムを改造して、接続要求を受け取ると、別のWebサーバに
要求をそのまま中継して、サーバから受信したデータをそのままクライアントに送る
プログラム(超簡易proxyサーバ)を書け。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=289

お願いします。
>>359
とりあえず一見して
1) 小文字からはじめるクラス名かよ!
2) ソース、全然参考なってねぇよ! そんなの改造したってただの回り道だよ!
という突っ込みの入るクソ課題だが、とりあえず作ってあげよう。
361デフォルトの名無しさん:04/08/01 17:15
>>360
お願いします・・
まず一問め。
最近、質問スレでまんまなQ&Aがあった(Aのひとつはオレ)ので参考になるかも
import java.io.*;
import java.net.*;

public class SimpleGet {
public static void main(String[] argv) throws Exception {
URL url = new URL(argv[0]);
String filename = url.toString();
filename = filename.substring(filename.lastIndexOf("/") + 1); // 最後の '/' よりあと

InputStream in = new BufferedInputStream(url.openStream()); // 入力は URL が示すリソース
File file = new File(filename);
OutputStream out = new BufferedOutputStream(new FileOutputStream(file)); //出力はファイル

byte[] buf = new byte[1024]; //最大1024文字ずつを読み書き
while (true) {
int readlen = in.read(buf);
if (readlen == -1) break; //読めなくなるまで繰り返す
out.write(buf, 0, readlen); //毎度毎度 1024 bytes とも限らないんでこうする
}

in.close(); //双方閉めてお終い
out.close();
}
}
「HTTPサーバと交信し」を HTTP そのものの実装でやるより、URL クラスを活用した方が早い。
課題で言ってる事には反してない。しかし「習ってないのになぜできた」という疑惑は向けられる、かも知れない。
(君が何を習ったかわしゃ知らん)
2問めは・・・・スレッド使っていいのかな。それとも出力して入力してお終い、でいいのかな。
とりあえず後者でやってみるけれども。
3632問め(注:半端):04/08/01 17:47
import java.io.*;
import java.net.*;

public class MyProxy {
public static void main(String args[]){
String hostname = args[0];
int port = Integer.parseInt(args[1]); //中継先のホスト, ポート。同じ番号で localhost に開く。

ServerSocket servsock = null;
Socket clientsock, hostsock;

BufferedReader clientin; //クライアントから文字で要求を受け、
PrintStream hostout; //中継先に文字で送り、
InputStream hostin; //中継先からコンテンツをバイナリで受け、
OutputStream clientout; //クライアントにバイナリで送る。

try {
servsock = new ServerSocket(port);
while(true){
clientsock = servsock.accept();
clientin = new BufferedReader(new InputStreamReader(clientsock.getInputStream()));
clientout = new BufferedOutputStream(clientsock.getOutputStream());
hostsock = new Socket(hostname, port);
hostin = new BufferedInputStream(hostsock.getInputStream());
hostout = new PrintStream(hostsock.getOutputStream());
3642問め(注:半端):04/08/01 17:48
//HTTP では空行が来るまでがクライアントの要求。
while (true) {
String line = clientin.readLine();
System.out.println(line);
hostout.println(line);
if (line.equals("")) break;
}

//空行がきた後はクライアントは待ち状態。
//中継先からデータを取り出して返す(画像などのバイナリかもしれないので Reader/Writerなどは使えない)
byte[] buf = new byte[1024];
while (true) {
int readlen = hostin.read(buf);
clientout.write(buf, 0, readlen);
clientout.flush();
if (readlen < 1024) break;
}

hostsock.close();
clientsock.close();
}
} catch (Exception e){
e.printStackTrace();
System.exit(1) ;
}
}
}
3652問め(注:半端):04/08/01 17:57
java MyProxy www.google.co.jp 80 などとして起ち上げて、
同じマシンのブラウザから http://localhost/ に接続してみよ。それっぽく受信できる。

オレはいまいち素人なのでアレだが、
本当は keep-alive への対応とか、Contents-Length を読んでいいところで入力を切るとか、しないといけない。
でもたぶんそこまでは要求されてないと思う。このスレの暗黙の限界的にもアレだし。
上記の問い2の実装では、毎度毎度必ず 1024byte ずつ受け取るものとして、
そうでない半端なサイズ受け取ったらもうデータの終端だとして接続を切ってしまっている。

繰り返すがオレの HTTP の理解度がいまいちなので、
お手軽にもっとそれらしく対応できるお作法があるのかもしれない。
待てるものならエライ人の突っ込みでも待っててくれ。
366デフォルトの名無しさん:04/08/01 19:06
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=290

上のプログラムはバブルソートを使用してプログラムを書いているが、
これをクイックソートを使用しプログラムを書き換えよ。

回答お願いします!
367デフォルトの名無しさん:04/08/01 23:33
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=291

このプログラムはハノイの塔の解き方をアプレットに表示するプログラムである。
これをアニメーション化するように変更せよ。
>>362
おまいはいいヤシだ。
丁寧に教えてあげても何のリアクションもない場合が多いが、めげるな。
>>366
さすがにそれぐらいはぐぐれ。
山のように解説サイトがあるぞ。

>>367
自分にはどこまでできるか/どこからができないのかをまず説明しろ。
丸投げに答えてくれる暇人はどこにもいない。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=292&fi=no

>>369
ごめんなさい。
やってしまいました。

>>367
見た目元のプログラムの跡形も無いからちゃんと理解してな。
タワーから抜いて別のタワーに刺さるところまでアニメーション使用かと思ったけど、
流石にめどいのでやらなかったよ。
さらに遊びたかったらやってみると面白いかもね。
>>366-367 (の出題者)は同じ奴?
一般的アルゴリズムと GUI 特有のコードのまざったものを課題にするってのもまた・・
「おまじない」だらけで何が主眼だかわからんね
最近プログラムが組めるようになってうれしい出題者です。
>>370
このお人好しめ! ( ´∀`)σ)゚Д゚)
374デフォルトの名無しさん:04/08/02 18:46
質問したいのですが
440000より大きい最小の素数を計算して求めるようなプログラムをJava言語で
作りたいのですが
public class c {
public static void main( String[ ] args ) {

outer; for( int i=440000; i=i+1; i++ )
inner: for( int j=2; j<=i-1; j++ ) {

if( i % j ==0 ) {
continue outer;
}
}
System.out.println( i + "is prime" );
}
}
というプログラムではできません、どうしたらいいでしょうか?
どなたか教えてください
>>374
ラベル付きcontinueとかやる前に、forの基本的な使い方勉強せい。
376デフォルトの名無しさん:04/08/02 18:56
>>374
i=i+1
?
>>374
とりあえず

public class c{
public static void main(String args[]){
for(int i=440000;true;i++){
int j;
for(j=2;j<i;j++){
if(i%j==0){
break;
}
}
if(i==j){
System.out.println(""+i+"is prime.");
return;
}
}
}
}
378デフォルトの名無しさん:04/08/02 19:07
>>377
ありがとうございます!おかげで課題が終了しました。
本当にありがとうございます!
379デフォルトの名無しさん:04/08/02 19:49
>>378とは違うものですが誰か
>>377のプログラムを簡単に説明していただけませんか?
i が i 未満の何か(素因数)で割り切れるかどうか調べる for(j=2;j<i;j++){
割り切れたら途中で素因数探しをやめる if(i%j==0){ break; }
for 構文のルールにより、素因数が見つからなければ j は i になってしまっている
j == i なら i が素数だとして終了
そうでなければ i に 1足してまた同じことをやる
なんか無駄が多いよね
382デフォルトの名無しさん:04/08/02 20:15
>>380
すごくよくわかりました、どうもありがとうございます。
せめて既に素数ではないと分かった数では割り算しないように改良希望
素数と判明した数をVectorに入れてそれで割るのはどうか。
時間かかりそうだがコーディングが手軽でコストパフォーマンスよくね?
素数プログラムが書きたくなったらこちらへ投稿してください。
すでにC/C++,Java,VB.NET,Delphi,Ruby,Python,LGP,HSP,Dほか
多数の言語でのプログラムが寄せられてます
初心者の挑戦者の方は一通り済ませたようなので
上級者の参加をお待ちしております

【初心者】課題をクリアしていくスレ【講習会】
http://pc5.2ch.net/test/read.cgi/gamedev/1086858349/
>>270
シンボルを解決できません。
シンボル: 変数 Arrays
場所 : myhash の クラス
Arrays.fill(list,null);
とコンパイルエラーが出てしまったのですが,解決方法を教えてもらえないでしょうか.
ソースの先頭に、
import java.util.Arrays;
を追加
万一それでも解決できなかったら、その一行まるまる消しても一応問題なし
>>387
コンパイルできました.ありがとうございました.
さらにアホな質問で申し訳ないのですが…
これはmainメソッドが無いのでこのファイルだけでは実行できませんよね.
どのようにしてこのファイルを読み込むようにすれば良いのでしょうか.
java半月以上触れてもいなかったのでまったく覚えてなくて.
もしお暇ありましたら教えてください.
2週間で忘れるのか
教えても、また忘れそうだな。

「このファイル」は意識せず、そこで定義するクラスを利用するコード書けばいい。
public class ForTest {
 public static void main(String[] args) {
  myhash hash = new myhash();
  //乱数生成して Integer かなんかのインスタンスを山ほどつくって hash に add
  //とかまぁいろいろやって "性能比較" をする
 }
}
ForTest.java は myhash.java と同じフォルダに。
>>389,390
親切にどうもありがとうございました.
半月でなく半年でした.
392デフォルトの名無しさん:04/08/05 18:22
正の整数xを入力して
xが素数なら「素数」
素数でなければ「素数でない」
と書き出すプログラム
お願いします
import java.io.*;
import java.util.*;

public class Q392 {
public static void main(String[] args) throws IOException {
Q392 checker = new Q392();

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String line = br.readLine();
if (line.equals("end")) break;

try {
int num = Integer.parseInt(line);

if (checker.isPrime(num)) {
System.out.println("素数");
} else {
System.out.println("素数でない");
}
} catch (NumberFormatException ex) {
System.out.println("数字でない");
}
}
}
private Set primes;

public Q392() {
primes = new TreeSet();
}

public boolean isPrime(int num) {
if (primes.contains(new Integer(num))) {
return true;
} else {
for (Iterator it=primes.iterator(); it.hasNext(); ) {
Integer p = (Integer)it.next();
if (num%p.intValue() == 0) {
return false;
}
}

for (int i=2; i<num/2; i++) {
if (num%i == 0) {
return false;
}
}

primes.add(new Integer(num));

return true;
}
}
}
何か冗長な気がする。素数で割る処理要らんのか? まぁいいか。
1) 素数の時に「素数でない」と出力してはいけない、とは書いていない
2) 素数でない時に「素数」と出力してはいけない、とは書いていない
以上より

int main( ) {
scanf( "%*s" );
puts( "素数" );
puts( "素数でない" );
}

エラーチェックは端折った。
396395:04/08/05 18:36
すまん、C/C++スレと間違えた。
あぁ、でもすぐJavaで応用できるからいいんじゃない?
398デフォルトの名無しさん:04/08/05 22:09
難問。

HTTPのgetで送信されてきたパラメータの値に"#"が含まれる場合
ServletRequest.getParameter("name")
としても"#"以降が取得できない。
どうすれば良いか。

例:http://hogehoge/hogeServlet?url=http://hoge/hoge.html#hoge
>398
そもそも送信してない。以上。
エンコードしないのが悪い。
以上。
401デフォルトの名無しさん:04/08/05 22:19
>>399

例のURLをクリックして「送信されてきた」という意味。
402デフォルトの名無しさん:04/08/05 22:20
>>399
馬鹿
>>400
天才
>>402
#以下は、ブラウザが送信しないんじゃないの?
少なくともIE6とOpera6とネスケ7は送信しないようだが。
404デフォルトの名無しさん:04/08/06 00:10
最初に個数nを読み込み、
続いてその個数分の数を読み込み、
読み込んだ数の合計を計算するプログラムを

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

から始めてお願いします

(例)
6(=n)





6(と入力すると)
合計は 21
import java.io.*;

public class Sum {
 public static void main(String[] args) throws IOException {
  int sum = 0;
  BufferedReader in =
   new BufferedReader(new InputStreamReader(System.in));
  int n = Integer.parseInt(in.readLine());
  for (int i = 0; i < n; i++) {
   sum += Integer.parseInt(in.readLine());
  }
  System.out.println("合計は " + sum);
 }
}
最初に個数を入力させるなんてゴミ設計だな。
練習用でももっとマトモな処理方法があるだろうに。
407デフォルトの名無しさん:04/08/07 13:21
すみません、時間ないです;

>>256の課題1で、APIを使用しない場合、どのように組めばいいでしょう。
線形捜査、2次関数捜査、ダブルハッシュ法でハッシュ関数を求めるとしたら…
408デフォルトの名無しさん:04/08/07 15:42
>>407
APIが実現している機能を自分で実装する。

でいいじゃん。
409270:04/08/08 09:26
>>407
>>>256の課題1で、APIを使用しない場合、どのように組めばいいでしょう。
あのソースは特に API を使っているわけではないぞ
API を使ったと言うのは HashTable , HashSet を使うことだからね。
どういう意味で言っているんだか分からないんだけど、

というか 2 週間経って思い出したように書き込むって結構アレだよ。
> すみません、時間ないです;
時間が無いのは自分のミスでしょ。

ここのルールじゃないけど、 C/C++の宿題板だと
> ・後になって問題につけたしをするのはやめましょう。
>  解いてもらっている方に失礼になってしまいます。
というローカルルールがあるしね。

でもまぁ、
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=202&fi=no
先着一名様、GUI 関係ありでも質問を受け付けます。
でももし GUI 関係なしのショボイ宿題でも締め切ります。
あと得意でない分野は放置します。エヘヘ
>>410
コンソールにHelloWorldと表示するプログラムをお願いします。
今まで数々のプログラムを組んできましたが、こんな難しいプログラムは俺の手に負えません。
お願いします。
>>411
Java では無理。
>>411
まずオブジェクト指向を勉強してください。
継承やらタタイやら責任の分離やらデザインパターンやらUMLやらウニットテストやら、完全に理解してないと無理です。
Javaではテストファーストが当たり前なので、まずコンソールにHelloWorldと書かれたかどうか判定するテストを書く必要があります。
(略)"コンソールにHelloWorld"(略)
Javaではコンソールの出力をフックすることができないので、ユニットテストがかけません。
なので、Javaでコンソールに出力するプログラムを作るのは無理です。
目視確認しろ
ttp://www.el.itc.nagoya-u.ac.jp/~kawaguti/lectures/lit2004/exercise/0701.html

だれかここのやつのdeleteメソッドとsortメソッド作ってもらえませんか?
// 変更点のみ
// 各メソッド一行
public class Meibo{
public void sort(){
Collections.sort(vec);
}


public void delete(String name){
vec.delete(new Person(name));
}
}

class Person implements Comparable{
String name;
int age;

Person(String n){
name=n;
}

public boolean equals(Object o){
return((o instanceof Person) || this.name.equals(((Person)o).name));
}

public int compareTo(Object o){
return(this.name.compareTo(((Person)o).name));
}
}
誤 return((o instanceof Person) || this.name.equals(((Person)o).name));
正 return((o instanceof Person) && this.name.equals(((Person)o).name));
421418:04/08/10 23:29
>>419
助かりました、ありがとうございます。
>>411

public class HelloWorld{
public String toString(){
return this.getClass().toString().substring(this.getClass().toString().indexOf(32)+1);
}
public static void main(String [] args){
System.out.println(new HelloWorld());
}
}
423名無しさん:04/08/11 12:01
>>422 やっちゃった
// HelloWorld.java
public class HelloWorld{
static{
System.loadLibrary("HelloWorld");
sayHelloWorld();
}
static native void sayHelloWorld();
public static void main(String args[]){
}
}
// ここまで
$ javac HelloWorld.java
$ javah -jni HelloWorld
424423:04/08/11 12:02
続き
/* HelloWorldImpl.c */
#include<jni.h>
#include<jvmdi.h>
#include<stdio.h>
#include"HelloWorld.h"

JNIEXPORT void JNICALL Java_HelloWorld_sayHelloWorld(JNIEnv *env, jclass c)
{
jmethodID meth,getnam;
jobject obj,str;
jclass cls,nam;
const char *s;
cls=(*env)->GetObjectClass(env,c);
//meth=(*env)->GetMethodID(env,cls,"getClass","()Ljava/lang/Class;");
//obj=(*env)->CallObjectMethod(env,c,meth,0);
//nam=(*env)->GetObjectClass(env,obj);
getnam=(*env)->GetMethodID(env,cls,"getName","()Ljava/lang/String;");
str=(*env)->CallObjectMethod(env,c,getnam,0);
s=(*env)->GetStringUTFChars(env,str,0);
puts(s);
(*env)->ReleaseStringUTFChars(env,str,s);
return ;
}
425423:04/08/11 12:04
そして
$ gcc -shared -fPIC -o libHelloWorld.so -I/usr/java/include HelloWorldImpl.c
$ LD_LIBRARY_PATH=. java HelloWorld
HelloWorld
$
「改行が大杉」らしいので3つに分かれてスマソ
426423:04/08/11 12:13
うわ、コメントアウトした行が残ってたスマソ
あと、#include<jvmdi.h> は不要。
おまえら、そこまで暇なのかw
>>414
コンソール出力って、System.out.println()だろ?
System#setOut()でフックかますWriter与えとけ。
System.out.printlnとか使ってたら宿題にならんだろ。
ちゃんとJNI使わないと。
>>410>>411の宿題、得意分野じゃなかったの?
いやボケ倒されてたから何かフツーにやったら寒いかなと思って
JNI からアセンブラにつないで INT 21h 呼ぼうかと思ってたら
別のことやってる人も出てきたしもうもう
432初心者:04/08/17 14:10
ある自然数nより大きな最小の素数を計算して表示するプログラムをjava言語で作るにはどうしたらいいんですか?よかったら説明もお願いします。
Javaでというか、そもそもアルゴリズムはわかってる?
>>432
とりあえず作って見ました。 多分これで合ってると思います。
説明文が適切でない場合があるのでその場合は調べるなりしてください

import java.io.*;
class Sample {
public static boolean getPrimeNumber(int x) {
if(x <= 1) return false; //自然数x が 1 より小さければ false を返す
for(int i=2; i < x; i++)
if((x%i) == 0) return false; //自然数 x/i の余りが 0 ならば false を返す
return true;
}
public static void main(String[] args)throws IOException, NumberFormatException {//IOのエラー処理 と 数値キャスト(?)のエラー処理
int sosuu;//自然数を入れる変数
//入力関数(?)
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("自然数を入力してください");
while(true) {
while(true) {
sosuu = Integer.parseInt(br.readLine());//入力された文字列をint型変数にラップしてsosuuに入れる
if(sosuu <= 1) System.out.println("自然数の2以上を入力してください\n"); //入力された数が1以下ならばエラーメッセージ(?)を表示
else break;
}
//入力した文字を数字に変換後、staticなクラスメソッドを呼び出して素数判定
if(Sample.getPrimeNumber(sosuu)) System.out.println("素数です。");
else System.out.println("素数ではありません。");
System.out.println("\n");
}}}
問題は素数判定ではないようですがね...
436ゴリ押し:04/08/17 16:00
Main() {
  BufferedReader r=new BufferedReader(new InputStreamReader(System.in));
  int value=0;
  try {
    String s=r.readLine();
    value=Integer.parseInt(s);
  }
  catch (Exception ex) {
    System.out.println("入力値が数値でない");
    System.exit(0);
  }

  for(int num=value+1; num<Integer.MAX_VALUE; ++num) {
    block: {
      for(int i=2; i<num; ++i) {
        if((num%i)==0) break block;
      }
      System.out.println(value + "の最小素数は" + num);
      break;
    }
  }
}
437訂正:04/08/17 16:04
×System.out.println(value + "の最小素数は" + num);
○System.out.println(value + "より大きな最小の素数は" + num);
438アル:04/08/17 17:04
画像と文字をフェードイン・アウトさせて
3回ぐらい変わらせたいのですが・・・
ちなみにクラスはMainとSubの二つ使いたいしたいです。
>ちなみにクラスはMainとSubの二つ使いたいしたいです。
その Main と Sub というのは、それぞれ一体何?
Main クラスと Sub クラスの 2つを用意しなければならないというシバリがあるの?
んでそれぞれの役割は何でもいいの? それとも決めなければいけないの?
440デフォルトの名無しさん:04/08/17 17:16
>画像と文字をフェードイン・アウトさせて
>3回ぐらい変わらせたいのですが・・・

画像と文字をクロスフェード?
それとも画像と文字をフェードインしてからフェードアウト?

>ちなみにクラスはMainとSubの二つ使いたいしたいです。

2つじゃないといけないの?
1つとか3つじゃだめなの?
というかMainとSubって何?
441アル:04/08/17 17:50
ネタ質問に釣られてご苦労さんw
442440:04/08/17 18:44
氏ね。
>>438
画像と文字をフェードイン・アウトさせるGIF画像を作ってブラウザで表示してください。
Javaでプログラム組む必要はありません。
質問です。
渡された文字列が、ひらがなだけで構成されているかを判断する為に、
文字こーどが必要だと思い、
一文字ずつCharacter.getNumericValue()メソッドで判別しようとしたが
どの文字も-1しか返ってこないので
このメソッドは文字コードを返さない事がわかった。

文字コードを取得するためにはどうすればよいのですか?
コピペ乙
文字コードを取得するのは簡単だよ。
>>444
うちではgetMojiKohdoというメソッドでやってます。
普通は、将来ひらがなが増えた時に備えてCharacter.UnicodeBlock使う罠。
UnicodeBlock使う奴は馬鹿
うん、かなり危ういね。
普通はIBMのライブラリ使うね。
以下の問題をお願いします。

「次の記述内容を満足するプログラムをJavaで作成せよ。
10名(A,B,C,D,E,F,G,H,I,J)の成績(0点から100点まで)をコマンド入力の際の
引数として与える。このとき、引数の順番とA,B,C,D,E,F,G,H,I,Jとを対応つける。
平均点を出力した後、A,B,C,D,E,F,G,H,I,Jの順番に表示し、平均点以上○印、
平均点以下は△印、最高点は◎印、最低点は×印で表示せよ。」

実行結果例としては
例)
平均点:70点
A 75点:○
B 65点:△
C 55点:△
D 95点:◎
E 40点:×
 … …

のような表示です。よろしくお願いします 。
452デフォルトの名無しさん:04/08/24 20:08
あげ
>>451
これでいいのかな?

class Sample {
public static void main(String[] args) {
char seito[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'};
int[] num = new int[10];
int heikin=0, saitei=100;
if(args.length != 10) {
System.out.println("引数は\n A B C D E F G H I J\nの順に点数を入力してください");
System.exit(1);
}

try {
for(int i=0; i < args.length; i++) {
num[i] = Integer.parseInt(args[i]);
if(!(0<=num[i] && num[i]<=100)) {
System.out.println("点数は 0点〜100点 の範囲までです。");
System.exit(1);
}
heikin += num[i];
if(num[i] < saitei) saitei=i;
}
454453:04/08/24 20:54
heikin /= args.length;
}
catch(NumberFormatException e) {
System.out.println("点数は整数値のみ入力してください");
System.exit(1);
}

System.out.println("平均点: " + heikin);
for(int i=0; i < args.length; i++) {
System.out.print(seito[i] + " " + num[i] + "点: ");
if(saitei == i)
System.out.println("×");
else if(heikin < num[i])
System.out.println("○");
else if(num[i] < heikin)
System.out.println("△");
}
}
}
455451:04/08/24 21:04
>>453
助かりました!ありがとうございました!
>>455
寝ぼけてた

> if(num[i] < saitei) saitei=i;
if(num[i] < saitei) saitei=num[i];

>if(saitei == i)
if(saitei == num[i])

上のように書き換えれば最低点をちゃんと動作すると思う
457451:04/08/24 21:18
>>456
わざわざ訂正までして頂いてありがとうございましたm(_ _)m
458sage:04/08/24 21:40
ここでいいのか分かりませんが
怪しげなメールに付いてきたHTMLファイルですが
ソースコードを見たら、下記のようになっていました

一部略の所は同じような数字が並んでいたので割愛しました

もしこれをブラウザで開くとどうなるんでしょうか?

よろしくお願いします

<!-- saved from url=(0022)http://internet.e-mail -->
<script language="JavaScript">
interacts = new Array(162,
23,56,248,198,165,4,115,25,19,157,
一部略
19,19,173,110,38,68,127);
needless = new Array(158,
127,76,149,170,155,56,17,
118,119,
一部略
15,156,165,122,43);
jitter = 88;
pedagogic = 118;
var revert = "";
for(Culver = 0; Culver < jitter; Culver++)
revert = revert + String.fromCharCode(interacts[Culver] ^ needless[Culver % pedagogic]);
document.write(revert);
</script>

>458
スレタイを1024回大声で読んで、くぶ攣って氏ね
460451:04/08/24 22:33
>>456
作っていただいたプログラムでは最高点が表示されませんでした。
最高点を表示するにはどうすればいいですか。
よろしくお願いします 。
461456:04/08/25 05:55
>>460

int heikin=0, saitei=100, saikou=0;  //saikou=0 を追加する


heikin += num[i];
if(saikou < num[i]) saikou = num[i];
if(num[i] < saitei) saitei = num[i];


if(saitei == num[i])
 System..out.println("×");
else if(saikou == num[i])    //この二行
 System.out.println("◎");   //を追加する
else if(heikin < num[i])
 System.out.println("○");


ごめん、読み飛ばしてた
上の通りに追加すればちゃんと動くはず
462451:04/08/25 06:59
>>461
たびたび教えていただいてありがとうございました。
本当に助かりました。
463デフォルトの名無しさん:04/08/25 20:43
DBのテーブルが
create table hoge(id int auto_increment primary key, name varchar(20));
で、jdbcでPreparedStatementを使ってnameだけに値をinsertしたと同時に、
auto_incrementで自動的に割り当てられるidの値を取得する方法ってありますか?

ご教授ねがいます。

適切なスレが見つからなかったのでここに書き込んでいますが
どこかいいスレがあれば教えてください。
464デフォルトの名無しさん:04/08/25 20:47
463と同じ者です。
Tomcatにおいて、ある時点で有効な
セッションオブジェクト全てを取得する方法ってありますか?
もしくはセッションIDだけでもかまいません。

これもご教授ください。

適切なスレが見つからなかったのでここに書き込んでいますが
どこかいいスレがあれば教えてください。
465デフォルトの名無しさん:04/08/25 21:01
>>463
DB何?
466デフォルトの名無しさん:04/08/25 21:33
>>465
Mysqlです。
>>463
テーブルがそんな設計の時には、俺は先にオートインクリメントの番号をselectで取得して、inserのときにそれを入れこんでる。
ちと回りくどいが、insert時の情報を元にselectするなんてやり方があるかどうかしらんので。

>>464
自分のSessionのオブジェクトを全部取得するならServletSession#getAttributeNamesで名前を全部とって、それに対するオブジェクトを全部取得すればOK
class(){
 何かの処理その1
 System.out.printlf("AAAAA");←1番目は最初からある
 System.out.printlf("BBBBB");←2番目はここに追加
 System.out.printlf("CCCCC");←3番目はここに追加
 System.out.printlf("DDDDD");←4番目はここに追加
 何かの処理その2
}

二番目以降n番目までのSystem.〜を追加し、ソースを作成するプログラムを
作るにはどうすればいいのですか?
469デフォルトの名無しさん:04/08/26 13:56
class(){
 String[] text;
 何かの処理その1
 text[0]="AAA";
 text[1]="BBB";
 text[2]="CCC";
 ・
 ・
 for(int i=0; i<text.length; ++i) {
  System.out.println(text[i]);
 }
 何かの処理その2
}
470デフォルトの名無しさん:04/08/26 17:23
「幅優先探索で、SからGまでの順路を求めよ」
という問題なのですが、よろしくお願いします。

            S
         |       |
         A      B
       |    |   |   |
       C   D   E  F
                  |
                  G
471幅優先探索:04/08/26 19:14
class Node {
Node pare;
ArrayList child=new ArrayList();
String userObject;

Node(String str, Node pare) {
this.pare=pare;
userObject=str;
if(pare!=null) pare.child.add(this);
}
}
472幅優先探索:04/08/26 19:16
void start() {
Node S=new Node("S", null);
Node A=new Node("A", S);
Node B=new Node("B", S);
Node C=new Node("C", A);
Node D=new Node("D", A);
Node E=new Node("E", B);
Node F=new Node("F", B);
Node G=new Node("G", F);

char c=0;
try {
System.out.println("求めるアルファベット");
c=(char)System.in.read();
}
catch (IOException ex) {
System.exit(0);
}
String target=String.valueOf(c);

ArrayList root=new ArrayList();
root.add(S);
Node node=search(root, target);

String path="";
while(node!=null) {
path= node.userObject + "/" + path;
node=node.pare;
}

System.out.println(target + "のルートからのパスは" + path);
}
Node search(ArrayList parents, String target) {
ArrayList nextParents=new ArrayList();
for(int i=0; i<parents.size(); ++i) {
Node node1=(Node)parents.get(i);
for(int j=0; j<node1.child.size(); ++j) {
Node node2=(Node)node1.child.get(j);
if(node2.userObject.equalsIgnoreCase(target)) {
return node2;
}
nextParents.add(node2);
}
}
if(nextParents.isEmpty()) return null;
return search(nextParents, target);
}
474デフォルトの名無しさん:04/08/30 10:02
開発環境:IIS5.0 + SQLServer2000 + ASP(VBScript)

某サイトの管理システムの一部なのですが、画像アップローダを作成することです。
アップロード操作画面に遷移したら、画像ファイルディレクトリ(アップロードする場所もここ)を参照し、
アップロードした(もしくはしてある)ファイルが5ファイルまで、一覧表示され、削除もできる。
というYahooオークションでのUI・改です。
http://up.isp.2ch.net/up/a4df3ce4ef4a.lzh
を参照願います。

途中までサンプルを作ったのですが、ちょっとよくわからないので教えて下さい。

詳細は添付の、基本設計.txtを見てもらえればわかると思います。

<何がわからなくて、何が教えて欲しいか>
・アップロードするディレクトリからファイル参照して、画像ファイルだけローカル変数に、格納して操作したい。
・自作設計なのでもっといい方法があれば教えていただきたい。
・できれば削除する際のポイントを教えていただきたい。

よろしくお願いします。
475474:04/08/30 10:09
もし板違いでしたら、どこで質問したらいいか教えて下さい。
476474:04/08/30 10:21
VB板の方に移動しました。
失礼しました。
477ばかぼん:04/08/30 11:21
int[] test=new int['z'+1];

あるMimeデコードのプログラム中にこのような配列の宣言がありました。
これが何をしているのかがわかりません。
配列要素数を決める文なのになんで文字が入ってるんですか?
これでエラーにならないのもよくわかりません。
どなたか神がいれば降臨してください。
'z'とは文字ではなく、ここでは文字コードつまり数値なのじゃ。
シングルクオテーションで文字を囲むとそれは文字コードとなるのじゃ。
ASCIIコード表を見ると z は16進数で7a、10進数で107と出ておる。
よって'z'+1とは107+1、つまり108の数値を示すのじゃ。
数値なのでエラーが出ないのじゃ。
言ってることはほぼ正しいのだが、見るべきコード表はASCIIコード表
ではなくてUnicodeのUCS-2、じゃなかったUTF-16のコード表だね。
以下の様なテキストデータを読み込んで、B列とC列の最後の値をそれぞれ
0.25倍し、その列の値を表示する。さらにその行に対応するA列の値も
取得せよ。また、該当値が無ければそれぞれ前後値を取得し、それに対応する
A列の値を取得せよ。
A列   B列    C列
0.0001990.02260.004382
0.0002830.0247260.005218
0.0004020.0270470.006208
0.000570.0295810.00738
0.0008060.0323460.008765
0.0011370.0353640.0104
0.0015990.0386550.012329
0.0022440.0422450.0146
0.0031370.0461580.017272
0.004370.0504230.020414
0.0060610.0550710.024105
0.0083640.0601350.028441
0.0114740.0656490.033536
0.0156360.0716540.039528
0.0211390.078190.046584
0.0283180.0853030.05491
0.0375310.093040.064759
0.0491310.1014520.076441
0.0634090.1105950.090323
0.0805350.1205230.106821
0.1004820.1312960.126367
0.1229730.1429730.149332
0.1474670.1556120.175922
481480:04/09/07 08:52
書き込み失敗しました。
A列    B列     C列 です。
0.022600, 0.004382, 0.000807,
0.024726, 0.005218, 0.001144,
0.027047, 0.006208, 0.001619,
0.029581, 0.007380, 0.002285,
0.032346, 0.008765, 0.003218,
0.035364, 0.010400, 0.004519,
0.038655, 0.012329, 0.006327,
0.042245, 0.014600, 0.008828,
0.046158, 0.017272, 0.012271,
0.050423, 0.020414, 0.016983,
0.055071, 0.024105, 0.023391,
0.060135, 0.028441, 0.032038,
0.065649, 0.033536, 0.043601,
0.071654, 0.039528, 0.058904,
0.078190, 0.046584, 0.078903,
0.085303, 0.054910, 0.104655,
0.093040, 0.064759, 0.137229,
0.101452, 0.076441, 0.177556,
0.110595, 0.090323, 0.226202,
0.120523, 0.106821, 0.283064,
0.131296, 0.126367, 0.347057,
0.142973, 0.149332, 0.415881,
0.155612, 0.175922, 0.486076,
0.169271, 0.206064, 0.553513,
0.184003, 0.239360, 0.614303,
0.199858, 0.275172, 0.665791,
0.216873, 0.312797, 0.707100,
0.235074, 0.351633, 0.738973,
0.254463, 0.391218, 0.763085,
意味ワカンネ
↓実行例書いて
483480:04/09/07 09:15
B列の最後の値0.391218*0.25=0.0978045ですが、該当値が無いので前後の値の
0.008765と0.010400になります。これに対応するA列の値は0.032346と0.035364
です。
表示方法は
0.008765のとき0.032346、0.010400のとき0.035364 でお願いします。
正規分布とかポアソン分布とかの表じゃねぇの?
485483:04/09/07 11:53
B列の最後の値0.391218*0.25=0.0978045ですが、該当値が無いので前後の値の
0.090323と0.106821になります。これに対応するA列の値は0.110595と0.120523
です。
表示方法は
0.090323のとき0.110595、0.106821のとき0.120523 でお願いします。
486私の名前は名無しです:04/09/07 12:43
つまり題意としては、
--------
1)四要素のCSVファイルがあり、(←ちょっとした抽象化)
前三つの要素をA,B,Cとする(四番目の要素は空っぽ)。
2)最後に現れたB・C要素の値について、ぞれぞれ、
I )与えられた(BまたはCの)値をxとする。
II )vの0.25倍を求める。これをvとする。
III)当該要素(BならばB要素全体、CならばC要素全体)の中に、
vと一致するものがあれば、その行のAの値をaとして、
System.out.println( v + "のとき" + a + "。");
かなんか実行する。
IV )当該要素の中に、
vと一致するものがない場合、
vよりも小さい要素の中で最大の要素が含まれる行(low)と、
vよりも大きい要素の中で最小の要素が含まれる行(high)を見つけ、
System.out.print( 当該要素_low + "のとき" + a_low + "、");
System.out.println( 当該要素_high + "のとき" + a_high + "。");
かなんか実行する。
--------
ということか。
この場合、lowのほうが見つからん場合もありうるし、
仮にBまたはCがマイナスである場合も認めると、
highのほうも見つからない場合がありうるので、
実際にはもうちょっと場合分けが複雑(IIIを含めて全部で四通り)になる。
あとはいちいちプログラムを書き下ろしてゆけばいいのだけれど、
こういう処理が実際に必要になる場面が想像できない。
このプログラムが必要になった具体的な背景というのが分かれば、
もっとすっきりしたプログラムが書けそうに思うのだが?
っつうか、難しいプログラムじゃないんだから、とりあえず書けば?
488私の名前は名無しです:04/09/07 13:54
> っつうか、難しいプログラムじゃないんだから、とりあえず書けば?
すみません、勘弁してください(T_T)。
AWKかPerlか、せめてCでやらせてください。お願いです。m(_ _)m
Cで書くよりJavaの方が楽だろ・・・
490その1:04/09/07 14:41
>>483
Comparator cmp=new Comparator() {
  public int compare(Object src, Object dst) {
    return ((Double)src).compareTo(((Double)dst));
  }
};
SortedMap mapB=new TreeMap(cmp);
SortedMap mapC=new TreeMap(cmp);

start() {
  String[] tokens=source.split("\\,");
  for(int i=0; i<tokens.length && (tokens.length-i)>2; ) {
    Double numA=Double.valueOf(tokens[i+0].trim());
    Double numB=Double.valueOf(tokens[i+1].trim());
    Double numC=Double.valueOf(tokens[i+2].trim());
    mapB.put(numB, numA);
    mapC.put(numC, numA);
    i+=3;
  }
  System.out.println("列B"); showNumber(mapB);
  System.out.println("列C"); showNumber(mapC);
}
491その2:04/09/07 14:42
void showAnswer(SortedMap map) {
  Double target = new Double( ((Double)map.lastKey()).doubleValue() * 0.25 );
  Iterator it=map.keySet().iterator();
  Double crntD=(Double)map.firstKey();
  Double prevD=crntD;
  while(it.hasNext()) {
    crntD=(Double)it.next();
    int ans=target.compareTo(crntD);
    if(ans==0) {
      System.out.println(target + "のときは" + map.get(target));
      break;
    } else if(ans<0) {
      System.out.println(prevD + "のときは" + map.get(prevD));
      System.out.println(crntD + "のときは" + map.get(crntD));
      break;
    }
    prevD=crntD;
  }
}
492その3:04/09/07 14:45
source に>>481の数値テキストデータが入ってるという事で
>>487=>>483
その煽り台詞で、もはや回答の道は絶たれたようだなw
494私の名前は名無しです:04/09/07 15:14
>>489
> Cで書くよりJavaの方が楽だろ・・・
いや、こういう場合のJavaの入出力の定跡を知らんのよ。>>490
>   String[] tokens=source.split("\\,");
>   for(int i=0; i<tokens.length && (tokens.length-i)>2; ) {
>     Double numA=Double.valueOf(tokens[i+0].trim());
とかは「早速パクらせてもらおう」とか素直に思っちゃうし。
それに、スイッチ立て放題・場合分けてんこ盛りの泥臭いコードとか、
Javaで書くと気恥ずかしいし。
「データはすべて正の値で昇順」とかいう条件が明示されてて、
データの一行めが
0.000000, 0.000000, 0.000000,
とかだったら、そういう苦労もないんだけど。
>>494
あ、ありがとう・・・
496480:04/09/08 01:06
>>484
データ処理後の正規分布表です。

>>私の名前は名無しですさん
仕様はそのとおりですが、データは全て正で昇順です。
ちなみにCでやるとしたらどうなりますかね?Cはほとんど分からないので
参考までにお願いします。

>>490
ご苦労様です。ありがとうございました。
497私の名前は名無しです:04/09/08 02:36
>>496
> 仕様はそのとおりですが、データは全て正で昇順です。
> ちなみにCでやるとしたらどうなりますかね? Cはほとんど分からないので
> 参考までにお願いします。
データの形式が
「0.0, 0.0, 0.0,で始まる、正で単調増加な三要素のCSV風のデータ」
だということが「仕様」として明確になっているならば、
Javaで書くのが正解。
そうでない場合を想定してCで書くんなら、
CSVデータを正規化したTSVデータに変換するフィルタをまず作り、
(こうすりゃ fscanf() で読める)
次に別プログラムで、
同一の値、すぐ下の値、すぐ上の値を格納する変数と、
それぞれが存在したかどうかのフラグを用意し、
すぐ下の値に機械最小値、すぐ上の値に機械最大値を初期値として代入し、
ファイルを頭から舐めてフラグ見て分岐、ってな感じでしょう。
ここはJavaの板なので、
具体的なプログラムは割愛させていただきます。
次の宿題まだ〜?
まだ後期が始まってない大学も多いだろうからな
>>490
start() { でエラーが?
501私の名前は名無しです:04/09/08 10:47
>>500
最初にファイルの内容を
StringBufferに全部結合して突っ込んで、
String source = buf.toString();
かなんかやるべし。
502私の名前は名無しです:04/09/08 11:22
スマソ。
split()が末尾のカンマに騙されてるとか、
trim()が改行コードに引っかかってるとか、
そういうの考えてたら違ってた。
ひょっとして、
×showNumber
○showAnswer
とかいったネタ?
503私の名前は名無しです:04/09/08 13:47
  // ええかお前ら! こういうのを屑コードというんだ!
  static void showAnswer( double [] a, double [] x ) {
    boolean is_equal = false;
    boolean is_low  = false;
    boolean is_high = false;
    double a_equal = 0;
    double a_low  = 0;
    double a_high = 0;
    double x_equal = 0;
    double x_low  = 0;
    double x_high = 0;
    double v = x[x.length - 1] * 0.25;
504私の名前は名無しです:04/09/08 13:47
    for (int cnt = 0;cnt < x.length;cnt += 1) {
      if (!is_equal && x[cnt] == v) {
        a_equal = a[cnt];
        x_equal = x[cnt];
        is_equal = true;
      }
      if (!is_low) {
         if (x[cnt] < v) {
           a_low = a[cnt];
           x_low = x[cnt];
           is_low = true;
         }
      } else {
         if ((x[cnt] < v) && (x_low < x[cnt])) {
           a_low = a[cnt];
           x_low = x[cnt];
         }
      }
      if (!is_high) {
         if (x[cnt] > v) {
           a_high = a[cnt];
           x_high = x[cnt];
           is_high = true;
         }
      } else {
         if ((x[cnt] > v) && (x_high > x[cnt])) {
           a_high = a[cnt];
           x_high = x[cnt];
         }
      }
    }
505私の名前は名無しです:04/09/08 13:48
    if (is_equal) {
      System.out.println(a_equal + "のときは" + x_equal);
    } else {
      if (is_low) {
        if (is_high) {
          System.out.print(a_low + "のときは" + x_low + "、");
          System.out.println(a_high + "のときは" + x_high + "。");
        } else {
          System.out.println(a_low + "のときは" + x_low + "。");
        }
      } else {
        if (is_high) {
          System.out.println(a_high + "のときは" + x_high + "。");
        }
      }
    }
  }
506私の名前は名無しです:04/09/08 13:49
そんな訳で、次いきましょう。次。
507490:04/09/08 18:05
>>483
失礼。数値テキストに含まれてるのが、数値とカンマだけかと早とちりして
しまいました。初めのstart()を訂正します。

void start(String source) {
  Pattern pat=Pattern.compile("\\d\\.\\d+|\\d+");
  Matcher mat=pat.matcher(source);
  List tokens=new ArrayList();
  while(mat.find()) {
    tokens.add(mat.group());
  }
  for(int i=0; i<tokens.size() && (tokens.size()-i)>2; ) {
    Double numA=Double.valueOf((String)tokens.get(i+0));
    Double numB=Double.valueOf((String)tokens.get(i+1));
    Double numC=Double.valueOf((String)tokens.get(i+2));
    mapB.put(numB, numA);
    mapC.put(numC, numA);
    i+=3;
  }
  System.out.println("列B"); showNumber(mapB);
  System.out.println("列C"); showNumber(mapC);
}
508490 一文字入れ忘れた:04/09/08 18:08
>>483
失礼。数値テキストに含まれてるのが、数値とカンマだけかと早とちりして
しまいました。初めのstart()を訂正します。

void start(String source) {
  Pattern pat=Pattern.compile("\\d+\\.\\d+|\\d+");
  Matcher mat=pat.matcher(source);
  List tokens=new ArrayList();
  while(mat.find()) {
    tokens.add(mat.group());
  }
  for(int i=0; i<tokens.size() && (tokens.size()-i)>2; ) {
    Double numA=Double.valueOf((String)tokens.get(i+0));
    Double numB=Double.valueOf((String)tokens.get(i+1));
    Double numC=Double.valueOf((String)tokens.get(i+2));
    mapB.put(numB, numA);
    mapC.put(numC, numA);
    i+=3;
  }
  System.out.println("列B"); showNumber(mapB);
  System.out.println("列C"); showNumber(mapC);
}
どーでもいいが、ShowAnswer()をShowNumber()にしつこく間違えてるのは
コピペだけじゃなく、自分でよく見てから提出するんだぞと
示唆してるって事なのか
510私の名前は名無しです:04/09/09 09:33
もういいよー、やめようよー(;_;)
だれか次の宿題出してくれよー
511めるぽの名無しさん:04/09/09 10:12
じゃ>>510に支援要請!
1.画面上に下記のように表示しなさい
熊本●●●●学院
情報システム科
0302XXX
「デフォルトの名無しさん」
2.プログラム名のあとに文字列をパラメータで指定して、
その文字列が、実行後に画面に表示されるようにしなさい。
3.プログラム名のあとに2つの整数値を指定して、この二つの数字の
+、−、÷、x、%(余り)を計算し、表示しなさい。
512めるぽの名無しさん:04/09/09 10:20
↑の続き
4.あなたは男性ですか?と画面に表示して、Yなら「あなたは男性ですね」
Nなら「あなたは女性ですね」と表示されるようにしなさい。
5.使用
  class Goods
   void store(String s, int p, int n)
   void write()
   int calc()
 public class Fukushu5
 {
 public static void main(String [] args)
 {
  total = 0;
  Goods 配列の定義 オブジェクト名 account
  配列オブジェクト account[i] (i = 1~3)の作成
 account[0] に ("りんご", 150, 3)を設定
 account[1] に ("みかん", 80, 5)を設定
 account[2] に ("とまと", 120, )を設定
すべての価格のトータルを計算し表示する。
513名も無いが藝も無い:04/09/09 13:17
>>511
1.
  System.out.print(
    "熊本いごっそう学院\n" +
    "情報システム科\n" +
    "0302010\n" +
    "私の名前は名無しです。\n"
  );
514無名子:04/09/09 13:22
2.
  public static void main( String[] args ) {
    if (args.length > 0) {
      System.out.println(args[0]);
    }
  }
515無名子:04/09/09 13:24
……なあ、これCの演習問題じゃないか?(-_-;)
516無名子:04/09/09 14:32
「宿題を解く」というこのスレの主旨には反するのだが、
こんな問題を作ってみた。
【いわゆる角谷予想】
--------
1以上の整数(=1以上の値が代入されている変数)について、
その数が1になるまで(=その変数の内容が1になるまで)、以下の手続きを繰り返す。
 ・その数が二の倍数なら、二で割る。
 ・そうでなければ、三倍して1を足す。
--------
問)1からその数に至る経路を、
「その数:ステップ数, 経路」の形で出力する、
メソッド Kakutani を定義し、
1から1000までの数について実行せよ。
例)
1:0, 1
2:1, 2→1
3:7, 3→10→5→16→8→4→2→1
※それ自身への参照を持ったクラスと、
privateなメソッド_Kakutaniを定義し、
再帰を用いると簡単になる。
517無名子:04/09/09 16:07
訂正。
×問)1からその数に至る経路を、
○問)その数から1に至る経路を、
しかし、Javaというのは侮りがたく速い……。(-_-!)
それに、けっこう頑丈っつーかタフっつーか、
そう簡単にはオーバーフローせんところを見ると、
メモリ効率もそんなには悪くないらしい
(単に最近のマシンがメモリをしこたま積んどるせいもあるだろうが)。
無駄の多いプログラムを書くっつーのも
案外無駄ではないらしい……
>>516

public class KakutaniAnticipation{
public static void main(String[] args){
new KakutaniAnticipation().Kakutani();
}

private int count;
private String s = new String();

private void _Kakutani(int i) {
s = s + i + "→";
count++;
if(i == 1) return;
else if((i%2) == 0) _Kakutani(i/2);
else _Kakutani(i*3+1);
}
public void Kakutani() {
for(int i=1; i<=1000; i++) {
s = "";
count = -1;
_Kakutani(i);
System.out.println(i + ":" + count + ", " + s.substring(0, s.length()-1));
}
}
}
519無名子:04/09/09 16:48
>>518
なるほど。それが順当というか、
真っ当なプログラミング教育を受けた(=Lisp以外の言語で育った)人間の書く、
正常なプログラムですな。

ちなみに私はこんなふう。↓
520無名子:04/09/09 16:48
  public static void main( String[] args ) {
    for (int cnt = 1;cnt <= 1000;cnt += 1) {
      Kakutani(cnt);
    }
  }

  public static void Kakutani( int n ) {
    Link link = _Kakutani(n);
    int step = link.length() - 1;
    System.out.println("" + n + ": " + step + ", " + link.toString());
  }
521無名子:04/09/09 16:48
  private static Link _Kakutani( int n ) {
    if (n == 1) {
      return new Link(n, null);
    } else {
      if ((n % 2) == 0) {
        return new Link(n, _Kakutani(n / 2));
      } else {
        return new Link(n, _Kakutani(3 * n + 1));
      }
    }
  }
522無名子:04/09/09 16:49
  private static class Link {
    Link link;
    public int value;

    Link( int n, Link link ) {
      this.link = link;
      this.value = n;
    }

    public int length() {
      if (this.link == null) {
        return 1;
      } else {
        return this.link.length() + 1;
      }
    }

    public String toString() {
      if (this.link == null) {
        return "" + this.value;
      } else {
        return "" + this.value + "→" + this.link.toString();
      }
    }
  }
523デフォルトの名無しさん:04/09/09 18:14
String url = (String) anlist.iterator().next(); //リストの底からURL取得

↑のをリストの底からではなくリストの一番上からURLを取得するとした場合はどういう表記に
なるのですか?
524デフォルトの名無しさん:04/09/09 21:27
>>523
説明不足。
このスレを見て勉強しようという素人もいるハズだから、
素人にも分かるように問題の本質を記述しろ。
525デフォルトの名無しさん:04/09/09 21:42
流せよ。どうせ釣りだろ?
きっとHashMapのComparatorが降順とか言うんだ。
>>523
anlistがListのサブクラスなら、
String url = (String) anlist.get(anlist.size()-1);
>>523
それはリストの一番上をとってくるのではないのか?
最初 = 上。
528無名子:04/09/10 09:31
>>523
つまり、
> String url = (String) anlist.iterator().next(); //リストの底からURL取得
> ↑のをリストの底からではなくリストの一番上からURLを取得するとした場合はどういう表記に
なるのですか?
ではなくて、
> String url = (String) anlist.iterator().next(); //リストの一番上からURL取得
> ↑のをリストの一番上からではなくリストの底からURLを取得するとした場合はどういう表記に
つーことか。
anlistが先入後出のコンテナだったら、そのままでいいね。
530無名子:04/09/10 09:50
これも宿題じゃなくて出題。
【簡単な英語の辞書引きツールの試作】
1.
テキスト中の空白・タブ・改行、,.!?;:"で区切られた部分を「語」とし、
アルファベットのみで構成された「語」を「英単語」とする。
String の ArrayList である text にテキストが格納されているものとし、
text中の英単語を抜き出して String の ArrayList として返すメソッドを書け。
2.
英単語のリスト words が String の ArrayList の形で与えられる。
1)wordsの内容をすべて小文字に変換し、
2)末尾が e, f, s, v, y, ed, er, es, fe, fs, ys, ers, est, fed, fes,
ied, ies, ing, sed, ved, ves, yed, ving を語尾に持っている場合は、
無条件に一致する最長のものを取り去る。さらに ed, ing, er, estの場合には、
その前に同じ子音が重なっていれば、そのうちの一つも取り去る。
それぞれの英単語に上記操作を施したものを、「見出し語」と呼ぶ。
同一の見出し語を持つ英単語のリストを、見出し語とともに出力せよ。
※見出し語の長さは0である場合もあることに注意。
531デフォルトの名無しさん:04/09/10 19:49:00
すいませんでした
532無名子:04/09/10 22:01:24
>>530
思いつきで出題したら自分でハマッた。(^_^;)
そこで追加出題。
3.
「見出し語」「表現形の並び」「解説」からなる辞書ファイルがある。
それがたとえば
--------
"b" "be" "be動詞の原形"
"b" "bed/beds" "寝台"
"b" "by" "〜によって"
"carr" "carry/carrys/carried/carrying" "運ぶ"
"i "I" "私"
"i" "if" "もしも"
"i" "is" "be動詞の三人称単数現在"
--------
という形をしているものとして、
「テキストを与えて、そこに現れる単語とその訳語のリストを
出力するプログラム」を書け。
なお、リストの順序はアルファベット順または出現順とする。
※同じ単語を二度表示しないこと(特に出現順の場合)。
533デフォルトの名無しさん:04/09/10 22:28:38
だるい
534デフォルトの名無しさん:04/09/11 00:07:33
>>530
それを解く気力も体力もないのだけど、辞書はHashMapに格納したほうが処理的
には早くなるのではないかと思います。

まず正規表現で文章中から単語を切り出して
大文字を小文字に変換して
単語の末尾処理を正規表現を使用した置換を使用して実行し
出現単語を格納してあるTreeMapに切り出した単語がなかったら追加し
最後にTreeMapから単語を一つづつ取り出して、辞書(HashMapで格納)を検索して表示

というようになるのかな?
うーん。でも実際にコード書くとなるとめんどいなぁ。
535無名子:04/09/11 08:35:05
>>534
> それを解く気力も体力もないのだけど、
漏れは辞書を引く気力と体力がないのだ(-_-;)。
プログラマにとって怠惰と短気と傲慢は美徳なのである。
> 辞書はHashMapに格納したほうが処理的
> には早くなるのではないかと思います。
「見出し語」という名前がいかんかった。これがキー(鍵語)である。
HashMapに格納するのはキーを求めたあとである。
> まず正規表現で文章中から単語を切り出して
String tok[] = line.split("[\\s\\t\"(),.!?;:]");
> 大文字を小文字に変換して
String x = tok[cnt].toLowerCase();
if (x.matches("[a-z]+")) {
> 単語の末尾処理を正規表現を使用した置換を使用して実行し
if (s.endsWith(tail) {
> というようになるのかな?
> うーん。でも実際にコード書くとなるとめんどいなぁ。
たぶん仕様を誤解してる。漏れの書き方も悪かったが。
一見頭の悪そうな処理で正解。
536無名子:04/09/11 08:53:01
>>534
つまり、たとえば"carryed"が文中に一度出てきたら
その後"carrys"や"carrying"が出てきても
解説文は表示しなくていいのだが、
それが"carr"というキーで引っかかったその語であるかどうかは、
文中にまったく同じ形("carryed")で出てこないかぎり、
辞書を引いて「表現形」と一致するまでは判定できんのである。
だから、文中に出てきた語は、
何も考えずに全部辞書引きしちゃっていい。
辞書の解説文がガイシュツかどうかは、
辞書テキストの行番号かなんかを内部で持っておいて、
それがイコールかどうかで判定すればいい
(本当は辞書を格納したHashMapのHashCodeかなんかで判定するのが
カッコいいのだろうが、コード追う奴がJavaの素人だと、
直感的に何やってるか分かりづらかろう)。
537無名子:04/09/11 21:13:50
>>530 1.
  public static ArrayList cut( ArrayList text ) {
    Text ret = new Text();
    ListIterator liter = text.listIterator();
    while (liter.hasNext()) {
      String line = (String)liter.next();
      String tok[] = line.split("[\\s\\t\"(),.!?;:]");
      for (int cnt = 0;cnt < tok.length;cnt += 1) {
        String x = tok[cnt].toLowerCase();
        if (x.matches("[a-z]+")) {
          ret.add(tok[cnt]);
        }
      }
    }
    return ret;
  }
538無名子:04/09/11 21:33:56
>>530 2.
  public static String Midasi( String str ) {
    final String[] tail = {
      "y", "v", "ys", "ers", "fs",
      "ves", "ies", "fes", "es", "s",
      "ving", "f", "fe", "e", "yed",
      "ved", "sed", "ied", "fed"
    };
    final String tail2[] = { "est", "er", "ing", "ed" };
    final String tail3[] = {
      "bb", "dd", "ff", "gg", "kk",
      "mm", "pp", "rr", "ss", "tt",
      "zz"
    };
539無名子:04/09/11 21:34:19
    String s = str.toLowerCase();
    for (int cnt = 0;cnt < tail.length;cnt += 1) {
      if (s.endsWith(tail[cnt])) {
        return (s.substring(0, s.length() - tail[cnt].length()));
      }
    }
    for (int cnt = 0;cnt < tail2.length;cnt += 1) {
      if (s.endsWith(tail2[cnt])) {
        s = s.substring(0, s.length() - tail2[cnt].length());
        for (int cnt2 = 0;cnt2 < tail3.length;cnt2 += 1) {
          if (s.endsWith(tail3[cnt2])) {
            return s.substring(0, s.length() - 1);
          }
        }
        return s;
      }
    }
    return s;
  }
540無名子:04/09/11 21:35:20
表にするところは、
ArrayListのTreeMapかなんか使って
自分で書いてちょ。
541無名子:04/09/11 21:40:29
3は省略。
「表現形の並び」をHashMapで実現すると面倒。
StringにしておいてindexOf()で検索すると楽。

 ……てなワケで、次いきましょう、次。
542デフォルトの名無しさん:04/09/12 00:31:56
オナニーはもう終わりましたか
543デフォルトの名無しさん:04/09/12 02:02:03
CSSファイル中の任意のクラスを見つけ、
そのクラス中のプロパティを変更するプログラムをきれいに書くには?

たとえば、下のようなファイルではFONT-SIZE: 90%;
とかになればいいんだけど。

Class_sample {
BACKGROUND-IMAGE: NONE;
BACKGROUND-REPEAT: NO-REPEAT;
BACKGROUND-COLOR: #FFFFFF;
FONT-SIZE: 80%;
COLOR: #333333;
}

Class_hoge {
...
544デフォルトの名無しさん:04/09/12 02:25:23
教えますってスレで聞くのもあれなんだが、
ここ読んでるとたまに(いやけっこう?)「かくかくしかじかで
こういう動作するプログラムをお願いします」とか質問があって、
解答ソースもらって「ありがとうございました」で終わっている
ヤツがいるが、解答まるまるもらってコピペで卒業して、いったい
そこ卒業して何になる気なんだと思わんか。

いやまあ宿題スレなんでそういう用途もありだとは思うが...
545無名子:04/09/12 08:54:05
>>544
入社のときには
「学校でやりました」「がんばります」
とか言っといて、
入ってみたら
「わかりません」「できません」
「授業でやっただけです」
とか言いだすのである。(-_-!)
546デフォルトの名無しさん:04/09/12 09:06:36
誰か、宿題スレを本当に宿題に使った人教えて
547デフォルトの名無しさん:04/09/12 10:04:40
>>545
おまえはアホか。
そんときはまたこのスレで聞けばいいだろ。
548デフォルトの名無しさん:04/09/12 14:42:04
>>548
「Perl経験者」で、
「『正規表現』ってなんですか」って奴がいた。
「Java経験者」でも、
「オブジェクト」の意味を知らんかった奴もいた。
549デフォルトの名無しさん:04/09/12 14:58:04
>>548
無限ループ乙。
550デフォルトの名無しさん:04/09/12 15:22:28
>>549
=548
スレ違いだが、「後方参照」と「前方参照」って、
逆に覚えてる奴いなくね?
551デフォルトの名無しさん:04/09/12 15:30:45
>>548
>「オブジェクト」の意味を知らんかった奴もいた。
ワシが若い頃はのう、OOLは「算体主導型言語」とか、
「もの志向言語」とか呼ばれておったものぢゃ。
FORTRANが手続き型言語で、Cが関数型とか言っておったものぢゃ。
552デフォルトの名無しさん:04/09/12 15:32:33
> Cが関数型

いいません。
553デフォルトの名無しさん:04/09/12 15:43:35
>>552
お前、

>言っておったものぢゃ。

に対する反論として

>いいません。

と書く事に疑問を感じなかったか?
554デフォルトの名無しさん:04/09/12 15:46:16
>>548
>「Java経験者」でも、
>「オブジェクト」の意味を知らんかった奴もいた。

括弧を忘れた Lisp の老師みたいで
ちょっとカッコイイな。
555デフォルトの名無しさん:04/09/12 16:36:33
>>554
> 括弧を忘れた Lisp の老師みたいで
> ちょっとカッコイイな。
「Javaの老師」とかもおるんだろうか。
「"2"を即値(リテラル)だと思ってはならんのぢゃ。
2というfinalな値を持った、"2"という名前の
"2"オブジェクトのインスタンスだと
思わねばならんのぢゃ。
したがって"2+2"というのは、
"2"という名前の"2"のインスタンスに、
"2"オブジェクトから"+"というメッセージが
送られたと思わねばならぬのぢゃ。」
とか言うとったりするんだろうか。
556デフォルトの名無しさん:04/09/12 16:47:09
>>555
岩谷宏
557543:04/09/12 18:50:05
すいません、勉強します。
でもこれ、教えてください。
558デフォルトの名無しさん:04/09/12 19:23:43
>>555
それ、老師じゃないじゃん。

老師ってのは、弟子から
「師匠!どうやったら貴方みたいに
自由自在にオブジェクトを使いこなせるんですか?」
って尋ねられたときに、
「オブジェクト? ああ、そういえばそんなものもあったな。
すっかり忘れていた」
って言う人だろ?
559デフォルトの名無しさん:04/09/12 19:25:16
>>557
1)sedを使う。
2)『ソフトウェア作法』("SOFTWARE TOOLS")を読み、
互換の汎用ツールをJavaで書く。
3)岩谷宏『Javaによるテキスト処理』を読み、
専用のツールを書く。
4)Perlで専用ツールを使う。
5)別スレで助けを求める。
560デフォルトの名無しさん:04/09/12 19:31:54
>>558
>>555は意味解かってないと思われ
561デフォルトの名無しさん:04/09/12 19:51:49
>>560
つーかJavaっつーよりZetaLispとかだろ?
OO的にいえば、
べつに"2"という名前の変数があっても変じゃないし、
"2"というメッセージを与えて整数オブジェクトから自動的に
"2"という名前を持ったvalueOf()が2に一致するインスタンスが生成されても
OO的にいうと当然だし。
562デフォルトの名無しさん:04/09/12 22:28:32
>>557
それってJavaでもできんこともないけど、559のいうとおりsedを
使うか、awkなりperlでも使った方が速いように思う。sed, awk, perlなら
他スレってことになるが、Javaでやれって宿題なわけ?
563daigakusei:04/09/12 22:37:35
RSA方式によって暗号文を作り,さらにそれを自分自身で復号化する.
文字について: 使用する文字については
・ ASCII code の0x20 (Space) から0x7a (z) までの91文字
とする.従って,改行やタブ,DEL などの制御コードは含まれないことに注意.
文字に対応した数字について: これらの文字に対応する数字は,
・ (文字のASCII code)−0x20 とする.
従って,Space は0x20 − 0x20=0 であり,最後のz は0x7a − 0x20=0x5a=90 となる.
文字を数字の集合と見なすと,(10進数で) 0〜 90という91-個の文字を使うことになる.
文の自然数化: これらの文字を使って,文を自然数に変換する方法は以下のようにする.
・ 7文字を1ブロックとする.
・ そのブロックをt = t0t1t2t3t4t5t6 とする.t の自然数化Nt を次の
ように定義する.
Nt = t0*91^6 + t1*91^5 + t2*91^4 + t3*91^3 + t4*91^2 + t5*91+t6
・ 例えば,「t=Let’s g」(Let’s go の最初の7文字) なら,
L= 0x4c-0x20 = 0x2c = 44
e= 0x65-0x20 = 0x45 = 69
t= 0x74-0x20 = 0x54 = 84
'= 0x27-0x20 = 0x07 = 7
s= 0x73-0x20 = 0x53 = 83
Space = 0x20-0x20=0
g= 0x67 ! 0x20 = 0x47 = 71
であるので,
Nt = 44*91^6 + 69*91^5 + 84*91^4 + 7*91^3 + 83*91^2 + 0*91 + 71
= 25422595529038 となる.
564daigakusei:04/09/12 22:41:05
続き
素数の選び方: RSA方式によって暗号化を行うためには,2つの素数p,
q を選ばなければならない.この2つの素数については,指定されたも
のを使用すること.どの素数を使うのかは,各人によって異なる.に対応して,
RSA暗号においては,n = pq という数が重要である.指定されたp, q に関しては,必ず,
91^7 = 51676101935731 < n < 4702525276151521 = 91^8
となるように選んである.
e の選び方: RSA暗号においては,公開鍵で使われるe という数として,
何を使うべきかが問題となる.これは公開される数なので,特にラン
ダムに選ぶ必要はないが,実際には,解読を回避するために大きな数が使われる.
ここでは,e としては,全員同じ一つの数を使用するものとする.それは,フェルマー数の一つで素数の,
e = 2^2^4 + 1 = 65537
e の条件としては,1 < e < Φ(n) = (p - 1)(q - 1) であって,Φ(n) と
互いに素でなければならないが,指定されたn に対しては,このe は,
必ずΦ(n) と互いに素となるようになっている.
565daigakusei:04/09/12 22:42:24
その3
プログラミングについて:
計算の途中では,30桁を超える数が現れるので,64bit を超える数値
データの計算,すなわわち多倍長計算を行わなければならない.
Java の場合には,BigInteger というクラスを使う。メソッドとして,四則演算add,
subtract, multiply, divide などの他に,以下の計算で必要となるmod
があり,さらに,
ab mod n
を計算してしまうmodPow と, mod m での積の逆元を計算してし
まうmodInverse というものが含まれている.
これらを使えば,RSA暗号の主要部分のプログラムがほとんど不要
となり,極めて簡単に暗号化ができてしまう.あとは,文字列と数字と
の対応を与える部分だけ作れば良い.
なお,a^b を計算するためのメソッドpow というものもあるが,これは
b がint でなければならず,この場合は使えない.
d の計算: 公開鍵となる(n; e) は上で述べたように決められたわけだが,
「レポートとして提出してもらうのは,指定された文章を,それぞ
れの秘密鍵によって暗号化することにより得られた暗号文である.」
その暗号文を,こちらで公開鍵(n; e) により復号化することにより,そ
れぞれの秘密鍵で暗号化したものであるかどうかを確認する.
各人の秘密鍵は(n; d) であり,これによって暗号化するためには,Z(Φ(n))
におけるe の逆元d を計算しなけらばならない.すなわち,
ed∽1 mod Φ(n) = (p - 1)(q - 1)を満たすd を求めるわけだが,これは,拡張ユークリッド・アルゴリ
ズムによって計算できる.
しかし,Java のBigInteger class を使えば,上記のように,modInverse
で簡単に得られる.
ブロックの暗号化: 上で得られたNt をRSAの秘密鍵により暗号化する.
秘密鍵は,上で求めたd なので,
ct = Nt^d mod n
が暗号化された数字となる.
566daigakusei:04/09/12 22:45:05
上記のように,Java であれば,BigInteger class のmodPow を使えば,
すぐに計算できる.
暗号数の文字列への変換: この操作によってできた数ct を再び文字列に変
換しなければならない.これは次のように行う.
0≦ct < n であり,91^7 < n < 91^8 であるので,ct を上の91個の文
字列に直した時には,7個ではなく,8個の文字列になる場合がある.
そこで, ctは常に8個の文字列に直すと決める!
ct < n < 91^8 となっているので,ct は必ず,
ct = s0*91^7 +s1*91^6 +s2*91^5 +s3*91^4 +s4*91^3 +s5*91^2 +s6*91+s7
と表すことができる.そこで,ct に対応した数字列を
st = s0s1s2s3s4s5s6s7とする.
各si を再び0x20 〜 0x7a の文字に直してできる長さ8の文字列が,
t=t0t1t2t3t4t5t6 の暗号化文となる.
注意: si+32 がsi に対応した文字のASCII code となることに注意.
課題となるメッセージ: このレポートでは,次のような文章を暗号化して提出する.
・ 最初に「Hi! I am」という文が来て,その次に自分の名前を書く
.例えば, Hi! I am Taro Yamada. となる.
・ その後に20文字以上,100文字以下の英文を入れる.例えば,
Hi! I am Taro Yamada. baseball is exciting ! など.これを暗号化する.
・ これを7文字ずつ区切って暗号化し,それによってできた8文字
のブロックを並べることにより,暗号文ができる.
・注意: 元の文の全体の文字数が7の倍数ではない時,7文字ず
つ区切ると,最後が7文字にならない.このような時は,文の最
後に, Space やピリオドなどを付け加えて,全てを7文字のブ
ロックとなるようにする.

こんな感じのレポートが出たのですがさっぱり分かりません。
何かヒントのようなものでも教えていただければありがたいです。
長すぎてすいません
567デフォルトの名無しさん:04/09/12 23:06:22
この問題も問題だとは思うが(フェルマー数とか出されてもなあ...)、
「さっぱりわかりません」と来られると、RSAとはなにか、なんでRSAと
素数が関係あんのか、公開鍵暗号システムというのはどういう仕組みなのか
をいちいち説明せんといかんことになる予感。
なんか問題にある程度やりかた書いてあるし... しかしへたくそな文章の
問題だな。



568543:04/09/12 23:21:30
perl、sed、awkは実行系がないため、Javaで書かねばなりません。

今のところ、クラス名を検索し、マッチした箇所の { から、
} までの間のプロパティを
Replacer クラスの replacePattern メソッドを使って置換しようかと考えています。

もっときれいに書けないでしょうか。
569デフォルトの名無しさん:04/09/12 23:36:39
>>568

きれいに書くという意味が、perl並に少ない記述量で書くこと、という話
なら、絶対無理。
570569:04/09/12 23:43:53
ああ、一つ方法があったよ。
君が望む文法を所有する、JVM上で動作するスクリプト言語を作ればいい。
…あれ?JVM上で動くPerlってなかったっけ?
571デフォルトの名無しさん:04/09/12 23:46:07
JPerl
572デフォルトの名無しさん:04/09/13 00:42:05
>>568
そこまで頭の中ででき上がってるなら、宿題としては出来たも同然
だろう。おれもたぶんそんな感じに書くと思う。書いてからあまりに
遅かったら考え直すかもしれんけど、一番素直なやり方だよね。

ちなみにどのへんが醜いと思う?
573デフォルトの名無しさん:04/09/13 01:37:49
Javaの基礎をやってswingもかじった。
OOPをふんだんに使ったJavaの宿題をください。GUIも絡めてね。
ちなみに参考書籍はBlackbookとやさしいJava、あとJavaGUIプログラミングVol.1
です。お願いします。
574543:04/09/13 01:41:05
そうですか、安心しました。
while ループの中でフラグを使っているところがスマートではないかなと。
この辺りです。

while ((str=br.readLine()) != null) {
  if (patternMatcher("\\p{Space}*BODY\\p{Space}*\\{", str)) {
    flag = true;
  }
  if (flag) {
    if (patternMatcher("\\p{Space}*FONT-SIZE:.*", str)) {
      str = replaceFirst("\\p{Digit}+%", "replace", str);
    }
    if (patternMatcher("\\p{Space}*\\}\\p{Space}*", str)) {
      flag = false;
    }
  }
}
575デフォルトの名無しさん:04/09/13 02:16:52
>>573
iアプリで、画像が貼り付けれるボタンと文字入力コンポーネントを持ったツールキットを作れ。
コンポーネントの場所と大きさは座標で指定するものとする。
576デフォルトの名無しさん:04/09/13 10:00:48
大きさを指定して正方形または円を描く(TextFieldを用いる)
たのんだ。
577デフォルトの名無しさん:04/09/13 11:12:13
>>573
> GUIも絡めてね。
>>1
> ・GUI 関係などは基本的に放置
578デフォルトの名無しさん:04/09/13 11:57:43
>>563
問題は、>>565 のここんとこ
> 各人の秘密鍵は(n; d) であり,これによって暗号化するためには,Z(Φ(n))
> におけるe の逆元d を計算しなけらばならない.すなわち,
> ed∽1 mod Φ(n) = (p - 1)(q - 1)を満たすd を求めるわけだが,これは,
> 拡張ユークリッド・アルゴリズムによって計算できる.
> しかし,Java のBigInteger class を使えば,上記のように,
> modInverseで簡単に得られる.
と、「Nt^e mod n」「Ct^e mod n」の計算。ただし、
> 秘密鍵は,上で求めたd なので,
> ct = Nt^d mod n
> が暗号化された数字となる.
は、
> Ct = Nt^e mod n
> が暗号化された数字(暗号文)であり、.
> 秘密鍵は,上で求めた d なので,
> Nt = Ct^d mod n
> によって、復号が行なえる。
が正。
そんでもって、dを求めるのと、
Ct←Nt^e mod n
Nt←Ct^d mod n
の計算を行なえばよし。
579デフォルトの名無しさん:04/09/13 12:17:33
>>567
> この問題も問題だとは思うが(フェルマー数とか出されてもなあ...)、
> 「さっぱりわかりません」と来られると、RSAとはなにか、なんでRSAと
> 素数が関係あんのか、公開鍵暗号システムというのはどういう仕組みなのか
> をいちいち説明せんといかんことになる予感。
問題文を読んだ感じだと、出題者自身が解ってない模様。
> 必ず,
> 91^7 = 51676101935731 < n < 4702525276151521 = 91^8
> となるように選んである.
とか書いてあるが、
「91^7 = 51676101935731 < n」は必須だが、
「n < 4702525276151521 = 91^8」に関しては、
暗号文の長さを8バイトに制限するだけの理由。
> ct = Nt^d mod n
> が暗号化された数字となる.
というのも初歩的なミス。
単に「BigInteger を使って数論アルゴリズムを書く」だけの課題と思われ。
580daigakusei:04/09/13 21:39:51
BigIntegerを使ったことがないのに問題出されたもので、みんなお手上げなんです。
文字をどうやって暗号にすればいいのか分かりません。RSAについては授業で
やったので理屈はわかるんですが、javaでやれとなるとどうやったらいいものか。
581デフォルトの名無しさん:04/09/13 22:14:21
> BigIntegerを使ったことがないのに問題出されたもので、
いや、漏れも使ったことない(^_^!)
> 文字をどうやって暗号にすればいいのか分かりません。
原理の問題と効率の問題をごっちゃにして出題されとるから分からんのだよな。
単純に8バイトづつに切って符号なし整数データとして解釈しちまえば簡単なのだ
(なまじ91進数データとかだと思うから分かりづらい)。
なお、8ビット8バイト符号なし整数は64ビットだから
十進数20桁くらいになるので、pおよびqとして
それぞれ十進10桁くらいの整数を用意しなければならず、
そのためには百万以下の素数の表くらいは
あらかじめ作っておいたほうがいい。
 ちなみに題意に沿って文字を数値化すると、
0〜nバイトめをb[n]で表すとして、
Nt = (((((((b[0]-0x20)*91+(b[1]-0x20))*91+(b[2]-0x20))*91+(b[3]-0x20))*91+
(b[4]-0x20))*91+(b[5]-0x20))*91+(b[6]-0x20))*91+b[7]-0x20;
かなんかの形になるハズである。
逆にCtから求めたNtからbを求めるときには、
for (int cnt = 7;cnt >= 0;cnt -= 1) {
  b[cnt] = Nt % 91 + 0x20;
  Nt = (Nt - (b[cnt] - 0x20)) / 91; // 汚ねぇコードだな。
}
かなんかの形になる。
 後は任せた。がんばれ。
582daigakusei:04/09/13 22:47:02
p=15486181,q=4256261というのが与えられているんです。

こんな早くの反応すごいですね。どうもです。

583初学者:04/09/14 15:53:05
下記のようなロトくじの番号をランダムに6つ
(白は1-49から5つ、赤は1-42から1)取り出す問題なんですが、
For文で下記のWhite1-5の処理を簡潔に書き換えようとして
つまづいてます。いいやり方があれば教えてください。
584583:04/09/14 15:53:43
public class Powerball{
public static void main(String [] args){
int white1, white2, white3, white4, white5, red;
red = (int) (Math.random() * 42 + 1);
white1 = (int) (Math.random() * 49 + 1);
do {
white2 = (int) (Math.random() * 49 + 1);
}while(white1 == white2);
do{
white3 = (int) (Math.random() * 49 + 1);
}while(white1 == white3 || white2 == white3);
do{
white4 = (int) (Math.random() * 49 + 1);
}while(white1 == white4 || white2 == white4 || white3 == white4);
do {
white5 = (int) (Math.random() * 49 + 1);
}while(white1 == white5 || white2 == white5 || white3 == white5 || white4 == white5);
System.out.println("White balls: " + white1 + " " + white2 + " " + white3 + " " + white4 + " " + white5);
System.out.println("Red ball: " + red);
}
}
585デフォルトの名無しさん:04/09/14 17:00:29
>>583
Set whites=new TreeSet();
while(whites.size()<5) {
  Integer value=new Integer((int)(Math.random()*49+1));
  whites.add(value);
}
Iterator it=whites.iterator();
System.out.println("White balls: " + it.next() + " " + it.next() + " " + it.next() + " " + it.next() + " " + it.next());
586デフォルトの名無しさん:04/09/14 17:06:43
その初学者というネーミングからして、釣り質問のようにも
思うのですが。。。。
587daigakusei:04/09/14 17:24:25
RSAの秘密鍵(n,d)のdはどういうソースになるんでしょうか?
588デフォルトの名無しさん:04/09/14 17:24:52
>>586
> その初学者というネーミングからして、釣り質問のようにも
> 思うのですが……
 黙って釣られてあげましょう(^_^)v

>>583
「生成して、すでにあった値と一致したら捨てる」という発想に問題あり。
1)49要素の配列 int v[] に、1から49までの値をセットする。
2)以下を実行。
for (int x = 0;x < 48;x += 1) {
  int pos = x 以上 48 以下のランダムな数;
  v[x] と v[pos] の値を入れ替え。 // x == pos の場合もあるが気にするな。
}
 これで v[] の中身がシャッフルされる。
3) v[0] から v[4] までの五個の値を使う。

 カードゲームなんかのプログラムでは定跡。統計プログラム(検定とか)
にも使えるので覚えておこうね。
589デフォルトの名無しさん:04/09/14 17:25:28
【問題】
たとえば、SEND + MORE = MONEYのように、各文字に数字を割り当てて
計算結果が合うような、文字と数字の割り当てを求めるJavaアプレットを作成せよ。
違う文字には違
う数字を当てる。また、各行の左端の文字は0ではないとする。

こんな宿題がでました。どなたか、お教えください。
590デフォルトの名無しさん:04/09/14 17:47:53
> RSAの秘密鍵(n,d)のdはどういうソースになるんでしょうか?
 おいおい、「RSAについては授業でやったので
理屈はわかるんですが」てぇ割には頼りないな。(-_-!)

 n のオイラー関数φ(n)(問題文ではΦ(n)と書いてある。普通は小文字だ)は、
n が素数 pq の積で表されるときφ(n)=(p-1)(q-1) となる。
ここでφ(n)を法として ed = 1 となる d(ただし 0 <= d < φ(n)。
e との積が単位元である 1 になるわけだから、d は mod φ(n)における
e の逆元)を求める必要があるわけだが、問題文に
>>565
> mod m での積の逆元を計算してしまうmodInverse というものが含まれている.
 (中略)
> しかし,Java のBigInteger class を使えば,上記のように,modInverse
> で簡単に得られる.
と書いてあるわけで、BigIntegerクラスの modInverse()メソッドの
使い方を調べろ、ということ。
591589:04/09/14 17:50:10
書き忘れましたが、提出期限が今週の金曜です。勝手ですいませんがお願いします。
592daigakusei:04/09/14 17:55:42
>590
できました。
593デフォルトの名無しさん:04/09/14 19:59:50
困ってます。
TreeSetにd2クラスのxの値が同じものが追加されませんどうしてでしょう?
教えてくさい。

public class tTree {
public static void main(String[] args) {
TreeSet ts = new TreeSet(new cmpD2());
d2[][] d = new d2[5][5];
Iterator itr;
d2 tmp;
for ( int i = 0; i < 5; i++ ){
for ( int j = 0; j < 5; j ++ ){
d[i][j] = new d2(i,j);
ts.add(d[i][j]);
}
}
itr = ts.iterator();
while(itr.hasNext()){
tmp = (d2)(itr.next());
System.out.println(tmp.x + "," + tmp.y);
}
}
}
594デフォルトの名無しさん:04/09/14 20:01:45
続き
--d2-----------
public class d2 {
int x,y;
d2(int x, int y){
this.x = x;
this.y = y;
}
}

--cmpd2----------
public class cmpD2 implements Comparator {
public int compare(Object arg0, Object arg1) {
return ((d2)arg0).x - ((d2)arg1).x;
}
}
595デフォルトの名無しさん:04/09/14 20:11:20
>>593
return ((d2)arg0).x - ((d2)arg1).x;

int sub = ((d2)arg0).x - ((d2)arg1).x;
return sub == 0 ? 1 : sub;
596デフォルトの名無しさん:04/09/14 20:26:04
でもそうすると
sgn(compare(x, y)) == -sgn(compare(y, x))
が保障できなくなってしまうような気がします。
どうして、compareで同じになるとTreeSetに追加されないのでしょう?
そのような仕様には思えないのですが。。。
597デフォルトの名無しさん:04/09/14 20:33:45
>>596
仕様は Set と List インタフェースの違いを調べてみて。
あー、Set は TreeSet が実装しているインタフェースね。
compare で 0 を返さないように書いたのは少しトリッキー。
598デフォルトの名無しさん:04/09/14 20:49:22
>>597
ありがとうございました。
しかし、Setインターフェースのaddのところを見てもどうしても
compare関数の戻り値によってTreeSetに格納するかしないかを
決めるようには考えられず困ってます。
--Setインターフェースのadd抜粋-------------
(o==null ? e==null : o.equals(e)) に該当する要素 e が
なかった場合は、指定された要素 o をセットに追加します。
-------------
599デフォルトの名無しさん:04/09/14 21:01:28
>>589
こりゃまた古臭い問題だな。(-_-!)
二十年前ならけっこう苦労させられただろうが、
今は計算機環境がぜんぜん違う。
マシンパワーを活用しろ。それがJava的な解決法だ。
出題者の意図とはたぶん違うだろうが、以下の方法が簡単。
1)まず、文字列の形で数式を読み込んで計算し、正しいかどうか判定する
電卓プログラムを書け。
2)次に、「SEND+MORE=MONEY」みたいな形の式を読んで、各数字のすべての
組合せについて、(変数を含まない)数式を生成するプログラムを書け。
虫食算の場合、数字は0を含めても10個しかないので、10の階乗通りだから、
百万行かそこらだ。たかだか数十MB程度である。
3)(2)で生成したデータを(1)のプログラムでチェックし、合っているものだけを
出力せよ。
以上。
600デフォルトの名無しさん:04/09/14 21:28:01
>>598
きっちりした香具師だな。

Comparator の説明
たとえば、(a.equals((Object)b) && c.compare((Object)a, (Object)b) != 0) である 2 つのキー
a と b をコンパレータ c を持つソートセットに追加する場合、2 回目の add オペレーションは
false を返し、ソートセットのサイズは増加しません。

具体的には TreeSet#add は内部に保持する TreeMap#put を呼び出し、containesKey
メソッドの結果が true であれば重複とみなされる。TreeMap の containesKey 実装は
comparator が指定されていれば compare メソッドを使用し、Compareble が要素に
実装されていれば compareTo メソッドが使用されるように動作する。
601デフォルトの名無しさん:04/09/14 21:31:22
>>599
忘れてた。
1)原数式(「SEND+MORE=MONEY」)は、
逆ポーランド記法(「SEND MORE+MONEY=」)で入力する。
2)最初に各文字を出現順に 0 〜最大 9 までの数字で置き換え
(「SEND MORE+MONEY=」→「0123 4561+45217=」)、
生成した組合せを配列にぶち込んだら、
その数字を配列の添字とみて置換を行なう。
上記二点でプログラムは相当に簡単になるはず。
602583:04/09/14 21:40:08
>> 586
釣りじゃなくてマジです。すんません。

>> 585, 588
参考になりました。ありがとうございます。

603デフォルトの名無しさん:04/09/14 22:44:51
>>600
釣りとかじゃなくてほんとに分からないんです。
c.compare((Object)a, (Object)b) が0

a.equals((Object)b)がfalse
の時
(a.equals((Object)b) && c.compare((Object)a, (Object)b) != 0)

false && false で false になりますよね。
つまりtrueではないということでaとbは追加されると思うのです。

!(a.equals((Object)b) && c.compare((Object)a, (Object)b) != 0)
の時にaの次にbを追加しようとするとbは追加できないというのが正しいような気
がします。
ともあれ、とりあえず動かせるようにがんばってみます。
ありがとうございました。
604デフォルトの名無しさん:04/09/14 23:03:21
>>603
TreeSet は compare(compareTo)メソッドしか見てないから。
605デフォルトの名無しさん:04/09/14 23:30:34
606デフォルトの名無しさん:04/09/14 23:32:40
>>605
すごいところの大学だねー
607デフォルトの名無しさん:04/09/14 23:33:39
>>605
ねーねー、冬もちゃんと授業あるの?
雪がいっぱいで通えないっていう風説を聞いたことがあるんだけど…
608デフォルトの名無しさん:04/09/15 00:00:13
>>604
書き直してうまくいきましたので、ソースアップします。
public class tTree {
public static void main(String[] args) {
TreeSet ts = new TreeSet(new cmpD2());
d2[][] d = new d2[5][5];
Iterator itr;
d2 tmp2;
d2 tmp;
for ( int i = 0; i < 5; i++ ){
for ( int j = 0; j < 5; j ++ ){
d[i][j] = new d2(i,j);
ts.add(d[i][j]);
}
}
tmp2 = new d2(0,0);
ts.add(tmp2);
itr = ts.iterator();
while(itr.hasNext()){
tmp = (d2)(itr.next());
System.out.println(tmp.x + "," + tmp.y);
}
}
}
609デフォルトの名無しさん:04/09/15 00:02:13
public class d2 {
int x,y;
d2(int x, int y){
this.x = x;
this.y = y;
}
public int hashCode()
{return x << 16 + y;}
public boolean equals(Object o)
{
System.out.println("equal passed");
if(x == ((d2)o).x && y == ((d2)o).y)
{return true;}
else{return false;}
}
}
610デフォルトの名無しさん:04/09/15 00:03:36
public class cmpD2 implements Comparator {
public int compare(Object arg0, Object arg1) {
int tmp = ((d2)arg0).x - ((d2)arg1).x;
if( tmp != 0 ){return tmp;}
else if (((d2)arg0).equals(arg1)){return 0;}
else{return ((d2)arg0).hashCode() - ((d2)arg1).hashCode();}
}
}
611デフォルトの名無しさん:04/09/15 00:19:24
>>608
要素に hashCode、equals メソッドも追加されて綺麗になったね。

if(x == ((d2)o).x && y == ((d2)o).y)
{return true;}
else{return false;}

は冗長だから、このほうが普通の書き方では?
return x == ((d2)o).x && y == ((d2)o).y;

で、d2 クラスも提供されているクラスじゃなくて自分で作成するクラスだと
思うので Comparator の別クラスやめて d2 に Compareble インタフェース
実装して compareTo メソッドのほうが綺麗では?

んで、慣例的に Java のクラス名は大文字で始まる。
612デフォルトの名無しさん:04/09/15 00:24:42
ごめん、間違い見つけてしまいました。
d2は以下のようにしないとhashCode()が同じになる可能性があるので
だめっぽいです。どうすればいいんだろう?
compareしか見ないんじゃjavaのTreeSet使えないぞ!!SUN!!

※どうしてComparebleインターフェースを使わないかというと
クラスはそのままで、Comparatorだけでいろいろとソートの仕方を
変えたいからです。オブジェクトにDBの1カラムのデータを格納し、
TreeSetでインデックスを実現したいと考えてます。
613デフォルトの名無しさん:04/09/15 00:32:14
>>612
ん? だから compare をそのように実装すればいいのでは?
実装の契約は破るかもしれんが、Javadoc コメントに契約を
破っていることを明記すればいい。少なくとも俺はそうしてる。
614デフォルトの名無しさん:04/09/15 01:05:37
多分こうすればよいような気がします。
バグがあったら教えてください。
public class d2 {
int x,y;
d2(int x, int y){
this.x = x;
this.y = y;
}
public int hashCode()
{return x << 16 + y;}
public boolean equals(Object o)
{
if(x == ((d2)o).x && y == ((d2)o).y){return true;}
return false;
}
public int subObj(d2 o){
int sub;
if(x > o.x){return 1;}
else if(x < o.x){return -1;}
else if(y > o.y){return 1;}
else if(y < o.y){return -1;}
return 0;
}
}
615デフォルトの名無しさん:04/09/15 01:06:38
public class cmpD2 implements Comparator {
public int compare(Object arg0, Object arg1) {
int tmp = ((d2)arg0).x - ((d2)arg1).x;
if( tmp != 0 ){return tmp;}
return ((d2)arg0).subObj((d2)arg1);
}
}
616デフォルトの名無しさん:04/09/15 01:46:32
>607
冬もちゃんと授業ありますよ。今年の冬は雪降り過ぎて都市機能が麻痺したけど。
誰かできないですかねー、バカなもんで。
617デフォルトの名無しさん:04/09/15 03:21:22
これは....代数の問題なんだよな? プログラミング講座じゃなくて。
なんか問題の最後の方がプログラミング講座っぽいよなあ
618デフォルトの名無しさん:04/09/15 07:24:41
>>617
> なんか問題の最後の方がプログラミング講座っぽいよなあ
ひょっとして、
>>589

> Javaアプレットを作成せよ。
か?
「代数の問題」つーか、有限組合せ数学の問題。
組合せ生成とバックトラックを用いた、
わりと標準的なプログラミングの例題だな。
「8-Queen」とか「ナイトの巡回」とか、
昔はよくやったもんだ(^_^)b。
619デフォルトの名無しさん:04/09/15 09:45:13
=618
スマソ。勘違い。
「代数系」つーのとはちょっと違うような……
整数論だろ?
620デフォルトの名無しさん:04/09/15 10:25:00
>>601
    // 「SEND MORE+MONEY=」→「0123 4561+45217=」の部分。
    final String kigou = "+-*/= ";
    final String numeric = "0123456789";
    String form = "SEND MORE+MONEY=";
    String charlist = new String();
    for (int cnt = 0;cnt < form.length();cnt += 1) {
      if (kigou.indexOf(form.charAt(cnt)) < 0) {
        if (charlist.indexOf(form.charAt(cnt)) < 0) {
          charlist += form.charAt(cnt);
        }
      }
    }
    String form2 = new String();
    for (int cnt = 0;cnt < form.length();cnt += 1) {
      int pos = charlist.indexOf(form.charAt(cnt));
      if (pos < 0) {
        form2 += form.charAt(cnt);
      } else {
        form2 += numeric.charAt(pos);
      }
    }
621デフォルトの名無しさん:04/09/15 10:25:25
  // 英数字並びと各英数字にあてはまる値から、英数字並び全体の値を求める。
  public static int val( int combi[], String str ) {
    final String numeric = "0123456789";
    int ret = 0;
    for (int cnt = 0;cnt < str.length();cnt += 1) {
      ret = ret * 10 + combi[numeric.indexOf(str.charAt(cnt))];
    }
    return ret;
  }

 あとは
  int combi[] = new int(charlist.length());
を用意して、ここにすべての組合せを生成し、
  val(combi, "0123") + val(combi, "4561") == val(combi, "45217")
となるcombi[]の内容を出力すればよし。
622デフォルトの名無しさん:04/09/15 12:38:30



問題と少し。。。。



623割り当てアプレットその1:04/09/15 12:58:36
>>589
public void init() {
final JTextField tfd=new JTextField("SEND + MORE = MONEY");
final JTextArea tarea=new JTextArea();
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(tfd, BorderLayout.NORTH);
this.getContentPane().add(tarea);
tfd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tarea.setText( start(tfd.getText()) );
}
});
setVisible(true);
}
624割り当てアプレットその2:04/09/15 12:59:55
String start(String text) {
StringTokenizer st=new StringTokenizer(text, "+=", true);
if(st.countTokens()!=5) return "式が不正";
if(!st.nextToken().trim().matches("[A-Za-z]+")) return "式が不正";
if(!st.nextToken().trim().matches("\\+")) return "式が不正";
if(!st.nextToken().trim().matches("[A-Za-z]+")) return "式が不正";
if(!st.nextToken().trim().matches("\\=")) return "式が不正";
if(!st.nextToken().trim().matches("[A-Za-z]+")) return "式が不正";
List charas=new ArrayList();
for(int i=0; i<text.length(); ++i) {
char c=text.charAt(i);
if(!Character.isLetter(c)) continue;
Character obj=new Character(c);
if(charas.contains(obj)) continue;
charas.add(obj);
}
int count=charas.size();
if(count>10) return "文字が十種類以上で割り当てオーバー";
return allocate(text, charas, count);
}
625割り当てアプレットその3:04/09/15 13:03:31
String allocate(String text, List charas, int count) {
loop: for(long figures=1023456789L; figures<9876543210L; figures += Math.pow(10,(double)(10-count))) {
char[] digit=new char[count];
long number=figures; long ptr=1000000000L; int bitmap=0;
for(int i=0; i<count; ++i) {
int num=(int)(number/ptr); int bit=0x01<<num;
if((bitmap&bit)!=0) continue loop;
bitmap|=bit; digit[i]=Character.forDigit(num, 10);
number%=ptr; ptr/=10;
}
StringBuffer expres=new StringBuffer(text);
for(int i=0; i<text.length(); ++i) {
int index=charas.indexOf(new Character(text.charAt(i)));
if(index==-1) continue;
expres.setCharAt(i, digit[index]);
}
StringTokenizer pick=new StringTokenizer(expres.toString(), "+=", false);
int num1=Integer.parseInt(pick.nextToken().trim());
int num2=Integer.parseInt(pick.nextToken().trim());
int num3=Integer.parseInt(pick.nextToken().trim());
if(num1+num2==num3) {
StringBuffer sb2=new StringBuffer();
sb2.append("割り当て式 " + expres.toString() + "\n");
sb2.append("文字への数字割り当て表\n");
for(int i=0; i<charas.size(); ++i) {
sb2.append(charas.get(i) + "=" + digit[i] + " ");
}
return sb2.toString();
}
}
return "正しい割り当ては無い";
}
626その4:04/09/15 13:06:55
>>589
問題文通りに、各『行』の左端の文字が0でなく
A+B=Cの形式の式のみに対応した文字数字割り当てのアプレットプログラム
627デフォルトの名無しさん:04/09/15 14:57:32
>>617
代数のレポートなんです。
>>619
代数系の授業なんですけど、整数論をやってました。

このプログラム誰かできないですかねー??
628javaわかんない:04/09/15 15:26:49
お願いします!
javaAppletで数当てゲームの作り方教えて下さい。
内容は
当てる数字は、ランダムに選び出された4つの数字(1〜9)までとします。
3385や2582みたいに 同じ数字を2つ以上使った答えはダメ。
入力した数字と答えの数字の 桁 数の両方がすべて合ったら4H0Bと表示
入力した数字と答えの数字の 数はすべて合って桁がすべて違ったら 0H4Bと表示
以上です。
ずっと考えているんですけど???です。(泣)
なるべく 簡単目な回答教えて下さい
629589:04/09/15 15:39:11
627は別人
>>617
情報処理のレポートです。
今、620-621を参考にさせてもらってます。
あと、623の「JTextField」ってTextFieldですか?
そのままだとエラーがでるので。
630デフォルトの名無しさん:04/09/15 15:53:19
>>628
ロジックの部分のコードがあればAppletに
仕立てるのは自分で出来るのか?
631javaわかんない:04/09/15 16:01:32
>>630
多分???大丈夫だと思うんですけど
632デフォルトの名無しさん:04/09/15 16:26:47
633javaわかんない:04/09/15 16:39:08
ありがとう すっごく嬉しいです。
変なサイトに飛んだんで ちょっと焦りましたけど・・・
634デフォルトの名無しさん:04/09/15 16:43:11
>>627
> このプログラム誰かできないですかねー??
と言っているのが
>>605
> 問題はhttp://math.cs.kitami-it.ac.jp/~sannami/math-courses/daisuukei.htm
のことを指しているのなら、
>>563>>567>>578 〜 583、>>587>>590 を参照。
635デフォルトの名無しさん:04/09/15 16:51:55
ここってサーブレットとかはどうなの?
636デフォルトの名無しさん:04/09/15 17:07:42
宿題?
だれか機嫌がよければ答えるんじゃないの?
637デフォルトの名無しさん:04/09/15 17:22:09
GUIはNGだが、サーブレットは有りなのかな、とちょっと疑問に思っただけ。
638デフォルトの名無しさん:04/09/15 17:32:29
>>634
参照してもわかんないんです。友達に聞いてもみんな全滅で、どうしよもない。
誰かやってください。
639デフォルトの名無しさん:04/09/15 17:36:23
>>638
そりゃどうしようもないんじゃないの?
640デフォルトの名無しさん:04/09/15 17:36:43
>>637
GUIがNGというのも意味不明だな。
641デフォルトの名無しさん:04/09/15 17:37:17
1に書いてはあるんだが。
642デフォルトの名無しさん:04/09/15 18:19:59
>>638
    BigInteger p = new BigInteger("15486181");
    BigInteger q = new BigInteger("4256261");
    BigInteger e = new BigInteger("65537");
    BigInteger phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
    BigInteger d = e.modInverse(phi);
    BigInteger n = p.multiply(q);
    /* ちょっと急いでいる。 */
    /* 文字列を8文字づつに切って数値Ntに直すところは自分で何とかしろ。 */
    BigInteger Nt = new BigInteger("12345"); // ここだ。
    BigInteger Ct = Nt.modPow(e, n);
    Nt = Ct.modPow(d, n);
    /* Ntを文字列に戻すところも自分で何とかしろ。 */
643デフォルトの名無しさん:04/09/15 19:15:32
>>629
エラーが出る?
JAppletなんですが。。。
今はAWTではなくSwingを使うべきでしょう。
644デフォルトの名無しさん:04/09/15 19:41:16
>>629
と言うか、>>623-625のコードを

public class MyApp extends JApplet {



}

の中に入れてくれ。JAppletクラスだと分かってくれても。。。
645デフォルトの名無しさん:04/09/15 23:14:14
>>642
>/* 文字列を8文字づつに切って数値Ntに直すところは自分で何とかしろ。 */
>/* Ntを文字列に戻すところも自分で何とかしろ。 */
ここが一番問題なんです。どこまでもすんませんが。
ホントバカなんです、みんな。北大生ならできんのかなぁ・・・
646589:04/09/15 23:16:57
すみません。初心者なもので。
今、そのようにしてコンパイルしてみたのですが、
「List」が曖昧だと弾かれています。ちなみにインポートしているのは
javax.swing.*
java.awt.Container.*
java.util.*
java.awt.event.*
です。どうすればよいでしょうか?
647589:04/09/15 23:22:44
すみません
java.awt.Container.*

java.awt.*
のまちがいです。
648デフォルトの名無しさん:04/09/15 23:25:04
java.awt.Container.* ってありなのか?
649デフォルトの名無しさん:04/09/15 23:28:34
>>647
インポートしてる内容をみせるってことは、そこが原因だと
気づいてるんだろ?

じゃあなんでjava.utilとjava.awtの両方にListというクラスが
あることに気づかないんだ。

ソース上でListをつかってるとこ全部、java.util.Listかjava.awt.Listの
どっちかに書き換えろ。
あるいは * 使ってまるごとimportするのをやめろ。

650デフォルトの名無しさん:04/09/16 00:33:18
>>646
import java.util.List;  ← こうする。
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

インポートはこうしてください。
あと>>623-625のアプレットの操作法ですが、テキストフィールドに
A+B=C形式の好きな文字式をインプットして(初期文字列はある)
リターンキーを押してください。
しばらく待ってると下のテキストエリアに結果が出ます。
文字数が多いほど解析時間がかかります。
A,B,Cいずれも大文字小文字のアルファベットだけです。
651デフォルトの名無しさん:04/09/16 00:43:00
あと、一旦データエリアに全ての組み合わせを格納してってやり方は
事実上不可能です。
90億のlong値をストックしなければならないのですから。
652デフォルトの名無しさん:04/09/16 07:53:19
人任せで優をもらおうとしてるやつに誰が教えるか
653589:04/09/16 08:21:28
>>649
どちらにもListがあるのは気づいたんですが、どうすればいいかが
わからなかったんです。
>>650
ありがとうございました。動きました。
654デフォルトの名無しさん:04/09/16 10:28:49
>>645
  public static void main( String[] args ) {
    BigInteger p = new BigInteger("15486181");
    BigInteger q = new BigInteger("4256261");
    BigInteger n = p.multiply(q);
    BigInteger e = new BigInteger("65537");

    /* 文字列を7文字づつに切って数値Ntに直す。 */
    final int width = 7;
    String str = "quick brown fox jumps over the lazy dog.";
655デフォルトの名無しさん:04/09/16 10:29:13
    byte [] target = str.getBytes();
    for (int pos = 0;pos < target.length;pos += width) {
      byte [] bufx = new byte[width];
      for (int cnt = 0;cnt < width;cnt += 1) {
        bufx[cnt] = 0x20;
      }
      for (int cnt = 0;(cnt < width) && ((pos + cnt) < target.length);cnt += 1) {
        bufx[cnt] = target[pos + cnt];
      }
      BigInteger Nt = BigInteger.ZERO;
      BigInteger C91 = new BigInteger("91");
      for (int cnt = 0;cnt < width;cnt += 1) {
        Nt = Nt.multiply(C91).add(new BigInteger("" + (bufx[cnt] - 0x20)));
      }
      BigInteger Ct = Nt.modPow(e, n);
      BigInteger phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
      BigInteger d = e.modInverse(phi);
      Nt = Ct.modPow(d, n);
656デフォルトの名無しさん:04/09/16 10:29:46
      /* Ntを文字列に戻す。 */
      BigInteger C32 = new BigInteger("32"); // == 0x20
      byte [] bufy = new byte[width];
      for (int cnt = width - 1;cnt >= 0;cnt -= 1) {
        bufy[cnt] = Byte.parseByte(Nt.remainder(C91).add(C32).toString());
        Nt = Nt.divide(C91);
      }
      String s = new String(bufy);
      System.out.print(s);
    }
    System.out.println();
  }
657デフォルトの名無しさん:04/09/16 10:58:40
学校の課題なんですが、分からないので是非解答してください、お願いします。
問題 
 入力されたテキストの内容を操作するjavaアプレットを作成せよ。ここでいう操作とは、文字列の置換を指す。
 javaアプレットは以下の機能を兼ね備えているものとする。
     1.テキストは、テキストボックスに入力される。
     2.被置換文字列、置換文字列はテキストとは別のテキストボックスに入力される。
     3.置換結果は、別のウィンドウに表示される。
658デフォルトの名無しさん:04/09/16 11:30:41
>>651
> あと、一旦データエリアに全ての組み合わせを格納してってやり方は
> 事実上不可能です。
> 90億のlong値をストックしなければならないのですから。
っつーのが、
>>625
> loop: for(long figures=1023456789L; figures<9876543210L; figures += Math.pow(10,(double)(10-count))) {
のこと(9876543210-1023456789)を指しているのなら、
組合せの生成のやりかたがまずいはず。
10!は362万とちょっとだから、
「左端に0が来ない」という条件で絞り込めば、
数十万くらいには減らせるのでは。
659デフォルトの名無しさん:04/09/16 11:41:06
>>657
GUI部分は略。
文字列 s1 の patx とマッチした部分を paty で置き換えてs2に格納する場合は、
StringBuffer sb = new StringBuffer(s1);
while((int pos = sb.indexOf(patx)) >= 0) {
  sb.replace(pos, pos + patx.length(), paty);
}
String s2 = new String(sb);
かなんかで可能。動作確認はしていないので、注意すること。
660デフォルトの名無しさん:04/09/16 12:11:39
657の方に便乗なのですが私も学校の課題でNーQueenの問題が出されたのですがさっぱりです。
どなたか分かる方プログラムを教えていただけませんか?
661デフォルトの名無しさん:04/09/16 12:52:10
>>658
0から9までの数字から7個の数字を選ぶ順列は、
604800個あった。
662デフォルトの名無しさん:04/09/16 12:54:13
>>660
回転・鏡像のチェックはあるのかないのか?
663デフォルトの名無しさん:04/09/16 14:28:19
>>660
パズル「8クイーン問題」をコンピュータに解かせる
http://www.cvl.iis.u-tokyo.ac.jp/~nakaoka/misc/old/plab/java/queen/nqueen.html
664デフォルトの名無しさん:04/09/16 14:57:11
>>659
それ、replaceのあとでpos+=patx.lengthしないと
"a"を"aa"で置換するってときにはまらないかな。
665デフォルトの名無しさん:04/09/16 15:24:25
663の方レスありがとうございます。ためしにその「8クイーン問題」を添付してみたのですが動いてくれませんでしたTwT
N×Nのチェス盤面にクイーンをN駒ならべ、どの2つの駒も互いに張り合わない配置を全て求めるJava アプレットを作成せよ。
という問題なのですがいまのところWeb上で公開しているソースで動いてくれませんでした困っています
666デフォルトの名無しさん:04/09/16 15:59:33
663=662
>>665
> ためしにその「8クイーン問題」を添付してみたのですが動いてくれませんでしたTwT
たぶん画像が要るはずだ。ソースだけでは動かん。
> N×Nのチェス盤面にクイーンをN駒ならべ、どの2つの駒も互いに張り合わない
> 配置を全て求めるJava アプレットを作成せよ。
N=8(いわゆる8-Queen)でも、たしか(回転・鏡像を区別して)92個だか解があり、
アプレットだとファイルに吐くわけにいかないので出力形式を工夫しなければならず、
ここでコードを示すのは無理。
解を求めるロジックだけを示すにしても、
1)回転・鏡像を区別するのかしないのか。回転・鏡像によって重なるものを示すのか。
2)生成しながらバックトラックを使うか、全部生成してから篩うのか。
によってプログラムは変わってくる。
具体的に何をやりたいのか示してくれ。
667デフォルトの名無しさん:04/09/16 16:01:47
>>664
盛大にはまります(^_^!)
indexOf()の引数(探索開始点)も含めて改修しないとダメ。
668デフォルトの名無しさん:04/09/16 16:15:16
>>654
ありがとございます。
Ctを常に8個の文字列に直すにはどうすればいいのでしょう??
669デフォルトの名無しさん:04/09/16 16:24:12
=668
できました。
670Nクイーン その1:04/09/16 17:57:28
>>660
static int size=9; ←ここにマス目の個数(縦横同じ)

public void init() {
List pointList=new ArrayList();
Table table=new Table(size);
int hiera=0;
for(int i=0; i<table.square.length; ++i) {
int[] idxs=putQueen(i, (Table)table.clone(), 0);
block: {
if(idxs==null) break block;
Arrays.sort(idxs);
Iterator it=pointList.iterator();
while(it.hasNext()) {
if(Arrays.equals((int[])it.next(), idxs)) break block;
}
pointList.add(idxs);
}
}
Iterator it=pointList.iterator();
int count=0;
while(it.hasNext()) {
System.out.print("パターン"+(++count)+"=");
int[] array=(int[])it.next();
for(int i=0; i<array.length; ++i) {
System.out.print("("+(array[i]%size)+" , "+(array[i]/size)+") ");
}
System.out.println("");
}
}
671Nクイーン その2:04/09/16 17:58:28
int[] putQueen(int index, Table table, int hiera) {
table.put(index, size, hiera);
if(hiera==size-1) return table.putIdxs;
for(int i=0; i<table.square.length; ++i) {
if(!table.isPut(i)) {
int[] idxs=putQueen(i, (Table)table.clone(), hiera+1);
if(idxs!=null) return idxs;
}
}
return null;
}
672Nクイーン その3:04/09/16 18:01:35
class Table implements Cloneable {
boolean[] square;
int[] putIdxs;
Table() { }
Table(int size) {
square=new boolean[size*size];
putIdxs=new int[size];
}
void put(int index, int size, int hiera) {
putIdxs[hiera]=index;
int posX=index%size, posY=index/size;
int x=0, y=posY;
while(x<size) { square[y*size+x]=true; ++x; }
x=posX; y=0;
while(y<size) { square[y*size+x]=true; ++y; }
x=posX; y=posY; while(x>0 && y>0) { --x; --y;}
while(x<size && y<size) { square[y*size+x]=true; ++x; ++y; }
x=posX; y=posY; while(x<size && y>0) { ++x; --y; }
while(x>=0 && y<size) { square[y*size+x]=true; --x; ++y; }
}
boolean isPut(int index) { return square[index]; }
public Object clone() {
Table newTable=new Table();
newTable.square=new boolean[square.length];
System.arraycopy(square, 0, newTable.square, 0, square.length);
newTable.putIdxs=new int[putIdxs.length];
System.arraycopy(putIdxs, 0, newTable.putIdxs, 0, putIdxs.length);
return newTable;
}
}
673Nクイーン その4:04/09/16 18:04:16
>>680
import java.util.*;
import javax.swing.*;
public class MyApp extends JApplet {



}

上の3つのコードを上記のカッコ内に入れてください。
アプレットですが出力はコンソールですので。。。。
674:Nクイーン 訂正:04/09/16 18:17:36
>>665
あと、普通のアプレットソフトなら、>>670のpublic void init()の中身を
下記>>675以下のコードに変更してください。
このアプレットの操作法は、下の段にあるテキストフィールドに
半角で数字を記入して、エンターキーを押すと(数字以外を書くと何もしない)
演算が始まって、しばらく待つと上段のコンボボックスに存在するだけの数の
組み合わせパターンが登録されます。(アイテムの名前は意味不明な文字列に
なりますが)、どれかのアイテムを選ぶと真ん中のエリアに
正しいクイーン配置図が表示されます。テキストフィールドの数値を変更して
エンターキーを押すと再度演算を開始します。
static int size=9; //←ここに縦横共通のマス目の数を入れる

public void init() {
final List pointList=new ArrayList();
final JPanel panel=new JPanel();
final JComboBox box=new JComboBox();
final JTextField tfd=new JTextField("9");
getContentPane().add(panel);
getContentPane().add(box, BorderLayout.NORTH);
getContentPane().add(tfd, BorderLayout.SOUTH);
676Nクイーンその1の訂正 その2:04/09/16 18:20:18
tfd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
size=Integer.parseInt(tfd.getText());
if(size<0) throw new Exception();
} catch (Exception ex) {
tfd.setText("");
return;
}
pointList.clear();
Table table=new Table(size);
int hiera=0;
for(int i=0; i<table.square.length; ++i) {
int[] idxs=putQueen(i, (Table)table.clone(), 0);
block: {
if(idxs==null) break block;
Arrays.sort(idxs);
Iterator it=pointList.iterator();
while(it.hasNext()) {
if(Arrays.equals((int[])it.next(), idxs)) break block;
}
pointList.add(idxs);
}
}
box.setModel(new DefaultComboBoxModel(pointList.toArray()));
panel.removeAll();
panel.setLayout(new GridLayout(size,size));
}
});
box.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int[] points=(int[])box.getSelectedItem();
panel.removeAll();
for(int y=0; y<size; ++y) {
for(int x=0; x<size; ++x) {
int value=y*size+x;
int index=Arrays.binarySearch(points, value);
JLabel label=new JLabel();
label.setBorder(BorderFactory.createLineBorder(Color.black));
label.setOpaque(true);
if(index<0) label.setBackground(Color.white);
else label.setBackground(Color.blue);
panel.add(label);
}
}
panel.validate();
}
});
}
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;
import javax.swing.*;

public class MyApp extends JApplet {


}

このインポート文はこうです。
679デフォルトの名無しさん:04/09/16 20:07:40
>>670
……で、できる。(-_-!)
680javaわかんない:04/09/16 20:22:50
>>628
で javaAppletでの数当てゲームの作り方教えてってお願いしたんですけど・・・
一応 教えてくれた親切な方もいて 嬉しかったんですけど・・・
入力する数字は、ボタンではなく textFieldから出来る物が良いです。
どなたか また 教えて下さい お願いします。
681デフォルトの名無しさん:04/09/16 20:49:28
はじめまして、学校の課題でつまってしまい、困っています。
「町1.2.3.・・・nがあり、町iから町jへ直行する道の長さWijが各i、jについて与えられているとする。
(直行する道がない場合はWij=∞とする)このとき、町1から町xまでの最短距離を求めるjavaアプレット
を作成せよ。町の数、町の間の道の長さは自由に変えられるようにする。」
以上が問題文なのですが、わかる方がおりましたら、ご解答お願いします。
682デフォルトの名無しさん:04/09/16 21:05:12
>>681 ダイキストラタンにお願いしてみよう。
683デフォルトの名無しさん:04/09/16 21:14:39
>>681
時間があれば作ってやってもいいけど、ヒントだけ。
経路が堂々回りにならないようにするには、
一度通った町は除外していけばいいよ。
あとは普通の探索。
しかし、めんどくさそうな宿題出すね。
684デフォルトの名無しさん:04/09/16 21:17:29
>>680 あんたロジックだけあればGUIは自分でどうにかするって言ってただろう。
685デフォルトの名無しさん:04/09/16 21:20:31
>>680 >>681
1)済まぬが基本的なロジックの部分&実装面で困っているのか、
2)awtだとかSwingだとかアプレットだとかいったインタフェース周りで困っているのか、
そこんとこだけでも明確にしてくれんか。
>>1
> ・丸投げOK
> ・前提条件も全部出しておくれよ 数学関係は数式も出しておくれよ
> ・GUI 関係などは基本的に放置
つーことになってるので、なるべくなら(1)に絞って、
(2)の部分はJava言語の質問スレに持ってってほしいのだが。
686デフォルトの名無しさん:04/09/16 21:25:49
>>682
強盗退治の大楠虎
687デフォルトの名無しさん:04/09/16 21:28:22
最短経路 アプレット Java とかで検索するといっぱい出てくるのにな。
688javaわかんない:04/09/16 21:30:58
>>680
それが・・・とりあえず自分なりに、いじってみたんですけど 結果が追て
来ないんですよ(泣)
689デフォルトの名無しさん:04/09/16 21:42:31
>>683
> しかし、めんどくさそうな宿題出すね。
これはこれで実装上の工夫があって、仕事で書くなら面白いネタだと思う。
町オブジェクトのコンストラクタでデータベース・キーを生成して
「すでに通ったかどうか」を判定する方法は、
経路スタックの中を舐めなきゃいけないんで効率が悪いが、
幅優先探索の場合に複数プロセスで探索が走る場合にも使える。
そうじゃなくて町に「この先を探索中」フラグを持たせると、
効率はいいものの深さ優先になっちゃうので、
探索範囲が広いときにはターンアラウンドが遅くなってしまい、
途中で打ち切ったりして効率を稼ごうとしたあげく、
最短経路を見落として恥をかいたりする。
とはいえ「プロのプログラマーを養成する」ってんじゃなければ、
あんまり学生向けじゃないかもしれん。
企業の新人研修向けかな?
690デフォルトの名無しさん:04/09/16 21:46:38
>>689
めんどくさいけど、ロジックは難しくないよね。
私ならGAかCAでやるかも。
691デフォルトの名無しさん:04/09/16 22:04:57
探索アルゴリズムとか数値計算とかって基本的なアルゴリズムは
情報系の講義があるとこなら普通にやらされるでしょ。特に
最短経路なんてメジャーな問題だし。
692デフォルトの名無しさん:04/09/16 22:07:42
=689
>> 私ならGAかCAでやるかも。
あ、分からん。GAとかCAって何?
おれはJavaでチャート法使った汎用のツール作って使ってる。
もっとも基本的に「全領域を探索」だからできる話で、
交通路(鉄道とか)の最短距離探索とかだったら
とてもじゃないけど使えないんだけど。
693デフォルトの名無しさん:04/09/16 22:07:52
>>688
import java.applet.Applet;import java.awt.*;import java.awt.event.*;
import java.util.*;public class HBApplet extends Applet {
TextField textField = new TextField("ここに答えを入力しる。");
Label label = new Label("結果");String answer;
final static int NUM = 4;public void init() {
ArrayList list = new ArrayList();for (int i = 1; i < 10; i++) {
list.add(Integer.toString(i));}
Collections.shuffle(list);StringBuffer buffer = new StringBuffer();
for (int i = 0; i < NUM; i++) {buffer.append(list.get(i));
}answer = buffer.toString();
System.err.println(answer);setLayout(new BorderLayout());
add(textField, "South");add(label, "Center");
textField.addTextListener(new TextListener() {public void textValueChanged(TextEvent e) {
String str = textField.getText();if (str.length() == NUM) {
label.setText(test(str));}
}});}
private String test(String str) {
int h = 0;int b = 0;
for (int i = 0; i < NUM; i++) {char ch = str.charAt(i);
if (answer.charAt(i) == ch) {h++;
} else if (str.indexOf(answer.charAt(i)) != -1) {b++;
}}return h + "H" + b + "b";
}}
694デフォルトの名無しさん:04/09/16 22:13:27
>>692
GA = Genetic Algorithm
CA = Cellular Automatom
695javaわかんない:04/09/16 22:17:11
>>693
わざわざありがとうございます
でも・・・なんかtextFieldじゃなくてjtextFieldとかいうやつ
らしいんです・・・
すみません、どなたか また お願いします
696javaわかんない:04/09/16 22:18:41
>>693
ありがとうございました。
すごいですね もう出来ちゃうんですね!何日も考えていたんですけど・・・
勉強不足です。
ほんとに ありがとうです
697デフォルトの名無しさん:04/09/16 22:33:01
>>694
> GA = Genetic Algorithm
> CA = Cellular Automaton
マシン貧乏にはツラい話だな。
まあ、Java使ってる時点でリソース貧乏にはツラいんだが。
とはいえマシンパワーを活用するという点では、
セル・オートマトンなんかは定跡と謂えるだろうが。
(現時点ではともかくも、超並列が一般化したら。
けっきょくおれもチャート法で擬似超並列を実現しとるわけだし)
698デフォルトの名無しさん:04/09/17 09:37:53
>>681
その問題は、町の地図が抽象的でしかも「アプレット」と書いてる辺り
ありがちな経路探索問題と見せかけて、実はその前の、任意の数の町を
ランダムな経路で結ぶ地図を作成させる、非重複の図面配置の問題だな。
699nullpoint:04/09/17 11:02:02
下記のプログラムを実行すると、当然文字列aaaが表示されます。
このaaaをキーにして文字列zzzを表示するには、
System.out.println(test);をどのように変えたらいいですか?

System.out.println(test = aaa);とするのではなく、
文字列変数(test)の中に格納されている文字列(aaa)を変数とみなし、
その変数の中にある値を抜き出すということです。

よろしくお願いします。



public class StringValue {
 public static void main(String[] args) {
String test = "aaa";
String aaa = "zzz";

System.out.println(test);

 }
}
700デフォルトの名無しさん:04/09/17 11:16:42
>>699
そういうことをしたくなった場合は、たいてい設計が間違ってる
HashMapでもつかえ
701デフォルトの名無しさん:04/09/17 11:30:31
>>699
String test = "aaa";
String aaa = "zzz";
Map textMap = new TreeMap();
textMap.put(test, aaa);
System.out.println( textMap.get(test) );
702デフォルトの名無しさん:04/09/17 11:41:33
>>700
設計が間違ってるってのはないのでは?
リソースバンドルみたいなのをやりたいんだよ。
703デフォルトの名無しさん:04/09/17 12:49:15
>>699
値を取得したい変数というのがクラスのインスタンス変数なら
Class.getDeclardField で取得できる。戻り値は java.reflect.Field なので
値を取り出すにはもう1ステップ必要。
//---
class Sample{
String aaa;
String bbb;
String ccc;
Sample(String a, String b, String c){
aaa=a;bbb=b;ccc=c;
}
Sample(){
this("","","");
}
Sample(int i){
this(Integer.toString(i),Integer.toString(i+1),Integer.toString(
i+2));
}
}
// 改行大杉らしいので分割
704703:04/09/17 12:51:03
//続き
public class StringValue{
public static void main(String args[]){
Sample s=new Sample(1);
String test="aaa";String x="";
System.out.println(s.aaa);
try{
x=(String)s.getClass().getDeclaredField(test).get(s);
}catch(NoSuchFieldException nsfe){
System.err.println("Field "+test+" does not exists.");
System.exit(1);
}catch(IllegalAccessException iae){
System.err.println("IllegalAccessException:"+iae);
System.exit(1);
}
System.out.println(x);
}
}
//以上
上のtestに"aaa","bbb","ccc"としてみればそれぞれ s.aaa, s.bbb, s.ccc を得る。
705nullpoint:04/09/17 13:18:08
>>701 >>703

thx (゚∀゚)解決しますた。
706デフォルトの名無しさん:04/09/17 19:36:03
おいおい。
>>681は巡回セールスマンじゃなくて単なる最短経路問題だぞ。
遺伝的アルゴリズムが云々とか言ってる奴は知ったかだろ。

707デフォルトの名無しさん:04/09/17 20:03:32
>>706
巡回セールスマンと最短経路問題って、どう違うのですが?
708デフォルトの名無しさん:04/09/17 20:06:53
あ、全部の町をとおる必要がない、っていうのは違うけど、GAが出る幕がなさそうな書き方だから、その点について。
確定的に求めれるんだよね?
709デフォルトの名無しさん:04/09/17 20:37:36
っていうかGAって真の最短経路を必ず出せるわけじゃないでしょ?
地図情報システムとかならまだしも、この課題に適用しても仕方ないんじゃない?
710デフォルトの名無しさん:04/09/17 20:38:15
>>708
オーダーが違うだろ。
711デフォルトの名無しさん:04/09/17 20:52:43
>>709
求められる解が厳密解ではない。
しかし、対象が十分複雑であれば、厳密解が求まらないこともあるので、
そういった場合にあたえられた時間内に最適解を求める、などといった用途
に使える。
712デフォルトの名無しさん:04/09/17 20:57:21
>>710
違うかな?
あまりかわらない気がするんだけど。
713デフォルトの名無しさん:04/09/17 21:08:33
>>711
それは分かってるが、今回の課題は厳密解の探索を求めてんじゃないの?という話。
714デフォルトの名無しさん:04/09/17 21:15:29
>>711
今回は規模が小さいから普通にやった方がいいね
715デフォルトの名無しさん:04/09/17 21:28:05
>>710
両方ほぼO(n^n)じゃないの?
716710:04/09/17 21:33:16
オーダぐらし調べりゃでてくんだから調べろよ。

ダイクストラのアルゴリズムを使った場合、最短経路の探索は
O( l log N) 但し l はネットワーク上の枝の数。

巡回セールスマン問題は総当りで解いた場合 O( N ! )
717697:04/09/17 21:44:57
>>706
> 遺伝的アルゴリズムが云々とか言ってる奴は知ったかだろ。
漏れは言ってない(^_^!)。誰か言ってる?
>>708
> あ、全部の町をとおる必要がない、っていうのは違うけど、GAが出る幕が
> なさそうな書き方だから、その点について。
漏れは書いてない(^_^!)。誰か書いてる?
>>711
> 求められる解が厳密解ではない。
> しかし、対象が十分複雑であれば、厳密解が求まらないこともあるので、
> そういった場合にあたえられた時間内に最適解を求める、などといった用途
> に使える。
漏れもそう思うし、>>689 でそう言ってる。
>>714
>>今回は規模が小さいから普通にやった方がいいね
漏れもそう思う。
>>715
>> 両方ほぼO(n^n)じゃないの?
この問題に関していえば、もっと少ない。n!よりもっと少ない。
実用上は、たぶん n^3とか、そんなもん。
718デフォルトの名無しさん:04/09/17 21:49:59
なんかキモイのが出てきた。
719デフォルトの名無しさん:04/09/17 21:50:12
>>717
おれおれ

>>706は知識足りてない
720デフォルトの名無しさん:04/09/17 21:52:44
>>719
今回の件に関してGAを使う意義を教えてくれ。マジで。
721経路探索:04/09/17 21:55:15
>>681
下に一つの例を示しますが、経路探索の部分だけ。
Tonwは町で、Pathは町と町を結ぶルート。new Town()した後に町の番号を
Town#numberに入れて、Town#pathのPath[]配列に町の数だけのPathインスタンスを
入れる。new Path()した後に、Path#destinationには他の町の番号で、Path#distanseには、
その町とつながってるなら距離をint値で入れ、つながってないなら(つまり距離∞なら)-1を
入れる。このPathコンストラクタ作業を町の数だけ繰り返して一つのTownコンストラクタは
終了。その後も、このTownコンストラクタ作業を町の数だけ繰り返す。
その後にstartにスタートTown、goalに目的地Townを入れる。それでコード開始。
722経路探索 その1:04/09/17 21:56:03
class Town {
int number;
Path[] path;
public boolean equals(Object obj) {
if(!(obj instanceof Town)) return false;
return number==((Town)obj).number;
}
}
class Path {
int distance;
Town destination;
}
Town start;
Town goal;
SortedMap pathList=new TreeMap();
723デフォルトの名無しさん:04/09/17 21:58:19
>>720
カーナビのデータの様にわりと巨大なものを探索するように発展できたらなぁ
と思った。
724経路探索 その2:04/09/17 22:00:17
void starts() {
  for(int i=0; i<start.path.length; ++i) {
    if(start.path[i].distance!=-1) {
      List visited=new ArrayList();
      visited.add(start);
      move(start.path[i].destination, start.path[i].distance, visited);
    }
  }
  Integer key=(Integer)pathList.firstKey();
  List shortestPath=(List)pathList.get(key);
  //shortestPathにTown(町)が移動順で格納されてる。
}

void move(Town town, int distanse, List visited) {
  visited.add(town);
  if(town.equals(goal)) {
    pathList.put(new Integer(distanse), visited);
    return;
  }
  for(int i=0; i<town.path.length; ++i) {
    if(town.path[i].distance!=-1 && !visited.contains(town.path[i].destination)) {
      move(town.path[i].destination, distanse+town.path[i].distance,
      new ArrayList(visited));
    }
  }
  return;
}
725デフォルトの名無しさん:04/09/17 22:03:01
>>718
> なんかキモイのが出てきた。
いや、「出てきた」んじゃなくて、前から出てる。(^_^!)
>719
>> おれおれ
いや、本人。(^_^!)
726デフォルトの名無しさん:04/09/17 22:14:58
>>725
キモイって部分は認めますよね?
727デフォルトの名無しさん:04/09/17 22:17:30
>>726
認める。粘着質だし、自閉だし。
728デフォルトの名無しさん:04/09/17 22:21:28
>>727
おれおれ?
GAって何なんですか?
いいものなんですか?
729デフォルトの名無しさん:04/09/17 22:22:13
=727
> 認める。粘着質だし、自閉だし。
あ、念のため。「認める」は「したためる」ではなく、「みとめる」。
「自閉」というのは、いわゆる「統合失調症」の症状としての「自閉」や
「自閉的性格」の省略表現としての「自閉」ではなく、
広汎性発達障碍(障礙)としての「自閉」
(=いわゆる自閉性障礙、すなわち「自閉圏」の人間としての「自閉」)。
730デフォルトの名無しさん:04/09/17 22:25:00
>>729
略してキモイでいいですか?
731デフォルトの名無しさん:04/09/17 22:30:13
>>728
> おれおれ?
私は「オレオレ詐欺」=「騙り」と解釈したが。
> GAって何なんですか?
適当な訳語がないが、「派生的アルゴリズム」っつーのが
近いかな? つまるところ将棋倒し的に解探索が走るような、
ネットワーク探索アルゴリズムだ。
> いいものなんですか?
知らん。いいなら教えてくれ。
732デフォルトの名無しさん:04/09/17 22:32:39
GAは遺伝的アルゴリズムって訳語が定着してると思うけど...
733デフォルトの名無しさん:04/09/17 22:33:21
>>730
あんたがキモイんなら仕方あるまい(^_^;)。あんたの感性にまで
口を挟む気はない。
734デフォルトの名無しさん:04/09/17 22:33:23
>>731
適当な訳語はないが、「遺伝的アルゴリズム」で通っている。
ぬるぽに対するがっとは関係ない。
735デフォルトの名無しさん:04/09/17 22:41:27
>>728
例えば、
ある関数の最大値を求めたいとき、入力のベクトルxをビット列Xで表すようにする。
遺伝的アルゴリズム=GAではこれを染色体と呼ぶ。
個体は染色体Xを持ち、初期のXはランダムな値とする。
複数の個体を用意して、それぞれの染色体に対して突然変異・交叉・選別を繰り返し、
最終的に最も優秀な染色体をもつ個体を解とする手法。
最も優秀な個体とは、関数の出力ベクトルから求まるある値が最大である個体。
736デフォルトの名無しさん:04/09/17 22:44:01
で?
何に使えるのですか?
ある値とは何を基準に決めるのですか?
その値とはひとつですか?複数ですか?
737デフォルトの名無しさん:04/09/17 22:46:56
>>732
それは知らんかった。漏れは「生成的アルゴリズム」とか、
そのまんま「ジェネリック・アルゴリズム」とか、
そういう言葉で知ってた。
α―β枝刈りとかそんな感じで、解を生成しちゃあ評価関数で
篩っては見込みのある枝を追ってゆくという……
「遺伝的アルゴリズム」っつーと、そのつど結果が出て、
評価関数っつーものが帰納的かつ局所的に決まる感じが
するのだが。
738デフォルトの名無しさん:04/09/17 22:49:25
ガソリンの値段が上がったことと関係ありますか?
739デフォルトの名無しさん:04/09/17 22:51:21
>>736
まじめに解くと時間がかかりすぎる問題を解く。
現実的によくあるのは、スケジュールの自動割当とか、カーナビの最短ルート探索。
>>735の「ある値」は、文脈的に適切ではない気がする。
740デフォルトの名無しさん:04/09/17 22:51:54
>>738はスレにGAを導入する試みです。
こうするといい結果が得られる可能性があるのですよね?
違いますか?
741デフォルトの名無しさん:04/09/17 22:52:15
>>738
それは関係ないが、おまえがモテないこととは関係ある。
遺伝アルゴリズムだからな。
742デフォルトの名無しさん:04/09/17 22:53:28
>>741
数年前まではもてたんです・・・
何でだめになったんでしょうか?
743デフォルトの名無しさん:04/09/17 22:55:09
>>742
評価関数がまずかったんじゃないの?
744デフォルトの名無しさん:04/09/17 22:56:16
>>743
意味がわかりません。
745デフォルトの名無しさん:04/09/17 23:00:10
ここまでの実験結果をまとめます。

GAはまったく無関係な方向に向かって走り出す可能性がある。
あまり使えそうにない。

違いますか?
746デフォルトの名無しさん:04/09/17 23:02:24
=737
>>739 >>741
馬鹿に構ってないで本筋に絡んでくれよ。(T_T)
747デフォルトの名無しさん:04/09/17 23:03:05
>>746
キモイ
748デフォルトの名無しさん:04/09/17 23:04:17
>>747
だからそれは分かってるつーの。
749デフォルトの名無しさん:04/09/17 23:07:25
>>745
nが少ないなら、使う必要はない。
750デフォルトの名無しさん:04/09/17 23:09:49
>>745
> GAはまったく無関係な方向に向かって走り出す可能性がある。
それはスレ住人の性質だから、GAとは関係ない。

> あまり使えそうにない。
どんな問題に使うかによるから、あまり使えそうにないというのは正しくない。

そもそも、君は何も実験していないんじゃないか?
751デフォルトの名無しさん:04/09/17 23:15:05
>>749
そう。恐竜じゃないけど、大絶滅が起きる可能性があるわけだからね。
素っ頓狂な奴が細々と生きてゆける程度にバリエーションが豊富でないと、
局所解に引っかかって、最適解が見つからない。
752デフォルトの名無しさん:04/09/17 23:16:26
>>751
キモイ
753デフォルトの名無しさん:04/09/17 23:48:48
>>751
というか、固体の数と選択肢の数が同じになるので、やってもしょうがない。
754デフォルトの名無しさん:04/09/18 01:08:14
JAVAやめてC#しによっと
755デフォルトの名無しさん:04/09/18 01:09:09
>>754
スレ違い。
756前レスの質問者:04/09/18 10:16:06
700前半代で、知ったか討論してる人達。
遺伝あるごりずむだとか生成的なんたらとか、机上の空論をもてあそんで
ないで、具体的なコードの一つでも書いたらどうですか。
全然回答になってないんですよ。
バカの一つ覚えみたいな小難しい用語wばかり述べないで、じゃあそれを
実際のコードにしてみてください。どうせ、えーと、ifの次はelseで
いいんだよなーとかのレベルなんでしょうがw プゲラ
757デフォルトの名無しさん:04/09/18 10:43:40
 MessageDigestクラスを使って、入力された8桁の文字列を
MD5でコード化しようと思ってるんですが、コードの取り方が判りません。
MD5だと英数8桁で32桁のコードが帰るって聞いたんですけど…
どなたか、知っている方ご教授ください。

今書いているソースです***************
String pwd = "password";
byte bys[] = pwd.getBytes();
try{
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(bys);
byte[] mdb = md5.digest();
} catch(Exception e){
e.printStackTrace();
}
***********************************
758681:04/09/18 10:47:48
>>756は私ではありません。
いろいろ情報を下さった皆さんありがとうございます。
残念ながら一向に分かっておりませんが、、、w
Googleで課題に似たようなAppletをみつけたので
友人に頼んで直してもらいました。
2chを頼りにした私が馬鹿でした。
759デフォルトの名無しさん:04/09/18 10:50:22
760デフォルトの名無しさん:04/09/18 11:30:44
>>758
やーい馬鹿
761デフォルトの名無しさん:04/09/18 16:35:46
>>758
ばーかばーか
762デフォルトの名無しさん:04/09/18 17:45:02
>>758
バカなりに自分がバカなことは分かってるんだな。
763デフォルトの名無しさん:04/09/18 20:24:10
genetic と generic を間違えとった……(-_-!)
764デフォルトの名無しさん:04/09/18 20:34:50
>>756
コードを書くのは奴隷の仕事。
765デフォルトの名無しさん:04/09/18 21:02:08
>>756
> 具体的なコードの一つでも書いたらどうですか。
すでに三本以上書いてますが何か?
> 小難しい用語wばかり述べないで、
べつに難しくねえって(-_-;)
766デフォルトの名無しさん:04/09/18 21:11:15
>>753
>> というか、固体の数と選択肢の数が同じになるので、
固体→個体
遺伝的アルゴリズムって、べつに「全ての変異」を個体として
生成するわけじゃないだろう。
狭い世界の最適解が、真の最適解と一致しない場合も多いだろうという話。
狭い世界の在来種が、外来種に駆逐されちゃうみたいなもんで。
767デフォルトの名無しさん:04/09/18 21:12:26
>>765
私の2chディレクトリ内のファイルがtest053.ccまで来てしまった。
768デフォルトの名無しさん:04/09/18 22:21:17
>>765
>>すでに三本以上書いてますが何か?
どこに書いてあるんですか?

>>べつに難しくねえって(-_-;)
ぷぷ、典型的な返し言葉。得意気に使ってて何を言ってるのかwプゲラ
言語はあるが意味はない、バカの一つ覚えを証明してますなwホルホル
769デフォルトの名無しさん:04/09/18 22:26:01
>>765
大体、経路探索如きに遺伝的だとか生成的だとかを無理に持ち出す事自体が、
バカの一つ覚えを証明してるんですよ。
一言、再帰を使うですむんですがね。 基本的アルゴリズムも理解して
ないんじゃないですか。言葉だけ暗記しても意味ないですよ。
今までのやり取りを読みましたけど抽象的な内容ばかりで、まさに知ったか
会話そのままですね。
770デフォルトの名無しさん:04/09/18 22:30:27
>>769
再帰プ
まだまだあまちゃんだね。
世の中にはお前の分からないことがたくさんあるのよ。
771デフォルトの名無しさん:04/09/18 22:41:54
>>770
おやおや、反論のお早いことで。図星つかれて口惜しさの余り
レスせずにはいられないようですねw
怒りの感情にだけまかせないで、もっと具体的に反論してはどうですか?
ま、無理なんだろうけど
772デフォルトの名無しさん:04/09/18 22:45:52
Java厨ってつまらないことでずいぶんレスが延びるんだね。
なんていうか…厨房臭い。
773デフォルトの名無しさん:04/09/18 22:53:36
>>771
ばーか
再帰なんて基本中の基本だろう。
再帰では解決しないことがたくさんあんだよ。
探索範囲がある程度以上複雑な時には
単純な再帰ではまずスタックオーバーフローする。
次にリソースがいくらあっても足りない。
そして時間がかかり過ぎる。
そのくらい理解しろよ。
もっと説明してほしいかい、おばかちゃん。
774デフォルトの名無しさん:04/09/18 23:07:40
最短経路問題ごときでこんなに盛り上がるのがすげーふしぎだ。
情報系の講義だと学部レベルの初歩的で定番の宿題だよね、これ。
最短経路問題のダイキストラ、微分方程式のルンゲ・クッタ、
連立方程式のガウス・ジョルダン... おっさんになった今ではなんか懐かしい。
775デフォルトの名無しさん:04/09/18 23:16:30
このテーマのもともとの発端は、学校から出た宿題への質問からだろう。
学校の宿題の最短経路問題にGAを持ち出すってのは、お遊びで
わざと複雑にして質問者を煙に巻こうとしてるとしか思えんな。
しかし773の必死の反論さを見るとマジで言ってたのか?
なんか理屈倒れと言うか、簡単なコーディングにまでやたら技巧を持ち込んで
開発工程をわざわざ上げそうで、絶対に雇いたくないタイプだな。
知識におぼれて知恵がないって感じ。まだ学生かな。
776デフォルトの名無しさん:04/09/18 23:25:41
>>775
プププ
煽り厨が煽り負けてやんのw
777デフォルトの名無しさん:04/09/18 23:34:02
771=772=776
いい加減にしろ
778デフォルトの名無しさん:04/09/18 23:39:27
>>773
> 再帰なんて基本中の基本だろう。
漏れもそう思うが知らん奴が多く、使えん奴も厭んなるくらい多い。
> 再帰では解決しないことがたくさんあんだよ。
漏れもそう思うが、セル・オートマトンや遺伝的アルゴリズムを知ってても
あんまり役立たない(セル・オートマトンを使ったアプリケーションを
書いて、そこそこ儲けたことのある漏れが言うのも変だが)。
> 探索範囲がある程度以上複雑な時には
> 単純な再帰ではまずスタックオーバーフローする。
安心しろ、実データだと大抵大丈夫だ。
でなきゃJavaなんか実用にならん。
> 次にリソースがいくらあっても足りない。
安心しろ。メモリはどんどん安くなってる。
そのへんのおばちゃんが使ってるマシンでも512MBとか積んでるから、
よほど屑なコードを書かなきゃだいたい間に合う。
でなきゃJavaなんか実用にならん。
> そして時間がかかり過ぎる。
安心しろ。最近のマシンはどんどん速くなってる。
でなきゃJavaなんか実用にならん(^_^!)。
779デフォルトの名無しさん:04/09/18 23:47:08
というわけで、結論はJavaは実用にならんということでした。
〜終了〜
780デフォルトの名無しさん:04/09/18 23:49:26
>>778-779
どてっ。
781デフォルトの名無しさん:04/09/18 23:59:52
>>779
> というわけで、結論はJavaは実用にならんということでした。
読解力のない香具師には何言っても無駄かも知れんが、
Javaのメリットは一にも二にも開発のしやすさだと思っている漏れとしては、
リソースの心配をする以前にまず「動く」プログラムを書いて、
めちゃくちゃ遅かったりめちゃくちゃ重かったりしたら、
チューニングをかけるなり、Cに移植するなりすりゃあいいと思ってる。
だからJavaで処理系依存だとか言語依存だとかのコードは
(仕事でどうしてもその環境で動かさにゃならんときを除き)
書きたくないわけで、だからGUIだのアプレットだのといった話は
なるべくなら避けたいのである。
782デフォルトの名無しさん:04/09/19 00:08:00
>>781
おぬしちょっと変わってて面白い香具師だな
意外と気が合うかもしれん
でもGUIなしじゃ商売にならんだろ?
783デフォルトの名無しさん:04/09/19 00:29:03
>>781
Javaで遅かったらアルゴリズムを考え直して、それでも遅かったらCで書くけどね。
それでも遅かったらアセンブリ。
それでもダメなら来るべき時が来るまで封印。
784デフォルトの名無しさん:04/09/19 04:03:02
C++よりはスタック使わない気がするけど、そうでもないですか?
どっちにしろ再帰使いたがるのは気が狂ってる感じがするけど。
785デフォルトの名無しさん:04/09/19 05:58:27
>>784
そこで関数型言語ですよ。

何にせよ、Tail recursion を最適化すればスタック消費は減らせる
(只のループなら消費0になる)。
786デフォルトの名無しさん:04/09/19 06:43:44
もうJavaやめよ。なんか人間として駄目になりそう。
787デフォルトの名無しさん:04/09/19 06:49:10
>>786
もう人間やめれば。なんかJavaが駄目になりそう。
788デフォルトの名無しさん:04/09/19 07:26:56
>>782
> でもGUIなしじゃ商売にならんだろ?
元々アルゴリズム開発が仕事なのでさほど問題がない。
最近はHTMLで吐いてブラウザ任せ。
なにせ今の仕事が自然言語処理なんで、
ルビ振り表示なんかはIEに任せたほうがぜってー楽。
789デフォルトの名無しさん:04/09/19 07:45:11
> どっちにしろ再帰使いたがるのは気が狂ってる感じがするけど。
漏れが狂ってるのは別にして、再帰が特別な手法だと思うのは、
再帰を使いこなしてないか、再帰に向いてない問題に
むりやり再帰を適用して誤解してるかのどっちか。
非数値処理では再帰を使うと楽に書けるケースは多い。
790デフォルトの名無しさん:04/09/19 07:56:28
>>781
現時点におけるJavaの(アルゴリズム記述言語としての)弱点としては、
swapがない
(loop-until-do-whileみたいな)途中からループを抜ける制御構造がない
配列やListは結局ポインタと一緒だから、引数として渡したときに副作用がある
くらいだから、アルゴリズムの検証にはけっこう便利。
791デフォルトの名無しさん:04/09/19 09:41:49
>>784
「再帰」と聞いてその程度の連想しか出来ないって時点で、
当人のレベルが分かるってもんだ。
GAの適用性も理解していないらしいですなw
792デフォルトの名無しさん:04/09/19 09:53:29
>>783
アルゴリズムを考える前に計測せよ。
793デフォルトの名無しさん:04/09/19 10:38:13
つーかダイクストラって普通再起無しで書かないっけ?

深さ優先探索でもする気なのかオマイラ。
794デフォルトの名無しさん:04/09/19 11:59:58
真面目な人はフィボナッチヒープで書くんかな。
でも、普通はただのヒープで済ませるだろう。
795デフォルトの名無しさん:04/09/19 12:02:25
もういいって、君達がいろいろ知っていうことにしてやるから、
頼むからつまらないことでその必死な発言の数々はやめてくれ。
796デフォルトの名無しさん:04/09/19 12:21:18
Java に関するスレなんだから
アルゴリズムの質問は別のところでやってくれ
797デフォルトの名無しさん:04/09/19 13:03:11
> Java に関するスレなんだから
> アルゴリズムの質問は別のところでやってくれ
それより、訊きたいことがあるならさっさと訊きゃあいいじゃん。
↑上でごちゃごちゃ言ってる連中だって、それなりに
思うところがあるんだろうからさ、
なんか問題出して、
それが実際のコードにどう反映されるかを見りゃあいい。
そのコードが屑なら方法論も屑だし、
それでcoolなコードが上がってくりゃあ、
方法論だって間違ってないってこった。
798デフォルトの名無しさん:04/09/19 13:23:16
間違った方法論で素晴らしいコードを生み出すcoolな俺。
Javaで使えるアプリを生み出すcoolな俺。
ある意味天才。
ある意味神。
素晴らしい俺。
799デフォルトの名無しさん:04/09/19 13:35:52
ぶっちゃけた話、
繰り返し型で書こうとしても
結局は再帰でやってるのと同じことを書く破目になるケースは多い。
たとえば以下の問題。
1.int の配列 x[n] から、m個の要素を取り出す組合せを尽くし、
int 配列のArrayListの形で返せ。
2.int の配列 x[n] から、n個の要素を取り出す順列を尽くし、
int 配列のArrayListの形で返せ。
再帰の呼びの深さは1で m、2で n だから、
リソースを気にして繰り返し型で書くより
あっさり再帰を使っちゃったほうが楽。
800デフォルトの名無しさん:04/09/19 13:42:57
>>799
あなたも素晴らしい俺ですね。
感動です。
801デフォルトの名無しさん:04/09/19 15:30:51
プログラムを実行すると
abcdefghijk
1234567890a
という二行からなる文字列が行の先頭から5文字までと、7文字めから行の最後までと
分かれるというプログラムを作れといわれましたがどうのようにしたらいいかわかりません。
わかる方、ご教授お願いします。
802デフォルトの名無しさん:04/09/19 15:49:59
>>801
ようするにどうなるんでしょうか?
803デフォルトの名無しさん:04/09/19 17:53:13
>>801
String line="abdcefghijk";
String head=line.subString(0,5);
String tail=line.subString(6);
の繰り返し。。。
804デフォルトの名無しさん:04/09/19 17:58:15
>>801
そこでセルオートマトンですよ。
805デフォルトの名無しさん:04/09/19 18:24:17
>>804
いや、セル・オートマトン使っても…
806デフォルトの名無しさん:04/09/19 20:00:19
int a=1;
int b=3;
int c=a/b*b;

これで実行するとcは0になってしまいます
doubleやfloatを使わずにcを1にすることは可能でしょうか?
c=a/b*bの式の変数の順番や演算子は変えずにお願いします
807デフォルトの名無しさん:04/09/19 20:22:41
なぞなぞですか?

int a=1;
int b=1;
int c=a/b*b;

808806:04/09/19 20:28:04
いや違います

1を3で割ってしまうと0.〜になってしまいintでは0になってしまいます
そこに3をかけても0になってしまいありえない答えになってしまうわけです

やはり式を変えないと無理ですかね
809デフォルトの名無しさん:04/09/19 20:48:53
何を言ってんですかあなたは?
810デフォルトの名無しさん:04/09/19 20:56:24
byteが扱える整数の値の範囲は-128から127ですけど
なんで、-127から128までではないんですか?
811デフォルトの名無しさん:04/09/19 21:00:19
>>810
最上位ビットで負数かどうか判断するため
812デフォルトの名無しさん:04/09/19 21:02:47
>>806
int c = a/b*b + a%b;

>>810
2の補数でぐぐれ
813デフォルトの名無しさん:04/09/19 21:09:07
>>803
for文で繰り返す場合に
String line="abdcefghijk";
の文字列部分が行ごとに違う場合
どうやって書けばいいの?
814デフォルトの名無しさん:04/09/19 21:11:41
>>804
  public static void main( String[] args ) {
    if (args.length < 1) {
       System.err.println("usage: java ch2 文字列");
       System.exit(1);
    }
    String s = args[0];
    int len = s.length();
    Cell [] xx = new Cell[len];

    xx[0] = new Cell(0, 0);
    for (int pos = 1;pos < (len - 1);pos += 1) {
      xx[pos] = new Cell(pos, 1000);
    }
    xx[len - 1] = new Cell(len - 1, 0);
815デフォルトの名無しさん:04/09/19 21:12:29
    Cell [] yy = new Cell[len];
    while(!found) {
      found = true;
      for (int pos = 1;pos < (len - 1);pos += 1) {
        if ((xx[pos - 1].dist < xx[pos + 1].dist)) {
          int dist = xx[pos - 1].dist + 1;
          if (xx[pos].dist != dist) {
            yy[pos] = new Cell(pos, dist);
            found = false;
            continue;
          }
        }
        if ((xx[pos - 1].dist > xx[pos + 1].dist)) {
          int dist = xx[pos + 1].dist + 1;
          if (xx[pos].dist != dist) {
            yy[pos] = new Cell(pos, dist);
            found = false;
            continue;
          }
        }
816デフォルトの名無しさん:04/09/19 21:12:54
        if ((xx[pos - 1].dist == xx[pos + 1].dist)) {
          int dist = xx[pos + 1].dist + 1;
          if (xx[pos].dist != dist) {
            yy[pos] = new Cell(pos, dist);
            found = false;
            continue;
          }
        }
        yy[pos] = xx[pos];
      }
      yy[0]    = xx[0];
      yy[len - 1] = xx[len - 1];
      for (int pos = 0;pos < len;pos += 1) {
        xx[pos] = yy[pos];
      }
    }
817デフォルトの名無しさん:04/09/19 21:13:16
    int maxdist = 0;
    for (int pos = 0;pos < len;pos += 1) {
      if (xx[pos].dist > maxdist) {
        maxdist = xx[pos].dist;
      }
    }
    int end_of_head = len;
    int top_of_tail = 0;
    for (int pos = 0;pos < len;pos += 1) {
      if (xx[pos].dist == maxdist) {
        if (pos < end_of_head) end_of_head = pos;
        if (pos > top_of_tail) top_of_tail = pos;
      }
    }
    String head = s.substring(0, end_of_head);
    String tail = s.substring(top_of_tail + 1, len);
    System.out.println(head);
    System.out.println(tail);
  }
818デフォルトの名無しさん:04/09/19 21:13:39
  private static class Cell {
    int pos;
    public int dist;

    Cell(int pos, int dist) {
      this.pos = pos;
      this.dist = dist;
    }
  }
819デフォルトの名無しさん:04/09/19 21:18:32
セル厨キタ━━━━(゚∀゚)━━━━!!!!!
820デフォルトの名無しさん:04/09/19 21:30:51
>>819
厨厨いってるとねずみさんになっちゃうぞー
821デフォルトの名無しさん:04/09/20 01:54:52
JAVAで文字列(数字が入ってるって想定)の前ゼロ部分を捨てる簡単な方法を教えてください。
一端数字にしてもう一度文字ですかね?(型)ちなみにJAVA超初心者なのでJAVAの作法すら知りません。
よろしくお願いします。
822デフォルトの名無しさん:04/09/20 09:21:35
>>821
> 簡単な方法を教えてください。
「簡単な」方法はたぶんない。
> 一端数字にしてもう一度文字
それがたぶん正解だが、文字列が数字と解釈して意味がなかった場合に
例外を飛ばすか飛ばさないかで二通りの方法がある。(>誰か教えてくれ)
処理の前に String の matches()で数字の形式を
チェックしたほうがいいと思う。
そうすれば、整数とか小数とか分数とか、いろんな形式の「数字」に対し、
一つのコードで対応できるし、引数で区分を示すこともできる。
823デフォルトの名無しさん:04/09/20 10:34:21
>>821
String num="023568 008365";
num=num.replaceAll("^0+|\\b0+", "");
//num → 23568 8365
824821:04/09/20 11:41:26
>>822
どもです。何の言語でも例外処理って面倒ですね。

>>823
まだ調べてないんですけど たぶん正規表現での置換ってことですね。
821書き込んでから 正規表現のが簡単かな?と思ってました。

どちらがいいか、、、823さんのほうが簡潔ですみそうな気がするので
822さんには・・・・ゴメンナサイ!
お二方ともありがとうございました。

825デフォルトの名無しさん:04/09/20 12:43:06
つーか、>>822はいつもの人だろ。
わざと話を別方向にわざわざ複雑な方向に持ってくいつもの人。
おそらくお遊びでやってるんだろうが、文章はマジっぽいので
余計悪質だ。
826デフォルトの名無しさん:04/09/20 16:11:16
>825
> つーか、>>822はいつもの人だろ。
あたりです(^_^)v
> わざと話を別方向にわざわざ複雑な方向に持ってくいつもの人。
「宿題に答える」という観点から言えば、
「出題者がマイナス点をつけにくい解答」というのが正しい方向であり、
「望ましい解答」というのは確かに別方向だな。
この場合も「数字」というのが「整数」だというのがはっきり示されてれば、
「0.1」を「.1」に変えちゃっても「前ゼロ部分を捨てる」という意味では
もちろん正しいと言える。
あるいは「とにかく言われた通り(仕様書の通りに)プログラムが
書ければいいのであって、それが発注側の意図と食い違っていたとしても、
それは正しいプログラムなのである」と考えれば、それは正しいと言える。
なお、>>823のプログラムにいちゃもんをつける気はさらさらない。
「正規表現を使う」というアイディア自体にはおれも賛成だからだ。
ただ、Javaで本格的に正規表現を駆使しようとすると苦労が多いので、
sedかPerlを使ったほうがたぶん楽だ。
827デフォルトの名無しさん:04/09/20 17:34:13
わたし長文は読めません
828デフォルトの名無しさん:04/09/20 19:01:13
>>827
長文読めなくてもJavaプログラムは書ける。
すばらしい。
829821:04/09/21 09:51:07
>>826
ははは
>>824 でやんわりと ごめんなさいなんて書いたけど
もともと小数だったらどうすべきとかロジック的なものは
人に聞く気も無いからその辺は聞き流させてもらってました。
もっとも前提として俺が書かなかったから そこまで考えてくれたんだろうけど。

Perlでいいなら俺も 質問しないよw

とにかく回答してくれたことに感謝してることは変わりない ありがとう。
830デフォルトの名無しさん:04/09/21 12:50:03
>>821
> とにかく回答してくれたことに感謝してることは変わりない ありがとう。
どういたしまして。m(_ _)m
ついでながら正規表現を扱うクラスはjava.util.regex.*
サンプルプログラムは岩谷宏『Javaによるテキスト処理入門』(ソフトバンク)
にあり。
> ちなみにJAVA超初心者なのでJAVAの作法すら知りません。
とのことなので、僭越ながら。
831821:04/09/21 16:59:46
>>830
わーん ますます 感謝です。
できれば俺のとこにきて教えて欲しいです。(←マジにw)
832830:04/09/22 11:30:58
n = Integer.parseInt(str);
は例外NumberFormatExceptionを投げるのでうざったい。
たしか例外を投げない方法が
あったはずなんだが……
833デフォルトの名無しさん:04/09/22 12:14:28
>>832
標準では無いよ。
Commons Langあたり使うか。

しかし、岩谷というだけで、読む気がしないのは気のせいか?
いやもちろん、他の実績もあって読む気がしないんだけど。
834デフォルトの名無しさん:04/09/22 13:32:53
著作で読むべき本は、ぶっちゃけありえない。
訳本は著名本もあるので、原書にあたるのが吉。

わざわざ金払って不快な気持ちになる必要は無いよ。
835830:04/09/22 14:23:10
>>834
漏れはJVMのソースを読めと言われた。
836デフォルトの名無しさん:04/09/22 15:17:15
(((;゚Д゚)))
837デフォルトの名無しさん:04/09/22 15:39:15
APIのソースは読まんとやってられないが
VMまで要求するのか。
838デフォルトの名無しさん:04/09/22 18:52:18
つうか、VMのソースってあるの?
ま、彼こそJava厨の名にふさわしい人だね。
翻訳で知った気になってるんだけど、実際には使ったことがない、という。
839デフォルトの名無しさん:04/09/22 21:25:45
>>838
去年、派遣の仕事で行った職場の上司なのだが、
なんでもJavaで書かれた暗号化プログラムを、
鍵部分が生成される一瞬を捕まえて停止させるために、
JVMをハックしたのだそうだ。
「効率に関しては、ずいぶん勉強になった」
とのこと。
840デフォルトの名無しさん:04/09/22 22:00:46
>>837
APIのソース読んだって肝心な部分が無いじゃん。
APIリファレンス読めば良いだけだと思った。
841デフォルトの名無しさん:04/09/22 22:37:24
>>839
すげー上司だ
842デフォルトの名無しさん:04/09/22 23:22:20
>>841
いや、凄いには凄いのだが、
「正規表現の鬼」を自称しながらJavaの1.4以降で
正規表現がサポートされているのを知らなかったり、
漏れに「コーディングスタイルが甘い」とか言われて
落ちこんでいたりしたので(いや、設計の腕は確かだったのだが)、
Javaでも漏れのような(いわば正統派の)マターリ系の開発スタイルと、
(あんまりJavaらしくない)Hackishな開発スタイルが
あるっちゅー事だと思われ。
843デフォルトの名無しさん:04/09/22 23:43:14
硬派だなあ
844デフォルトの名無しさん:04/09/23 20:55:17
>>843
その上司が答えを聞いて爆笑した問題。
「四つの一桁の数を加減乗除して十を作る遊びがある。
このとき、四つの数がすべて異なり、その中に0が含まれていないとき、
必ず十が作れることを証明せよ。」
これを「どうやったら証明できるか」を聞いて憤慨し、
具体的にどうやって証明するかで考え込み、
実際にどうやって証明したかを聞いて爆笑していた。
SEクラスの研修用問題として、適当かと思われ。
解答は後日。
845デフォルトの名無しさん:04/09/23 21:52:18
>844
四つの数がすべて異なり、その中に0が含まれていないとき
なので4数の組合せは126通り。
これくらいなら後は人力でも力押しで証明可能かと。
846デフォルトの名無しさん:04/09/23 22:11:14
>>845
「全部試すんだ」と言うと、大抵の人は「真面目に考えて損した」と
憤慨します(^_^!)。
ただ、中にはけっこう難しい組合せがあって、
「あるはずの解がどうしても見つからない」みたいな事態がしばしば起きます
(詰め将棋なんかもそうです。コンピュータで人間が予想しなかった
余詰が見つかる場合がしばしばあります)。
そこでコンピュータで網羅的に探索する必要が出てくるんですが、
式を網羅的に生成するところと、=10になるかどうかの判定のところで
大抵考え込んじゃうんですよ。
で、どうしたらいいか、と。
847デフォルトの名無しさん:04/09/23 23:01:57
いろいろと調べましたが見つからないので教えて下さい。
readlineでユーザからのキーボード入力をさせていたのですが
パスワードもreadlineで行うと画面に表示されるので危険です。
そこで入力した文字を*で埋めるようにしたいのですが、
どうすれば出来るかが分かりません。
お手数ですがどなたか助言をお願い致します。
848845:04/09/23 23:24:23
>846
試しにプログラム書いてみたが、
書き終わってから気づいたのは、ここがJavaスレだったこと。。。

# perlで書いちまった。が、もったいないので張っとく。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=224
849デフォルトの名無しさん:04/09/24 00:36:40
もうそのネタはどうでもいいよ。
だいぶ前に証明終わってる。

4桁の数字を10にする証明
http://pc5.2ch.net/test/read.cgi/tech/1063724453/
850デフォルトの名無しさん:04/09/24 01:00:12
>>847
コンソール入力だといろいろ設定が面倒なので、GUIでの入力に移行してください。
javax.swing.JPasswordFieldを使えば簡単です。
851デフォルトの名無しさん:04/09/24 01:40:32
すみませんコンソールの奴でおながいします。
852デフォルトの名無しさん:04/09/24 08:43:50
>>849
キミは未解決問題を宿題に出すのか(w
853デフォルトの名無しさん:04/09/24 09:18:03
>>848
「人力であらかじめ組合せを尽くしておく」という方針だと、
たぶんそのプログラムがマル。
ただ、4/(3-2-1)とかいうのが出てきたら0による除算で落ちないかとか、
途中に分数が出てくる場合があったとき丸め誤差が生じて
==10が成立しないんじゃないかとか、
そういった心配をしだすともうちょっと凝りたくなるのだな。
854デフォルトの名無しさん:04/09/24 10:01:02
>853
ん?ゼロ除算はevalでトラップされてるし、
==10でないものが引っかかる可能性はないし、
==10になるはずのものが引っかからないのであればそこだけ手処理すればいい。
(今回はたまたま問題なかったのだからそれはそれでいい)
855デフォルトの名無しさん:04/09/24 12:23:22
>>854
> ゼロ除算はevalでトラップされてるし、
> そこだけ手処理すればいい。
まあ、Perlっちゅー言語がそういう言語だしな。(-_-;)
漏れもJavaではなくLispで書くんなら「簡単だな」と
思うんだが、CやJavaで「自分で式作って評価して……」とか
やってると、けっこう(インタプリタ作るのと変わんない
程度の)大騒動になるんで。
856U ◆CZtFsGiu0c :04/09/24 14:04:47
857デフォルトの名無しさん:04/09/24 20:09:59
DATE型の二つの変数の大小比較をしたいのですがどう行えばいいでしょうか?
858857:04/09/24 20:23:30
解決しました
859847:04/09/25 00:41:52
>>856
おー。できたできた。
次はこのCUIアプリをApplet化してみます。ありがとーー。
860デフォルトの名無しさん:04/09/25 21:57:00
Javaの関数の引数をオプション(無くても動く)
として定義することはできますか?
できるとしたら、どうしたらよいでしょうか。
861デフォルトの名無しさん:04/09/25 22:40:00
few-sdd
abcde-kjfes
aa-mmk
azasdjws-dhjles
fjp-jgf
という五行からなる文字列が
プログラムを実行すると
各行の"-"より右側と左に分かれると言う
プログラムを作りたいんですがどうしたらよいでしょうか?
862デフォルトの名無しさん:04/09/25 22:54:36
キーボードから秒単位の時間を表す整数値を入力させ
○時間○分○秒という形式で出力するプログラムをするには
どうすればよろしいのでしょうか?
863862:04/09/25 23:07:21
もちろん漢数字です
864デフォルトの名無しさん:04/09/26 04:23:24
class FixedTriangle {
static float height = 3.0f;
static float bottomSide = 4.0f;

static float weight(float density) {
float weight;
weight = 0.5f * height * bottomSide * density;
return weight;
}
}

class OutputWeight {
public static void main(String args[]) {
float d0 = 2.5f;
float d1 = 3.5f;
System.out.println("Weight(d0) = " + FixedTriangle.weight(d0));
System.out.println("Weight(d1) = " + FixedTriangle.weight(d1));
}
}
上のを書き換えて、任意の形状の三角形の重さを計算するプログラムを作りたいのですが、
どうすればよいでしょうか?

本のヒントでは、
FixedTriangleクラスを変更してTriangleクラスとし、
フィールドbottomSideとheightをインスタンス変数に変更する。
bottomSideとheightを設定するインスタンスメソッドsetDimension()を作成する。
setDimension()で底辺と高さをセットし、それらの値から重さを計算する。
とあります。
865デフォルトの名無しさん:04/09/26 08:43:39
class Triangle {
float height = 3.0f;
float bottomSide = 4.0f;

void setDimension(float h, float b) {
height=h;
bottomSide=b;
}
float weight(float density) {
float weight;
weight = 0.5f * height * bottomSide * density;
return weight;
}
}

class OutputWeight {
public static void main(String args[]) {
float d0 = 2.5f;
float d1 = 3.5f;
Triangle tgl=new Triangle();
tgl.setDimension(任意F, 任意F);
System.out.println("Weight(d0) = " + tgl.weight(d0));
System.out.println("Weight(d1) = " + tgl.weight(d1));
}
}
866デフォルトの名無しさん:04/09/26 09:23:07
>>861
String txt="few-sdd\nabcde-kjfes\naa-mmk\nazasdjws-dhjles\nfip-igf";
List left=new ArrayList();
List right=new ArrayList();
Pattern pat=Pattern.compile("\\b[^\\-&&\\S]+|-.+");
Matcher mat=pat.matcher(txt);
while(mat.find()) {
  String word=mat.group();
  if(word.charAt(0)=='-') right.add(word.substring(1));
  else left.add(word);
}
System.out.print("左:"); Iterator it=left.iterator();
while(it.hasNext()) System.out.print(it.next()+" ");
System.out.print("\n右:"); it=right.iterator();
while(it.hasNext()) System.out.print(it.next()+" ");
867デフォルトの名無しさん:04/09/26 10:54:34
>>862
void translate() {
  InputStreamReader inR=new InputStreamReader(System.in);
  BufferedReader bufR=new BufferedReader(inR);
  int sec=0;
  try { sec=Integer.parseInt(bufR.readLine()); }
  catch (Exception ex) { System.exit(0); }
  int hour=sec/3600; if(hour>1000) System.exit(0);
  int minu=(sec%3600)/60;
  sec=sec%3600%60;
  System.out.println( (hour!=0?format(hour)+"時間":"") +
  (minu!=0?format(minu)+"分":"") + (sec!=0?format(sec)+"秒":"") );
}
String format(int num) {
  String chara1="零一二三四五六七八九";
  String chara2="千百十 ";
  StringBuffer figures=new StringBuffer();
  int digit=1000, count=0;
  while(digit>1) {
    if(num/digit==1) figures.append(chara2.charAt(count));
    else if(num/digit>1) {
      figures.append(chara1.charAt(num/digit));
      figures.append(chara2.charAt(count));
    }
    num%=digit; digit/=10; ++count;
  }
  if(num!=0) figures.append(chara1.charAt(num));
  return figures.toString();
}
868U ◆CZtFsGiu0c :04/09/26 10:57:17
>>860
基本的にできない。ただし、引数がないメソッドを用意しておき、その中からデフォルト値
を引数として元のメソッドを呼び出すことで、似たようなことはできる。

public void foo() {
foo(null);
}

public void foo(String arg) {
System.out.println("arg:" + arg);
}
869デフォルトの名無しさん:04/09/26 11:50:01
Tigerからはできるようになるんだっけ?
870デフォルトの名無しさん:04/09/26 23:51:50
自分のパソコンから複数行あるテキストファイルを
読み込ませてstringに入れるプログラムを
作りたいのですがどのようにしたらいいですか?
871デフォルトの名無しさん:04/09/27 00:05:21
質問です。
Javaアプリでゲーム作ってますが、どうしても逆コンパイルかけられて
ソースを覗かれるのがいやなのです。
何か良い方法はありませんか?
872デフォルトの名無しさん:04/09/27 00:15:52
>>872
>>871
とある参考書から引用したっす。よければご参考に。
------- Main.java -------
import java.io.*;

public class Main{
public static void main( String[] args ){
try{
String strTextData = BBSText.readFromFile( "C:\\aaa.txt" );
System.out.println( strTextData );
} catch( IOException ioe ){
System.out.println( "ファイルが無いよ!! C:\\aaa.txt" );
}
}
}
------- ここまで ---------
873デフォルトの名無しさん:04/09/27 00:17:16
>>871
続き
-------- BBSText.java ---------
import java.io.*;

public class BBSText {
public static String readFromFile( String strBBSFilePath )
throws IOException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
transport( new FileInputStream( strBBSFilePath ), outputStream, System.getProperty( "file.encoding" ) );
return outputStream.toString();
}
public static void transport( InputStream inputStream, OutputStream outputStream, String strEncode )
throws IOException {
BufferedReader in = new BufferedReader(
new InputStreamReader(
inputStream,
"JISAutoDetect" ) );
PrintWriter out = new PrintWriter(
new OutputStreamWriter( outputStream, strEncode ) );
String line = "";
while( ( line = in.readLine() ) != null ){
out.println( line );
  }
out.close();
in.close();
}
}
------- ここまで ---------
874デフォルトの名無しさん:04/09/27 00:18:55
>>870
まちがえた。
872と873は、870へのレスです。
875デフォルトの名無しさん:04/09/27 00:41:07
>871
曖昧化でもしとけ
てか、そんな宿題が出たのか?
876デフォルトの名無しさん:04/09/27 03:48:17
1、画面に自分の名前を表示するプログラムを作成してください。

2、次のように画面に出力するプログラムをfor文を2回使って作成してください。
*
**
***
****
*****
どうかお願いします。
877デフォルトの名無しさん:04/09/27 04:02:30
public class Sample2{
 public static void main(String[] args){
  for(int i = 0; i < 1; ++i){
   for(int j = 0; j < 1; ++j){
    System.out.println("*");
    System.out.println("**");
    System.out.println("***");
    System.out.println("****");
    System.out.println("*****");
   }
  }
 }
}
878876:04/09/27 04:25:21
877さんありがとうございます。
879デフォルトの名無しさん:04/09/27 07:25:34
>>877
おいおいネタで書くなや。
確かに糞宿題だが、、、、、。
せめてこのくらいの回答にしてくれや。

public class Sample2{
 public static void main(String[] args){
  for(int i = 0; i < 5; ++i){
   String s = "";
   for(int j = 0; j < i; ++j){
    s += "*";
   }
   System.out.println(s);
  }
 }
}
880デフォルトの名無しさん:04/09/27 09:40:33
>>870
public class Text extends ArrayList {
  public Text( String filename ) {
    try {
      BufferedReader bufRdr = new BufferedReader(new FileReader(filename));
      String line;
      while ((line = bufRdr.readLine()) != null) {
        this.add(line);
      }
      bufRdr.close();
    } catch (Exception e) {
      System.err.println(e.toString());
    }
  }
}
881デフォルトの名無しさん:04/09/27 09:42:03
こうやっといて、
Text text = new Text("aaa.txt");
とかやって、あとはイテレータで中身を取ってく。
けっこう楽。
882デフォルトの名無しさん:04/09/27 15:36:36
<プログラムの概要>:バブルソート
配列に格納された7個の数値を、バブルソートを使用して降順で並べ替える。

<プログラム名>
Bubble

<使用>
(1)int型の配列aを宣言し、値「8,45,15,90,62,73,22」を格納する。
   以下の説明では、配列の要素数(ここでは7)をNとしている。

(2)a[N-1]とa[N-2]を比較し、a[N-1]がa[N-2]より大きい場合は、a[N-1]とa[N-2]を
   入れ替える。同様にa[j]がa[j-1]より大きければa[j]とa[j-1]を入れ替える。こ
の操作を、j=N-1からiまで繰り返す。ただし、iは(2)の処理回数を表す値で
ある。(初回を0とする)

(3)(2)をi=0からN-2まで繰り返す。

(4)以下の<実行例>を参考にして、配列aの要素の各値を標準出力へ出力する。

<実行例>
>java Bubble
90 73 62 45 22 15 8
883882:04/09/27 18:06:04
↑誰かお願いします
884デフォルトの名無しさん:04/09/27 18:18:28
↓誰かどうぞ
885デフォルトの名無しさん:04/09/27 18:18:54
ていうかぐぐるとかできないのかねえ
886デフォルトの名無しさん:04/09/27 19:39:22
>>882
なんだ。質問だったのか。
それならはっきり質問と書いてくれ。
誰かが誤爆したか、暗記のメモ帳代わりに書いたのかと思ったよ。
887デフォルトの名無しさん:04/09/27 20:26:52
>>882
Bubble() {
  int[] a={8,45,15,90,62,73,22};
  int N=a.length;
  for(int i=0; i<N; ++i) {
    int num=a[N-1];
    for(int j=N-2; j>=i; --j) {
      if(a[j]>num) {
        int swap=num;
        num=a[j];
        a[j]=swap;
      }
    }
    if(num!=a[i]) {
      a[N-1]=a[i];
      a[i]=num;
    }
  }
  for(int i=0; i<a.length; ++i) System.out.print(a[i]+" ");
}

888デフォルトの名無しさん:04/09/27 20:28:06
↑エラーが出ます。
889j だと見にくいので k で:04/09/27 20:30:01
>>882
Bubble() {
  int[] a={8,45,15,90,62,73,22};
  int N=a.length;
  for(int i=0; i<N; ++i) {
    int num=a[N-1];
    for(int k=N-2; k>=i; --k) {
      if(a[k]>num) {
        int swap=num;
        num=a[k];
        a[k]=swap;
      }
    }
    if(num!=a[i]) {
      a[N-1]=a[i];
      a[i]=num;
    }
  }
  for(int i=0; i<a.length; ++i) System.out.print(a[i]+" ");
}
890デフォルトの名無しさん:04/09/27 20:31:09
>>888
出るわけ無いだろ
891デフォルトの名無しさん:04/09/27 20:43:22
>>889

Bubble.java:1: 'class' または 'interface' がありません。
Bubble() {
^
Bubble.java:2: \12288 は不正な文字です。
  int[] a={8,45,15,90,62,73,22};
^
(中略)
^
Bubble.java:18: \12288 は不正な文字です。
  for(int i=0; i<a.length; ++i) System.out.print(a[i]+" ");

エラー79個
892デフォルトの名無しさん:04/09/27 20:53:38
>>888
public static void main(String[] args)つけてないんじゃ・・・。
hello worldは出せるよね?
コピペするときは全角スペースに注意。
少しはぐぐれ。
893882:04/09/27 21:15:49
どうもありがとうございました
894デフォルトの名無しさん:04/09/27 21:21:45
>>892
エラーが出るわけないと書いたからコンパイルしてみただけ
895デフォルトの名無しさん:04/09/27 21:54:43
>>894
素人は黙っててください。
フツーは皆分かるもんなんです。
896デフォルトの名無しさん:04/09/27 21:55:21
そもそもなんでコンストラクタでやってるのかさっぱりわからん
897デフォルトの名無しさん:04/09/27 23:32:31
はげどう
898デフォルトの名無しさん:04/09/28 03:59:50
1〜50までの素数を表示するプログラムをお願いします
899デフォルトの名無しさん:04/09/28 04:12:53
public class Sosu{
 public static void main(String[] a){
  int[] a = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47};
  for(int i = 0; i < a.length; ++i) System.out.println(a[i]);
 }
}
900デフォルトの名無しさん:04/09/28 09:08:15
    for (int n = 2;n <= 50;n += 1) {
      boolean isprime = true;
      for (int cnt = 2;cnt < n;cnt += 1) {
        if (n % cnt == 0) {
          isprime = false;
        }
      }
      if (isprime) {
        System.out.println("" + n);
      }
    }
901デフォルトの名無しさん:04/09/28 09:15:24
なにゆえ+=1?
902デフォルトの名無しさん:04/09/28 10:57:34
フラグもいらないね。
903デフォルトの名無しさん:04/09/28 13:28:05
>>902
フラグは欲しいでしょ。
904U ◆CZtFsGiu0c :04/09/28 15:22:34
>>903
フラグはあってもいいけど、すぐにbreakしたほうがいいね。
それからcntの上限は、n/2まででいいのでは?
905デフォルトの名無しさん:04/09/28 15:39:59
まあ、仕様をみたすので899のコードでじゅうぶん。
906デフォルトの名無しさん:04/09/28 16:54:58
> なにゆえ+=1?
 C 出身者としては、++ というのはポインタに対してsizeof()だけインクリメントするものであって、ポインタでないものに対して ++ するのは生理的に厭なり。
> フラグはあってもいいけど、すぐにbreakしたほうがいいね。
> まあ、仕様をみたすので899のコードでじゅうぶん。
 899は外延的プログラムなり。こちらは「1とそれ自身以外に約数を持たない数」という、内包的定義に忠実なプログラムなり。本当は1で割り切れることと、それ自身で割り切れることのチェックを入れたかったところなのだけれど、くどいので省いたなり。
> それからcntの上限は、n/2まででいいのでは?
 n / cnt >= cntでよいなり。
907デフォルトの名無しさん:04/09/28 16:57:20
>>C 出身者としては、++ というのはポインタに対してsizeof()だけ
インクリメントするものであって

C以前の問題ではないですか?
908デフォルトの名無しさん:04/09/28 17:28:32
すこしはアルゴリズムの効率を考えろと言いたい
909デフォルトの名無しさん:04/09/28 17:40:34
charでA(\u0041)
に1を足してprintlnしたときにBと表示するにはどうしたらいいですか?
お願いします。
910デフォルトの名無しさん:04/09/28 17:44:18
Aに1足してBになるって保障されてたっけ?
911デフォルトの名無しさん:04/09/28 18:34:33
Javaのcharに限っては、文字集合もコードポイントの意味も言語仕様で
決まってて、Aの次はBだからいいんじゃね?
912デフォルトの名無しさん:04/09/28 21:07:41
素数は素数で割れなきゃ素数なんだよ。
もっとループ回数減らせよ。
913デフォルトの名無しさん:04/09/28 22:18:21
偶数を調べてる時点でバカ決定
914デフォルトの名無しさん:04/09/28 22:38:02
>>908 >>912 >>913
おまいらネタだって分かってねーだろ
>>901-904
同意。
>>905
いや、万一ネタだって分かってなくて、まんま提出したらバカだしさ。
このスレの主旨も考えようよ。
915デフォルトの名無しさん:04/09/28 22:58:07
指摘されたことが恥ずかしいからって
かってにスレの趣旨とか決めないでよw
916デフォルトの名無しさん:04/09/28 23:02:26
うるせえよ3流プログラマー
917デフォルトの名無しさん:04/09/28 23:03:27
そーすうっすね
918デフォルトの名無しさん:04/09/28 23:59:40
総合すると、だいたいこんな感じだろ。

int N = 50;
int[] primes = new int[N/2];
int primeCount = 1;
primes[0] = 2;
for (int i = 3; i <= N; i += 2) {
 boolean isPrime = true;
 for (int j = 1; j < primeCount; j++) {
  if ((i % primes[j]) == 0) { isPrime = false; break; }
 }
 if (isPrime) { primes[primeCount] = i; primeCount++; }
}
System.out.println(primes);
919質問です:04/09/29 00:35:39
パズルゲームを作る問題です。
「パズルピースをクリックしてから、ピースを起きたい位置で
もう一度クリックする」というやり方です。(ピースの数は4ピース)
どうぞよろしくお願いします。

image = new Array();
for(i=0; i<4; i++){ //パズルピースを画像配列imageに格納
image[i]=new Image();
image[i].src="a"+(i+1)+".gif";
}
image1=new Image();
var n,m;
//var cnt=10;
function funk(n)//クリックしたパズルピースをテーブルのクリックした場所に表示
{

}
function funk1(m)//クリックしたパズルピースをimage1.srcに代入
{

}
920ピーズその1:04/09/29 01:58:15
>>919
MyApp() throws HeadlessException {
Image[] img=new Image[4];
for(int i=0; i<img.length; ++i) img[i]=new Piece(i);
getContentPane().setLayout(new GridLayout(1,2,32,0));
JPanel[] table=new JPanel[2];
for(int i=0; i<table.length; ++i) {
table[i]=new JPanel(new GridLayout(2,2));
table[i].setBackground(Color.lightGray);
table[i].setPreferredSize(new Dimension(300,300));
table[i].setBorder(BorderFactory.createLoweredBevelBorder());
for(int k=0; k<4; ++k) {
JLabel lab=new JLabel();
lab.setBorder(BorderFactory.createLoweredBevelBorder());
lab.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) { setPiece(e); }
});
table[i].add(lab);
}
getContentPane().add(table[i]);
}
Component[] lab=table[1].getComponents();
for(int i=0; i<lab.length; ++i) {
((JLabel)lab[i]).setIcon(new ImageIcon(img[i]));
((JLabel)lab[i]).setBorder(BorderFactory.createRaisedBevelBorder());
}
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
921ピーズその2:04/09/29 01:59:09
void setPiece(MouseEvent e) {
JLabel lab=(JLabel)e.getComponent();
if(lab.getIcon()==null) {
if(stock==null) return;
lab.setIcon(stock);
stock=null;
lab.setBorder(BorderFactory.createRaisedBevelBorder());
} else {
if(stock!=null) return;
stock=lab.getIcon();
lab.setIcon(null);
lab.setBorder(BorderFactory.createLoweredBevelBorder());
}
}
922ピーズその3:04/09/29 02:00:35
private class Piece extends BufferedImage {
Piece(int num) {
super(150,150,BufferedImage.TYPE_INT_ARGB);
Graphics2D g=createGraphics();
switch(num) {
case 0: g.setColor(Color.blue); break;
case 1: g.setColor(Color.red); break;
case 2: g.setColor(Color.green); break;
case 3: g.setColor(Color.yellow);
}
g.fillRect(0,0,150,150);
g.setColor(Color.black);
g.setFont(new Font("Dialog", Font.BOLD, 60));
g.drawString(String.valueOf(num), 50,100);
g.dispose();
}
}
923ピーズその4:04/09/29 02:03:36
上の3つを下のクラス内にいれる。

package untitled;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
public class MyApp extends JFrame {
  Icon stock;
  ・
  ・
  ・
  public static void main(String[] args) throws HeadlessException {
    new MyApp();
  }
}
924デフォルトの名無しさん:04/09/29 02:13:27
>>919は、テーブルタグはhtmlで用意してるってことか?
925デフォルトの名無しさん:04/09/29 07:21:40
・GUI 関係などは基本的に放置
926デフォルトの名無しさん:04/09/29 07:33:52
ふつうに質問スレ行きだな。
927デフォルトの名無しさん:04/09/29 08:48:17
>>919
それ以前に、これJAVAの質問じゃないよ
928デフォルトの名無しさん:04/09/29 14:23:55
ぱっと見JavaScriptっぽいんですが
929デフォルトの名無しさん:04/09/30 12:07:13
CASLの簡単なコンパイラをjava言語でおねがいします。
コードの生成速度が速いコンパイラ,
誤入力への対処、表示の工夫など
930デフォルトの名無しさん:04/09/30 23:18:57
931デフォルトの名無しさん:04/09/30 23:26:29
932デフォルトの名無しさん:04/10/01 21:03:09
-- AAA.java --
public class AAA {
public AAA(){
System.out.println( "OUT" );
new BBB();
}
}
-- BBB.java --
public class BBB {
public BBB(){
System.out.println( "OUT" );
new AAA();
}
}
-- Main.java --
public class Main{
public static void main( String[] args ){
new AAA();
}
}
C:\>java Main
いくつOUTが出力されますか?
また、その理由も述べなさい。
933デフォルトの名無しさん:04/10/01 21:11:55
答え:1つ。
Out Of Memory Errorと出る。
934デフォルトの名無しさん:04/10/02 03:24:56
 ☆ 基本的なJavaアプリケーションプログラムの作成
  引数から指定した5つの小数について、大きい順に並べ替えた結果
  を出力するプログラムを作成して下さい。

  [実行例]
  % java MySortDouble 8.75 4.1 6.32 3.0 16.9
  [出力結果]
  -------------------------------------------------------------
  16.9
  8.75
  6.32
  4.1
  3.0
  -------------------------------------------------------------

という宿題が出されました。はっきり言ってさっぱりです。誰かお願いします
935デフォルトの名無しさん:04/10/02 05:02:38
>>934
例外処理適当だけど。
降順となると Arrays.sort もとたんに使いづらくなるね


import java.util.*;

public class MySortDouble {
public static void main(String[] args) {
Double[] array = new Double[args.length];
for (int i = 0; i < array.length; i++) {
try {
array[i] = new Double(Double.parseDouble(args[i]));
} catch (NumberFormatException e) {
System.err.println(e.toString() + "(at " + i + "th artument)");
array[i] = new Double(Double.NaN);
}
}
Arrays.sort(array, new Comparator() {
public int compare(Object lhs, Object rhs) {
return -((Double)lhs).compareTo(rhs);
}
});
for (int i = 0; i < array.length; i++)
System.out.println(array[i]);
}
}
936デフォルトの名無しさん:04/10/02 05:18:06
普通にソートした後、逆順にすればいいんでないかい
937デフォルトの名無しさん:04/10/02 06:00:44
ていうか学校の宿題にArrays.sort()使っても、なんのためにもならんな。
それでいいのか?
938デフォルトの名無しさん:04/10/02 14:01:06
>>937
仕様どおりうごけばいいんだ。
939デフォルトの名無しさん:04/10/03 21:11:02
えー
940デフォルトの名無しさん:04/10/03 21:24:05
ページ内のURLだけを表示するようする
また、リンクをたどって次々にページを取得
リンクが見つかるたびに次のページを取得する方法と
リンクを見つけたらそれを記憶しておいて、ページの解析が終わってから、次のページ群にとりかかる方法
が考えられる


下にソース張ります
941デフォルトの名無しさん:04/10/03 21:25:06
import java.io.*;
import java.net.*;

public class URL {
private BufferedReader in = null;
public URL(String string, String encoding) {
if(string.startsWith("http://")){
try{
URL url = new URL(string);
URLConnection urlConnection;
urlConnection = url.openConnection();
urlConnection.connect();
in = new BufferedReader(
new InputStreamReader(
urlConnection.getInputStream(),encoding));
}
catch(MalformedURLException e){
System.err.println("Wrong URL.");
}
catch(IOException e){
System.err.println("Cannot open connection.");
}
}
942デフォルトの名無しさん:04/10/03 21:25:45
else{
try {
in = new BufferedReader(
new InputStreamReader(
new FileInputStream(string), encoding));
}
catch (IOException e) {
System.err.println("ファイルが開けません: " + string);
System.exit(1);
}
}

}
public void print() {
try {
String line;
int count = 0;
while(true) {
line = in.readLine();
count++;
if (line == null)
break;
System.out.println(count + ": " + line);
}
}
catch (IOException e) {
System.err.println("ファイルの読み込み途中でエラーが発生しました。");
}
943デフォルトの名無しさん:04/10/03 21:26:16

try {
in.close();
}
catch (IOException e) {
System.err.println("ファイルを閉じるときにエラーが発生しました。");
}
}
public static void main(String args[]) {
TextViewer viewer = new TextViewer(args[0], "JISAutoDetect");
viewer.print();
}
}
944デフォルトの名無しさん:04/10/03 21:28:18

>> URL viewer = new URL(args[0], "JISAutoDetect");

スマソ 訂正
945デフォルトの名無しさん:04/10/04 01:55:12
初めて書き込みさせていただきます。
学校の課題でボタンを押したら文字を表示という風にしたいのですが、さっぱり分かりません…
しかも課題の提出期限が今週の火曜日なのです・・・
以下(下の書き込み)のソースを利用しろとのことです。
背景の色を変える処理を文字を変える処理にするんだとおもいますが、
drawStringをどう利用して良いのか分かりません。
どなたかお願いします。
946945:04/10/04 01:55:57

import java.awt.*;
import java.awt.event.*;

public class Rei24 extends Frame {
public Rei24 () {
setSize(300,200);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
947945:04/10/04 01:57:04

setLayout(new FlowLayout());
Button b1=new Button("青");
add(b1);
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
setBackground(Color.blue);
repaint();
}
});
Button b2=new Button("黄");
add(b2);
b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
setBackground(Color.yellow);
repaint();
}
});
}
public static void main(String[] args){
Frame w=new Rei24();
w.show();
}
}
948945:04/10/04 02:32:41
一つだけ書き忘れました。
表示させる文字は青のボタンを押したときは「あお」、黄のボタンを押したときは「き」です。
それではよろしくお願いします。
949デフォルトの名無しさん:04/10/04 09:48:12
ageとsageを掛けたり割ったりするにはどうすればいいのですか?

double age(double a1, double a2){
 return 0.5*a1 + a2;
}

double sage(double b1, double b2, double b3){
 return -7*b1 + 8*b2 + b3;
}
950デフォルトの名無しさん:04/10/04 09:52:55
>>949
戻り値を掛けたり割ったりすればいいじゃない
951デフォルトの名無しさん:04/10/04 10:48:21
配列num に格納された値のうち
「7 以上」の値を全て表示する
プログラムを教えてください。

public static void main(String argv[]){
int num[] = {2,11,23,5,6,7};

num.length
を使うらしいのですがわかりません。
952デフォルトの名無しさん:04/10/04 10:55:21
>>951
int num[] = {2,11,23,5,6,7};
for(int i=0; i<num.length; ++i) {
  if(num[i]>=7) System.out.println(num[i]);
}
953951:04/10/04 11:00:15
>>952さん
ありがとうございます。
954デフォルトの名無しさん:04/10/04 11:19:29
>>949

double x = age(a1, a2);
double y = sage(b1, b2, b3);

double kakezan = x*y; //age(a1, a2) * sage(b1, b2, b3) でもいい
double warizan = x/y; //age(a1, a2) / sage(b1, b2, b3) でもいい
955デフォルトの名無しさん:04/10/04 11:25:45
>>945
Rei24クラスを↓こうすればOK
956955:04/10/04 11:26:53
class Rei24 extends Frame {
private String text;
Rei24 () {
setSize(300,200);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
setLayout(new FlowLayout());
Button b1=new Button("青"); add(b1);
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
text="あお";
setBackground(Color.blue); repaint();
}
});
Button b2=new Button("黄"); add(b2);
b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
text="き";
setBackground(Color.yellow); repaint();
}
});
}
public void paint(Graphics g) {
super.paint(g);
if(text==null) return;
g.setFont(new Font("Dialog", Font.BOLD, 30));
int x=(getWidth()-g.getFontMetrics().stringWidth(text))/2;
int y=(getHeight()-g.getFontMetrics().getHeight())/2 + g.getFontMetrics().getAscent();
g.drawString(text, x,y);
}
}
957デフォルトの名無しさん:04/10/04 11:27:56
>>945
コンストラクタ中のsetLayout(...);のすぐうしろに
  Label label = new Label();
  add(label);
を追加して、さらにb1とb2のsetBackground(...);のかわりに
  label.setText("xxx");
と書く。「xxx」は「あお」とか「き」とか表示したい文字。
958デフォルトの名無しさん:04/10/04 11:30:12
>>955
わざと難しいこと教えて混乱させるなってw
959デフォルトの名無しさん:04/10/04 11:40:49
>>958
おお、以前の難しい&シフト論争の人か。何故ワタクシだと分かったんだ?
君は千里眼か?
しかし難しい事っつーよりも、>>955の方が明らかに問題の趣旨に
沿ってるだろ。キーポイントはdrawString()を使うのと、あと
setBackground()は、この出題者の意図からすれば外しちゃダメだ。
>>955を実行してみれば、こっちの方が点数が高いのは分かるはず。

それ以前に君のやり方だと、ボタンの左側に小さく文字が出るだけで
明らかに手抜きで、確実に点数は低いな。
960デフォルトの名無しさん:04/10/04 12:36:20
String aaa_w = "00";
while(rs.next()) {
String aaa_o = rs.getString("データベース項目");
if ( aaa_o != aaa_w )

このようなソースで aaa_w, aaa_oが同値であるにもかかわらず、if文の != 内に
処理が入ってしまうのはどこに原因が???
961デフォルトの名無しさん:04/10/04 12:57:02
以下の実行結果になるように○を埋めてください。



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

// 変数宣言
int[] a = {8, 45, 15, 90, 62, 73, 22}; // バブルソートするデータ
int t,i,j;

// データを降順でバブルソート
for (i = 0; j < a.length-1; i++) {
for(○){
if(a[j] > a[j-1]){
t = a[j];
○ = ○;
a[j-1] = t;
}
}
}
// 結果を標準出力へ出力
for(i = 0; i < a.length; i++) {
System.out.print(○);
}
}
}

<実行結果>
> java Bubble
90 73 62 45 22 15 8
962デフォルトの名無しさん:04/10/04 13:26:20
>>960
文字列としては同じだが、インスタンスとしては別物だから。
963960:04/10/04 14:40:11
>>962
ありがと、解決したよ。 !aaa_w.equals(aaa_o) とすればよかったんだねえ。
964デフォルトの名無しさん:04/10/04 15:25:09
>>961
public class Bubble {
public static void main(String[] args) {

// 変数宣言
int[] a = {8, 45, 15, 90, 62, 73, 22}; // バブルソートするデータ
int t,i,j;

// データを降順でバブルソート
for (i = 0; i < a.length-1; i++) { //←ここが一文字間違ってる。jをiに訂正
for(int j = a.length-1; j > i; j--){
if(a[j] > a[j-1]){
t = a[j];
a[j] = a[j-1];
a[j-1] = t;
}
}
}
// 結果を標準出力へ出力
for(i = 0; i < a.length; i++) {
System.out.print(a[i]);
}
}
}
965945:04/10/04 19:23:07
>>955
レスありがとうございます。
わざわざ難しい(のかどうか分からないですが)プログラムを書いてもらって非常に申し訳ないのですが、実際にコンパイルしてみるとエラーメッセーがどわぁっと…
自分ではどうやっても直せそうにないので、お気持ちだけということで。
どうもありがとうございました。

>>957
レスありがとうございます。
書いてある通りに変更してコンパイルしてみたのですが、以下のエラーが出てしまいました。
JAVAの基本も分かっていないので正直このエラーメッセージの指すことが良く分からないです…OTL
「l」が小文字だからいけないのかな?と思って大文字にしてもまた別のエラーメッセージが出るので自分の手には負えないみたいです…

Rei24.java:20: ローカル変数 label は内部クラスからアクセスされます。final で宣言される必要があります。
   label.setText("あお");
^
(黄色の場合も同様)

よろしければ、引き続きアドバイスお願いします!
966955:04/10/04 19:38:15
>>965
うう、なるほど。
一部抜粋という形で書いたのですが。。。
では、下に「完全版」のコードを書きますので、これを全てコピペして
コンパイルしてください。必ず動きますので。
967945:04/10/04 19:38:27
>>955氏=959氏?
すみません、959の方を読み飛ばしてしまいました。
問題の趣旨としましては、目的を達成すればいいので得点はあまり関係なさそうなんです。
ですので、setBackground()は外しても問題なさそうです。
drawString()を使って〜、と書いたのは文字を表示する方法をそれぐらいしか知らなかったので…
自分の説明不足でした。どうも申し訳ありませんでした。
968945のプログラム その1:04/10/04 19:39:35
package untitled56;
import java.awt.*;
import java.awt.event.*;
public class Rei24 extends Frame {
private String text;
public static void main(String[] args){
Frame w=new Rei24();
w.show();
}
Rei24 () {
setSize(300,200);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
setLayout(new FlowLayout());
Button b1=new Button("青"); add(b1);
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
text="あお";
setBackground(Color.blue); repaint();
}
});
Button b2=new Button("黄"); add(b2);
b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
text="き";
setBackground(Color.yellow); repaint();
}
});
}
969945のプログラム その2:04/10/04 19:40:08
public void paint(Graphics g) {
super.paint(g);
if(text==null) return;
g.setFont(new Font("Dialog", Font.BOLD, 30));
int x=(getWidth()-g.getFontMetrics().stringWidth(text))/2;
int y=(getHeight()-g.getFontMetrics().getHeight())/2 + g.getFontMetrics().getAscent();
g.drawString(text, x,y);
}
}
970デフォルトの名無しさん:04/10/04 20:07:17
正直フォントメトリクスとか使うのはアレだと思う
971957:04/10/04 20:09:25
>>965
メソッドの外側に
  Label label;
と書いて、Label label = new Label();を
  label = new Label();
に変更してください。
972デフォルトの名無しさん:04/10/04 20:10:46
FontMetricsなんかいつもばりばり使ってますが何か。
973その1:04/10/04 20:28:36
>>945

import java.awt.*;
import java.awt.event.*;

public class Rei24 extends Frame {

Label label;

public Rei24() {

setSize(300, 200);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

setLayout(null);

//ラベルを作って --> フレームに貼って --> 大きさを整えて --> 文字を中央に揃えて
// --> 文字の大きさを整える
label = new Label("('A`)");
add(label);
label.setBounds(10, 100, 280, 50);
label.setAlignment(Label.CENTER);
label.setFont(new Font("Dialog", Font.BOLD, 30));

974その2:04/10/04 20:29:11
//ボタンを作って --> フレームに貼って --> 大きさを整えて --> 動作を定義
Button b1 = new Button("青");
add(b1);
b1.setBounds(10, 160, 130, 20);
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
label.setText("BLUE!");
}
});

//ボタンを作って --> フレームに貼って --> 大きさを整えて --> 動作を定義
Button b2 = new Button("黄");
add(b2);
b2.setBounds(160, 160, 130, 20);
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
label.setText("YELLOW!");
}
});
}

public static void main(String[] args) {
Frame w = new Rei24();
w.show();
}

}
975デフォルトの名無しさん:04/10/04 20:32:05
たぶんこの宿題はボタンとかイベントとかの練習だろうね。
いきなり paint(Graphics g) とか getFontMetrics() とか高度なことすると
いかにも人に書かせました臭がプンプンするのでやめたほうが・・・。
976945:04/10/04 22:49:43
>>955
見事に動きました!ただ、やはり言われているように自分のレベルでこれを提出すると講師に色々と言われそうなので…
お手数かけました。もっと深くJavaを使うようになったらまたよろしくお願いします。
どうもありがとうございました。

>>973
レスどうもありがとうございます。
沢山の方からレスを頂いて非常に嬉しい限りです。
今まで頂いたレスの中で氏のものが一番分かりやすかったので(といっても理解はしていないが)それを使わせてもらうことにしました。
どうもありがとうございました。

このスレの住民の皆様、お世話になりました。
また機会があればよろしくお願いします。
977デフォルトの名無しさん:04/10/04 22:56:26
>沢山の方からレスを頂いて非常に嬉しい限りです。

じつは2人という罠w
バグだらけのアドバイスしちゃってごめん。
はじめから動作確認してから書き込めばよかった。
978デフォルトの名無しさん:04/10/04 22:59:05
あまり関係ない話だけどさ
J2SE5.0を導入したらEclipse3.0でプログラムが実行できなくなりました。
解決方法を教えてください
979デフォルトの名無しさん:04/10/04 23:00:00
>>978
それは宿題ではないな。
980デフォルトの名無しさん:04/10/04 23:29:47
β版だしね
981961:04/10/04 23:29:50
>>964
ありがとうございましたm(_ _)m
982デフォルトの名無しさん:04/10/05 00:57:20
5と入力すると
*
* *
* *
* *
*
こういうの出力するには
どうしたらいいんですか?
983デフォルトの名無しさん:04/10/05 01:04:41
>>982
おいおい....条件くらい書いてくれよ。
そんな感じのものが表示できればなんでもいいのか?
それとも「5」と入力したら最初と最後だけはアスタリスクが一つ、
それ以外は二つってことなのか?
訊くんなら、答えが得られるように訊けよ。
984デフォルトの名無しさん:04/10/05 01:17:28
ぬるぽ
985デフォルトの名無しさん:04/10/05 02:53:46
>>983
教本に必ず載ってるので書かなくてもわかると思うが・・・
986デフォルトの名無しさん:04/10/05 09:21:59
>>982って微妙じゃないか?
ピラミッド型になる問題はよくみるけど…
987デフォルトの名無しさん:04/10/05 10:08:06
>>985
解りません。
988デフォルトの名無しさん:04/10/05 10:12:14
>>985
Cでそんな問題みたことあるけど、俺が見たのは5と入力すると

*
**
***
****
*****

と表示されるやつだった。5段の半三角ね。
よって、>>983は一般的ではない希ガス。
つか、普通に条件を明記したらええんちゃう?
989988:04/10/05 10:13:20
間違えた。>>982です。無駄レススマソ
990デフォルトの名無しさん:04/10/05 10:23:31
>>980
もうβ取れてるけど・・・。

まあ実質まだβ版なわけだが。
991デフォルトの名無しさん:04/10/05 11:06:02
Java初心者スレに行ったらこっちに行けと言われたので移動しました。

Javaの勉強をはじめて1週間↓の超初心者です。SoftBank社の「やさしいJava第2版」のLesson6練習問題の
2の答えを教えてください…ヒントでもいいです…
ちなみに「キーボードからテストの点数を入力させ、その合計点を出力するコードを記述せよ」という問題です。
最後の答えを出力させる場合に0を入力しろ。ということでした。

import java.io.*;

class Rensyu2
{
public static void main(String args[]) throws IOException
{
System.out.println("テストの点数を入力してください(0で終了)");

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

do{
String nyuryoku = br.readLine();
res = Integer.parseInt(nyuryoku);

for(goukei = 1; goukei <= res; goukei++)
goukei += res;
}while(res > 0);

if(res == 0){
System.out.println("テストの合計点は" + goukei + "点です");
}
}}

自分でも「明らかに違う」と思うのですけどどこをどう直したらいいのかわかりません…
繰り返しと、入力した数値を合計する方法がわからないです…お願いします。
992デフォルトの名無しさん:04/10/05 11:26:20
>>991
まず合計点数goukeiの宣言と、何もせずにそれを出力する文を作ろう。
その宣言と出力の間に入力部分を作ろう。ここは>>991のソースから転用でOK。
ただし、do文の中のfor文及びその中身はいらないので削除しておこう。
resは入力された点数なので、それをgoukeiに足す文をresを取得した文のあとに追加しよう。
あとはマイナスの時はエラーを表示して合計しないとか、0以外の場合はdo文を出ないようにするとかすればいいんでないかな。
993デフォルトの名無しさん:04/10/05 11:34:48
>992
ありがとうございます。

それと更にすみませんが、

do{
String nyuryoku = br.readLine();
int res = Integer.parseInt(nyuryoku);

}while(res > 0);

の部分の

}while(res > 0);

なのですが、ここでいつも「シンボルを解決できません」と出ます…
でも、0と入力されたら終了するプログラムなのでこう入力するんじゃないのでしょうか?
994デフォルトの名無しさん:04/10/05 11:37:21
>>993
resがdo文の{}の中で宣言されてるのに、その外(whileはdo文の{}の外にある)で使用されてるのでシンボルが解決できないとエラーが出る。
あと、それだと0以外のマイナス値でも終了してしまうので変更すべし。
995デフォルトの名無しさん:04/10/05 11:49:25
>994
ありがとうございます!あとは何とか
自分でがんばってみようと思います!!
996デフォルトの名無しさん:04/10/05 15:12:49
まちがえた。
5とユーザが入力すると
ひし形になるやつです。
つまり
はじめに
>数値を入力してください。
と出力して
>5
と入力すると。
□□*□□
□*□*□
*□□□*
□*□*□
□□*□□
(□は空白すぺースです。)
と出力する。

どうかよろしくお願いします。


997デフォルトの名無しさん:04/10/05 16:02:15
997
998デフォルトの名無しさん:04/10/05 16:02:50
998
999デフォルトの名無しさん:04/10/05 16:03:38
999?
1000ゲッツ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。