5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

【好調】Java の宿題ここで答えます【三巡目】

1 :デフォルトの名無しさん:04/11/16 09:30:43
【基本ルール】
・丸投げOK なるべく問題文を直接うpしておくれよ
・前提条件も全部出しておくれよ 数学関係は数式も出しておくれよ
・GUI 関係などは基本的に放置
・内容単純でも規模デカすぎるのはマンドクセェから省略
・JavaScript など、他言語の課題は徹底的にゴルァ

【附則】
・ポストの前に自助努力 キーワードくらいググらんかボケェ
・ウゼェ問題設定と屑コードの穴埋め問題は徹底糾弾 出題者は謝罪しる
・自前のコードがあれば迷わずコピペ
・エラーが出たらエラーメッセージをコピペ
・戦果があった場合は報告をキボンヌ

【前スレ】
Java!宿題!(ttp://pc5.2ch.net/test/read.cgi/tech/1096959843/)
Java の宿題ここで答えます。(ttp://pc5.2ch.net/test/read.cgi/tech/1089527630/)

2 :デフォルトの名無しさん:04/11/16 14:53:27
写真(640*480)のRGB値から色相ヒストグラム(色相は0〜359)を生成して←ここまではできています
その色相ヒストグラムの色相値2.5〜45までを平滑化するメソッドはどのようにすればいいでしょうか?


3 :古代帝國富士皇朝総帥・伯壬旭:04/11/16 17:25:30
>>2
double[] smoothImage(double[] hue, int width, double lead, double anchor) {
double[] newhue=new double[hue.length];
int[] del={-(width+1), -width, -(width+1), -1, 0, +1, (width-1), width, (width+1)};

for(int i=0; i<hue.length; ++i) {
if(hue[i]>=lead && hue[i]<=anchor) {
double value=0;
double count=0;
for(int k=0; k<del.length; ++k) {
int idx=i+del[k];
if(idx>=0 && idx<hue.length) {
value+=hue[idx];
count+=1;
}
}
newhue[i]=value/count;
} else {
newhue[i]=hue[i];
}
}
return newhue;
}


4 :古代帝國富士皇朝総帥・伯壬旭:04/11/16 17:30:41
>>2
上記のメソッドを呼び出す時は、>>2の要求ならこんな感じで

double[] newhue = smoothImage(hue, 640, 2.5, 45);

hueは全ピクセルの色相値(Hue)が入ってる配列で、返値の
newhueは、平滑化された新しいHue値が入ってる配列。


5 :間違えた 訂正:04/11/16 17:54:05
>>2
double[] smoothImage(double[] hue, int width, double lead, double anchor) {
double[] newhue=new double[hue.length];
int[] offsetC={-(width-1), -width, -(width+1), -1, 0, +1, (width-1), width, (width+1)};
int[] offsetL={-width, -(width+1), 0, +1, width, (width+1)};
int[] offsetR={-(width-1), -width, -1, 0, (width-1), width};
int[] offset;
for(int i=0; i<hue.length; ++i) {
if(hue[i]>=lead && hue[i]<=anchor) {
double value=0;
double count=0;
if(i%width==0) offset=offsetL;
else if(i%width==width-1) offset=offsetR;
else offset=offsetC;
for(int k=0; k<offset.length; ++k) {
int idx=i+offset[k];
int line=i/width;
if(idx>=0 && idx<hue.length) {
value+=hue[idx];
count+=1;
}
}
newhue[i]=value/count;
} else {
newhue[i]=hue[i];
}
}
return newhue;
}


6 :デフォルトの名無しさん:04/11/16 20:23:45
e^(-x)+(x/5)=1 (x>0) の解が4.965であることを数値計算法(例えばニュートン法)によりプログラムを作ってください。
初心者すぎてごめんなさい…よろしくお願いします。

7 :デフォルトの名無しさん:04/11/16 20:29:07
>>6
簡単すぎる。答える気にもならない。
それくらい自分でやってください。

8 :デフォルトの名無しさん:04/11/17 01:43:43
ロジスティックモデルx[n+1]=a*x[n](1-x[n])を縦軸x[n+1]、横軸x[n]のグラフにあらわす

9 :デフォルトの名無しさん:04/11/17 01:44:24
↑お願いします

10 :デフォルトの名無しさん:04/11/17 03:44:39
でこのJava宿題スレの二つ平行活動はいつまで続くんだ?

11 :デフォルトの名無しさん :04/11/17 20:33:00
ここの内容とはちょっと違うんだけど、JAVAとASPでやりとりすることってできるんですか。
正確には、jspかServlet内でVBscriptで作った関数を使いたいんですよ。

12 :デフォルトの名無しさん:04/11/19 01:01:00
台形の面積,三角錐,立方体の体積を計算するcalcというメソッドを作ってください。
よろしくお願いします。

13 :デフォルトの名無しさん:04/11/19 01:20:11
public class Diffmain {
public static int getLevenshteinDistance (String s, String t) {
if (s == null || t == null) {
throw new IllegalArgumentException("Strings must not be null");}
int n = s.length(); // length of s
 int m = t.length(); // length of t
if (n == 0) {
return m;
} else if (m == 0) {return n;}
int p[] = new int[n+1]; //'previous' cost array, horizontally
int d[] = new int[n+1]; // cost array, horizontally
int _d[]; //placeholder to assist in swapping p and d
// indexes into strings s and t
int i; // iterates through s
int j; // iterates through t
char t_j; // jth character of t
int cost; // cost
for (i = 0; i<=n; i++) {p[i] = i;}
for (j = 1; j<=m; j++) {
  t_j = t.charAt(j-1);
d[0] = j;
for (i=1; i<=n; i++) {
cost = s.charAt(i-1)==t_j ? 0 : 1;
// minimum of cell to the left+1, to the top+1, diagonally left and up +cost
d[i] = Math.min(Math.min(d[i-1]+1, p[i]+1), p[i-1]+cost);
}
// copy current distance counts to 'previous row' distance counts
_d = p;p = d;d = _d;}
return p[n];
}
エディットグラフをO(M)で計算する方法はわかったのですが、
これから最適解を求める場合どうすればいいですか?

14 :デフォルトの名無しさん:04/11/22 14:38:27


15 :デフォルトの名無しさん:04/12/12 03:07:53
おまいら、ちゃんと2chでも見えるようにインデント汁!


16 :デフォルトの名無しさん:04/12/20 09:50:07
インデントにこだわるのは素人

17 :デフォルトの名無しさん:04/12/20 11:24:28
再利用ですかそうですか。

18 :デフォルトの名無しさん:04/12/20 11:31:00
【Java宿題スレッド基本ルール 五箇条のご誓文】

@問題文は自己省略せずに、直接全部貼り付けてください。
 宿題&課題をそのまま丸投げするのが、一番好ましい提示法です。
A数学問題は何々法でせよだけでなく、その解を出す為の数式を
 具体的に詳細に説明してください。
 ただ、数学問題の回答率は低いです・・・。
B宿題&課題とその回答プログラムに対する質問はOKですが、
 それ以外の質問はここではしないでください。
CJavaScriptなど、他言語の課題はやめてください。
Dもし自分の提示課題への回答プログラムが返って来たら、
 動いた動かなかった位の返レスをお願いします。


19 :デフォルトの名無しさん:04/12/20 11:32:57
【Java宿題スレッド基本ルール 五箇条のご誓文】

@ 問題文は自己省略せずに、直接全部貼り付けてください。
   宿題&課題をそのまま丸投げするのが、一番好ましい提示法です。

A 数学問題は何々法でせよだけでなく、その解を出す為の数式を
   具体的に詳細に説明してください。
  ただ、数学問題の回答率は低いです・・・。

B 宿題&課題とその回答プログラムに対する質問はOKですが、
   それ以外の質問はここではしないでください。

C JavaScriptなど、他言語の課題はやめてください。

D もし自分の提示課題への回答プログラムが返って来たら、
  動いた動かなかった位の返レスをお願いします。


20 :デフォルトの名無しさん:04/12/20 14:05:34
年末期限の宿題のピークってもう過ぎたのかしら

21 :デフォルトの名無しさん:04/12/20 15:50:48
結局、以前手違いで立てられたこの並列スレを使う事にしたのか?
しかし、このスレが落ちてなかったのは、ム板の過疎ぶりを示してるなw

22 :ROMだけな人:04/12/20 16:15:33
>>21
釣りは他所でやってくれない?
普段見てないんだろうけど、けっこうこのスレは書き込みあるし
Java質問スレよりふいんき(なぜかry)がいいんだよ。

23 :デフォルトの名無しさん:04/12/20 22:09:09
>>21
見事にテンプレ間違ってると思ったら、そういうことか。

>>22
なんで怒ってんの?

24 :デフォルトの名無しさん:04/12/21 04:15:11
このファイル(英語のテキストファイル)をコマンドラインの第一引数として与え,
ファイル中に出現する単語を,一行に一単語ずつ出力するプログラムを作成せよ。
なお,単語と単語はすべてスペースで分かち書きされている。
なお,ピリオドは無いが,省略形を意味するピリオドは含まれている。
この100行(与えられたテキストファイルが100行ありました)の単語数はいくつになるか,それも出力せよ。
(1)上記の仕様を満たすプログラムを,ファイルから一文字ずつ入力することで実装せよ。
(2)上記の仕様を満たすプログラムを,ファイルから一行ずつ入力することで実装せよ。
この場合,一行をStringとして取り込み,StringTokenizerクラスを用いることで実装せよ。

という宿題がありまして、本を見ながら自分でやってみたのですが、与えられたテキストファイル(a.txt)を実際に
どう読みこませたらいいのか分かりません。
なので、自分のプログラムがあってるかどうかがわからないのですが、
どのようにすればいいのでしょうか?

↓に自分が作ったプログラムの出だし部分を書いておきます。

import java.io.*;
class program {
public static void main(String[] args) {
try{
FileReader file = new FileReader(args[0]);


a.txtという文字がプログラムにないので、ただ実行しただけじゃどうにもならないということは分かるんですが。

お願いします。

25 :デフォルトの名無しさん:04/12/21 04:46:13

java program a.txt

と実行するとか・・・

26 :デフォルトの名無しさん:04/12/21 06:04:55
どなたかttp://sparrow.math.ryukoku.ac.jp/~junta/edu/graphics/exercise/13.html
をお願いします。
ttp://sparrow.math.ryukoku.ac.jp/~junta/edu/graphics/note.pdf
ここの第11章、第12章を参考にして、サンプルのプログラムのように作ってください。
スタートやストップといったボタンの設定の気ずかいは不要です。あつかましいですが、木曜までにおねがいします。
木曜までに

27 :デフォルトの名無しさん:04/12/21 10:27:55
>>24
>StringTokenizer は、互換性を維持する目的で保持されているレガシークラスであり、
>新規コードでは使用が推奨されていません。この機能の使用を考えているなら、
>String の split メソッドまたは java.util.regex パッケージを代わりに使用することを
>お勧めします。
とあるけど、結構使うの見るなあ。なんでだろ

28 :デフォルトの名無しさん:04/12/21 10:29:02
>>24
import java.io.*;
import java.util.*;

public class CBLW{
  private static void read(File f, HashMap<String, Integer> map, ArrayList<String> list)throws IOException{
    BufferedReader br = new BufferedReader(new FileReader(f));
    String line;
    while((line=br.readLine()) != null){
      StringTokenizer st = new StringTokenizer(line);
      while(st.hasMoreTokens()){
        String word = st.nextToken();
        Integer q = map.get(word);
        int c = 0;
        if(q != null) c = q.intValue();
        else list.add(word);
        map.put(word, new Integer(++c));
      }
    }
    br.close();
  }

29 :デフォルトの名無しさん:04/12/21 10:30:25
>>24
  public static void main(String[] args)throws IOException{
    File f = new File(args[0]);
    HashMap<String, Integer> map = new HashMap<String, Integer>();
    ArrayList<String> list = new ArrayList<String>();
    read(f, map, list);
    print(map, list);
  }
}


仕様を満たしていない気がしますが、そのあたりは適当に書き換えてください。

30 :デフォルトの名無しさん:04/12/21 10:31:37
>>24
これを28と29の間に…orz

  private static void print(HashMap<String, Integer> map, ArrayList<String> list){
    for(int i=0; i<list.size(); i++){
      String word = list.get(i);
      System.out.print(word+" ");
      System.out.println(map.get(word));
    }
  }

31 :デフォルトの名無しさん:04/12/21 20:13:20
同じ学科あげ

32 :デフォルトの名無しさん:04/12/21 23:00:21
龍谷かよ

33 :デフォルトの名無しさん:04/12/21 23:03:26
>>27
おー。5.0でやっと公式にレガシークラスになったのかヽ(´∀`)ノ


34 :M.B.:04/12/22 00:05:18
> Java質問スレよりふいんき(なぜかry)がいいんだよ。
 このコードまみれの殺伐とした雰囲気が
 読めていない香具師がいるようだな
            ∧_∧
     ∧_∧  (`<_´ ) 賤業意識が抜けないところが
     ( ´_ゝ`)  〈   ⌒i    旧世代だわね兄者
    /   \ /    | |
    /    / ̄ ̄ ̄ ̄/ |
  __(__ニつ/  IBM   / .| |____
      \/____/ (u っ


35 :デフォルトの名無しさん:04/12/22 00:12:50
まあ、「お前に理解なんて期待してねえ。この回答でも写しとけや、ぺっ」というスレだからな。

36 :M.B.:04/12/22 00:41:43
まあ、「お前に人間性なんて期待してねえ。さっさと回答しろや、ぺっ」という奴も多いからな。


37 :デフォルトの名無しさん:04/12/22 00:43:43
ソース貼る香具師はここに貼れ。
2chでだらだらと続けられても困る。
http://www.wikiroom.com/java/?%a5%bd%a1%bc%a5%b9%c5%bd%c9%d5%a4%b1

38 :M.B.:04/12/22 00:45:07
Tomcat + JSP で開発した電子掲示板システムが
快調に動いているとかいう話をしたいのだがな
            ∧_∧
     ∧_∧  (`<_´ ) さっさと別スレを立てなさい兄者
     ( ´_ゝ`)  〈   ⌒i
    /   \ /    | |
    /    / ̄ ̄ ̄ ̄/ |
  __(__ニつ/  IBM   / .| |____
      \/____/ (u っ


39 :デフォルトの名無しさん:04/12/22 01:06:03
さ・ら・せ! さ・ら・せ!

40 :M.B.:04/12/22 01:07:47
>>11
ASP はぜんぜん知らんが、Web コンテンツ間で制御を渡すカラクリは
けっきょく post か get しかないだろうから、
それぞれ別 port を監視するコンテンツサーバーを
個別に走らせるか(Oracle みたいな DB だって、
普通はサーバとして動いている)、よくあるコンテンツ
サーバーシステム(Micromedia の ColdFusion とか)みたいに
サーバーの二階建てをやらかすとかすれば、とりあえず
相互利用は可能と思われ。

 ……漏れはマンドクセと思ったので、オライリー本
(『Tomcat ハンドブック』)に従って
Tomcat を単独で立てるスタイルを選択したが。

41 :M.B.:04/12/22 01:17:19
>>39
二百行未満で書けちゃうので、見るとがっかりすると思うが。
「Tomcat + JSP」というアイデア一発のネタだし、
「できる」ということが解れば、似たようなものを作るのは
簡単だし、そこそこプログラム書ける香具師だったら、
けっきょく同じようなコードになると思われ。
前スレ埋めるついでに晒すかな?
JSP にはまだ不慣れ(つーか仕事で ColdFusion を
やらされてるのだが、マイナーなので人の手当ができず、
もっとメジャーな別システムに移植できんかと思って
Tomcat をいじりはじめたのだ)なので、
「なんつーダサいコードだ」と笑われそうだが。

42 :M.B.:04/12/22 01:23:50
 どこか手頃なダイナミック DNS サーバーはないかな
            ∧_∧
     ∧_∧  (`<_´ ) もはやスレ違いを指摘する気力も
     ( ´_ゝ`)  〈   ⌒i    ありませんわ兄者
    /   \ /    | |
    /    / ̄ ̄ ̄ ̄/ |
  __(__ニつ/  IBM   / .| |____
      \/____/ (u っ


43 :M.B.:04/12/22 01:28:16
 無駄にスレを消費しているようで
  罪悪感があるのだが
            ∧_∧
     ∧_∧  (`<_´ ) 無駄なのは正しい認識だけど、
     ( ´_ゝ`)  〈   ⌒i    それが『2ちゃんねる』ですわ兄者
    /   \ /    | |
    /    / ̄ ̄ ̄ ̄/ |
  __(__ニつ/  IBM   / .| |____
      \/____/ (u っ

44 :24:04/12/22 01:34:05
なんとかできました。
みなさんありがとうございました。

45 :M.B.:04/12/22 01:45:09
 妹者よ、つねづね思うのだが、
 問題文を直接コピペせずに、リンクだけ張るのは
 文学的にいかがなものかと
            ∧_∧
     ∧_∧  (`<_´ ) 「丸投げOK」といっても、
     ( ´_ゝ`)  〈   ⌒i    節度というものが欲しいわよね兄者
    /   \ /    | |
    /    / ̄ ̄ ̄ ̄/ |
  __(__ニつ/  IBM   / .| |____
      \/____/ (u っ




46 :デフォルトの名無しさん:04/12/22 02:27:23
>>26
第12章のサンプルのソースで形はできているのだが、自分も勉強中の身なので、動画をつくるのが難しい。
すまん俺では力になれそうにない。
誰か賢い人よ、あとはまかせた。

47 :とある賢い人(自称):04/12/22 03:23:51
>>46
なんか面倒そうなのでスルー。
神を待て。

48 :>>26 その1:04/12/22 14:00:15
import javax.swing.*; import java.awt.*; import java.awt.event.*;
import java.awt.image.*; import java.util.*; import java.util.Timer;
public class HW51 extends JApplet {
static final double XMIN = -1, XMAX = 1, YMIN = -1, YMAX = 1, ZMIN = -1, ZMAX = 1;
static final int N = 20;
double z[][] = new double[N][N];
double degX = 45, degY = 45;
double radX = Math.toRadians(degX), radY = Math.toRadians(degY);
int prevX, prevY;
boolean moveF;
int moveP = 10;
BufferedImage img = new BufferedImage(400, 400, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = img.createGraphics();
JLabel lab = new JLabel(new ImageIcon(img));

synchronized void moveZ() {
if (moveF) {
--moveP;
if (moveP <= -10) moveF ^= true;
} else {
++moveP;
if (moveP >= 10) moveF ^= true;
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
z[i][j] = 0.4 * Math.sin(2.0 * Math.PI / N * i) * Math.sin(2.0 * Math.PI / N * j)
* ((double) moveP / 10);
}
}
}

49 :>>26 その2:04/12/22 14:00:52
public void init() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
z[i][j] = 0.4 * Math.sin(2.0 * Math.PI / N * i) * Math.sin(2.0 * Math.PI / N * j);
}
}
lab.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
prevX = e.getX(); prevY = e.getY();
}
});
lab.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
int addX = (e.getX() - prevX) / 4 * 4;
int addY = (e.getY() - prevY) / 4 * 4;
if (addX == 0 && addY == 0) return;
degY += addX;
if (degY >= 360) degY = 0;
else if (degY < 0) degY = 359;
degX += addY;
if (degX >= 360) degX = 0;
else if (degX < 0) degX = 359;
prevX = e.getX(); prevY = e.getY();
radX = Math.toRadians(degX); radY = Math.toRadians(degY);
draw();
}
});
g.setBackground(Color.white); g.setColor(Color.black); getContentPane().add(lab); draw();
new Timer().schedule(new TimerTask() {
public void run() { moveZ(); draw(); }
}, 1000, 100);
}

50 :>>26 その3:04/12/22 14:01:38
synchronized void draw() {
g.clearRect(0, 0, img.getWidth(), img.getHeight());
double xx[][] = new double[z.length][z.length];
double zz[][] = new double[z.length][z.length];
double sinA = Math.sin(radX), sinB = Math.sin(radY);
double cosA = Math.cos(radX), cosB = Math.cos(radY);
double x, y, y0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
x = XMIN + (XMAX - XMIN) / N * i; y = YMIN + (YMAX - YMIN) / N * j;
y0 = y * cosA - z[i][j] * sinA;
zz[i][j] = y * sinA + z[i][j] * cosA; xx[i][j] = x * cosB - y0 * sinB;
}
}
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 1; j++) {
int xpg[] = { transX(xx[i][j]), transX(xx[i + 1][j]),
transX(xx[i + 1][j + 1]), transX(xx[i][j + 1]) };
int zpg[] = { transZ(zz[i][j]), transZ(zz[i + 1][j]),
transZ(zz[i + 1][j + 1]), transZ(zz[i][j + 1]) };
g.drawPolygon(xpg, zpg, xpg.length);
}
}
lab.repaint();
}
int transX(double x) {
return (int) ((x - XMIN) / (XMAX - XMIN) * getSize().width * 0.8 + (getSize().width * 0.1));
}
int transZ(double z) {
return (int) ((ZMAX - z) / (ZMAX - ZMIN) * getSize().height * 0.8 + (getSize().height * 0.1));
}
}

51 :古代帝國富士皇朝総帥・伯壬旭:04/12/22 14:07:53
>>26
全部コピペしてコンパイル。
回転、アニメ、バッファ付きの課題3です。


52 :どうすればいいの?:04/12/22 14:12:59
宿題でお絵かきアプレットがだされたのですが、
Javaアプレットから、CGIへデータをPOSTするにはどのようにすれば
いいのでしょうか?

URLConnectionを使えばいいのかSocket使えばいいのかわかりませんし、
マルチパート形式でPOSTすると受け取るCGI側で「バウンダリがおかしい
じゃねえかごるぁ」と起こられますしで、泣きが入ってます。

(´Д゜)どなたかおしえてください

53 :古代帝國富士皇朝総帥・伯壬旭:04/12/22 14:26:10
>>26
失礼。一部間違えました。
(それでも動くけど、アプレットサイズを縦横400以上にすると、
 一部画像が欠けてしまう)
訂正版を下に貼るので、そっちを提出してください。(それも課題3)


54 :>>26 真その1:04/12/22 14:31:47
import javax.swing.*; import java.awt.*; import java.awt.event.*;
import java.awt.image.*; import java.util.*; import java.util.Timer;
public class HW51 extends JApplet {
static final double XMIN = -1, XMAX = 1, YMIN = -1, YMAX = 1, ZMIN = -1, ZMAX = 1;
static final int N = 20;
double z[][] = new double[N][N];
double degX = 45, degY = 45;
double radX = Math.toRadians(degX), radY = Math.toRadians(degY);
int prevX, prevY;
boolean moveF; int moveP = 10;
BufferedImage img; Graphics2D g; JLabel lab = new JLabel();
synchronized void moveZ() {
if (moveF) {
--moveP;
if (moveP <= -10) moveF ^= true;
} else {
++moveP;
if (moveP >= 10) moveF ^= true;
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
z[i][j] = 0.4 * Math.sin(2.0 * Math.PI / N * i) * Math.sin(2.0 * Math.PI / N * j)
* ((double) moveP / 10);
}
}
}
int transX(double x) {
return (int) ((x - XMIN) / (XMAX - XMIN) * getSize().width * 0.8 + (getSize().width * 0.1));
}
int transZ(double z) {
return (int) ((ZMAX - z) / (ZMAX - ZMIN) * getSize().height * 0.8 + (getSize().height * 0.1));
}

55 :>>26 真その2:04/12/22 14:33:41
public void init() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
z[i][j] = 0.4 * Math.sin(2.0 * Math.PI / N * i) * Math.sin(2.0 * Math.PI / N * j);
}
}
lab.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
prevX = e.getX(); prevY = e.getY();
}
});
lab.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
int addX = (e.getX() - prevX) / 4 * 4;
int addY = (e.getY() - prevY) / 4 * 4;
if (addX == 0 && addY == 0) return;
degY += addX;
if (degY >= 360) degY = 0;
else if (degY < 0) degY = 359;
degX += addY;
if (degX >= 360) degX = 0;
else if (degX < 0) degX = 359;
prevX = e.getX(); prevY = e.getY();
radX = Math.toRadians(degX); radY = Math.toRadians(degY);
draw();
}
});
getContentPane().add(lab); draw();
new Timer().schedule(new TimerTask() {
public void run() { moveZ(); draw(); }
}, 1000, 100);
}

56 :>>26 真その3:04/12/22 14:34:36
synchronized void draw() {
if (img == null) {
img = new BufferedImage(getSize().width, getSize().height, BufferedImage.TYPE_INT_ARGB);
g = img.createGraphics();
g.setBackground(Color.white); g.setColor(Color.black);
lab.setIcon(new ImageIcon(img));
}
g.clearRect(0, 0, img.getWidth(), img.getHeight());
double xx[][] = new double[z.length][z.length];
double zz[][] = new double[z.length][z.length];
double sinA = Math.sin(radX), sinB = Math.sin(radY);
double cosA = Math.cos(radX), cosB = Math.cos(radY);
double x, y, y0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
x = XMIN + (XMAX - XMIN) / N * i; y = YMIN + (YMAX - YMIN) / N * j;
y0 = y * cosA - z[i][j] * sinA;
zz[i][j] = y * sinA + z[i][j] * cosA; xx[i][j] = x * cosB - y0 * sinB;
}
}
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 1; j++) {
int xpg[] = { transX(xx[i][j]), transX(xx[i + 1][j]),
transX(xx[i + 1][j + 1]), transX(xx[i][j + 1]) };
int zpg[] = { transZ(zz[i][j]), transZ(zz[i + 1][j]),
transZ(zz[i + 1][j + 1]), transZ(zz[i][j + 1]) };
g.drawPolygon(xpg, zpg, xpg.length);
}
}
lab.repaint();
}
}

57 :デフォルトの名無しさん:04/12/22 15:05:25
>>52
そのCGIは、画像掲示板みたいに、投稿者名、タイトル名、画像データなどの
マルチパートだけを扱ってるのですか?
それとも、単純にContent-Typeがimage/jpegでも送れるのですか?


58 :デフォルトの名無しさん:04/12/22 15:12:16
質問です!散々ググッたんですけどわかりませんでした

全角文字列の中から、ある1バイト文字を抽出したくないんですが、
これのメソッドってありますでしょうか?

具体的に言いますと、"^"<-(アスタンなんとかっていう名前の山みたいな記号)
これと同じものが、”タ”という全角文字の中に入っているんですが、
JAVA の string indexOf や、split なんかだと
気が利きすぎて、検索ヒットしてしまい、抽出すると、
文字が崩れてしまうんです

これ、全角文字は全角文字として検索に該当しないようにするメソッドが
ありましたら、お教えください。
VC++ では、tcstok というAPIでうまくスルーしてくれるみたいです。
よろしくお願いします


59 :デフォルトの名無しさん:04/12/22 15:33:53
>>58
質問は質問スレへ

タは\u30BFで、~は\u007E。
どうやったってindexOfやsplitで引っかかるはずはない。

60 :どうすればいいの?:04/12/22 16:14:47
>>57
> そのCGIは、画像掲示板みたいに、投稿者名、タイトル名、
> 画像データなどの
> マルチパートだけを扱ってるのですか?
そんなかんじです。お絵かきした画像をpngかgifで
CGIにポストして、CGIは受け取ったデータを解析して
テキストはテキストファイルに、画像は画像として
サーバーに保存させたいのですが…。

テキストデータだけならURLConnectionはって、
プリントストリーム作ってPOSTできたのですが、
画像データとかとなるとわけわかりません(´_`;)

ほんとなにがなにやら、です。自分でも何言ってるか
わからんです

61 :デフォルトの名無しさん:04/12/22 16:19:28
>>59
特殊な実装をされた偽Javaを使ってるに違いない。

62 :デフォルトの名無しさん:04/12/22 17:15:47
>>59
すみません ~ ではなく、
^ (山みたいなやつ)のほうです。

ていうか質問スレに書きます。
間違えてすみませんでした

63 :デフォルトの名無しさん:04/12/22 18:07:19
>>60
単純に画像データを送るなら、これで・・・・

byte[] imageData;

URL url = new URL("送信先URL");
HttpURLConnection cone = (HttpURLConnection) url.openConnection();
cone.setRequestMethod("POST");
cone.setRequestProperty("Content-Type", "image/jpeg");
cone.setRequestProperty("Content-Length", String.valueOf(imageData.length));
OutputStream out = cone.getOutputStream();
out.wirte(imageData);

64 :デフォルトの名無しさん:04/12/22 18:20:05
>>51
神キタ━━━━━━(゚∀゚)━━━━━━!!

65 :デフォルトの名無しさん:04/12/22 19:21:35
>>51
ありがとうございます!
これを参考に1と2をがんばります!

66 :どうすればいいの?:04/12/22 19:41:01
>>63
ありがとうございます。

でもこのばあい、どうやってCGIでデータを取得すれば?
テキストを取得するときとまったくおなじでいいんでしょうか???

今日は落ちますので、また明日実に来ます。

67 :sage:04/12/22 21:52:03
<script type="text/javascript">
<!---
function Mcheck(){
if (document.MAIL.Namae.value==""){
window.alert("名前を入力してください");
}
if (document.MAIL.Email.value==""){
window.alert("メールを入力してください");
}
return false

}
//--->
</script>
全然動かず、どうやったらいいのか誰か教えてください。お願いいたします。 

68 :デフォルトの名無しさん:04/12/22 22:10:56
【Java宿題スレッド基本ルール 五箇条のご誓文】

@ 問題文は自己省略せずに、直接全部貼り付けてください。
   宿題&課題をそのまま丸投げするのが、一番好ましい提示法です。

A 数学問題は何々法でせよだけでなく、その解を出す為の数式を
   具体的に詳細に説明してください。
  ただ、数学問題の回答率は低いです・・・。

B 宿題&課題とその回答プログラムに対する質問はOKですが、
   それ以外の普通の質問はここではしないでください。

C JavaScript、Perl、Ruby、HSP など、他言語の課題はやめてください。

D もし自分の提示課題への回答プログラムが返って来たら、
  動いた動かなかった位の返レスをお願いします。

69 :デフォルトの名無しさん:04/12/22 22:17:19
あれか?
2chにソース貼るなと言ってるのに平気で垂れ流してる香具師は
wikiが使えないってことなのか?

70 :デフォルトの名無しさん:04/12/22 22:22:14
>>66
ServletやJSPならともかく、CGIの話になってしまうとスレ違いに
なる気が。。。。

71 :デフォルトの名無しさん:04/12/22 22:24:25
>>67
JavaScriptなら、隣のWebProg板の「Javascript質問コーナー」スレに
行った方が確実かと。。。。

72 :sage:04/12/22 23:13:46
>>71
すいませんでした。

73 :デフォルトの名無しさん:04/12/23 00:23:11
>>69
「お前らの人間性なんて期待してねえよ。さっさと答えろ」というスレだからな。

74 :デフォルトの名無しさん:04/12/23 06:41:11
コンソールでもSwingGUIでもいいのでカーソル位置をソフト側でクリックするjavaのコードを作ってくれませんか?
簡単なものでいいので、用途は”自動ボタン連打で接続を維持する”といったところでしょうか

75 :デフォルトの名無しさん:04/12/23 06:42:46
あぁ、簡単なものでいいというのはソフト側でカーソル位置をクリックするコードがあればあとは自分で作るってことです。
宿題ではないものの、暇なひとお願いします。

76 :デフォルトの名無しさん:04/12/23 08:49:50
>>74
一応作ったが下のURLにあるやつを使えばいいかと思いましたのソースは公開しません
http://www2s.biglobe.ne.jp/~dat/java/strikes/java.awt.html#Robot

77 :デフォルトの名無しさん:04/12/23 08:51:58
class TOK{
public final static int plus = 0; //演算子+
public final static int minus = 1; //演算子-
public final static int mul = 2; //演算子*
public final static int div = 3; //演算子/
public final static int mod = 4; //演算子%
public final static int u_plus = 5; //単項演算子+
public final static int u_minus = 6; //単項演算子-
public final static int constant = 7; //定数
public final static int lparen = 8; //右括弧
public final static int rparen = 9; //左括弧
public final static int id = 10; //変数
public final static int assign = 11; //演算子=(代入)
public final static int END = 12; //式の終わり
}

78 :77:04/12/23 08:52:56
class Token{
//フィールド変数の定義
//コンストラクタの定義
public Token(int type){
1文字のトークンを作成するためのコンストラクタ
//+,-,*,/,%,(,),=
}
public Token(int type, int val){
定数(整数)のトークンを作成するためのコンストラクタ
(type==TOK.constantでなければだめ)
}
//メソッドの定義
public int getType(){
トークンの種類を返す
}
public int getIntVal{
//このメソッドを呼ぶときはこのトークンは定数(整数)
トークンの整数値を返す
}
public String toString(){
トークンの情報を文字列として返す
}
}


79 :77:04/12/23 08:54:48
class Tokenizer{
//フィールド変数の定義
//メソッドの定義
public void getString(String s){
sで渡された文字列を字句解析の対象とする
必要な初期化も行う
}
public Token getToken(){
注目しているところから文字列をたどり次のトークンを返す
}
}

class TestToken{
public static void main(String[] argv) throw IOException{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

Tokenizer tokenizer = new Tokenizer();


80 :77:04/12/23 08:55:51
while(true){
System.out.print("Input:");
System.out.flush();
String s = br.readLine();
if(s.length()==0){
break;
}
tokenizer.setString(s);
Token t;
try{
do{
t=tokenizer.getToken();
System.out.println(t);
}while(t.getType() !=TOK.END);
}catch(Exception e){
system.out.println(e.getMessage());
}
}
}
}

81 :77:04/12/23 08:57:10
(1)Token,Tokenizerを完成させ次の実行結果のように字句解析を行えるようにせよ
Input:1+(3*8-4)
整数:1
演算子:+
左括弧:(
整数:3
演算子:*
整数:8
演算子:-
整数:4
右括弧:)
(終)
(2)(1)で作成したクラスで変数を認識できるようにしなさい。変数は
・英字(a-zA-Z)で始まり
・英字(a-zA-Z)もしくは数字(0-9)が続くもの
(3)+,-が単項演算子であるのはどのような場合であるかを考え二項演算子と区別して返すようにせよ
(4)(1)で作成したクラスで浮動少数を認識できるようにしなさい
明日締め切りなんですがどうかお願いします。

82 :らりゆき:04/12/23 10:34:34
http://java.kouga.shinobi.jp/
こんなん作った
解答してくれたおかえしだ是非使ってほしい
テンプレに加えてくれるとなおうれし

83 :どうすればいいの?:04/12/23 12:15:30
>>70
ごめんなさいm(_ _)m

では、WEBプログラム板いってきます。
(*・ー・)ノ ありがとうございました

84 :>>81 その1:04/12/23 12:22:25
import java.io.*;
import java.util.*;
import java.util.regex.*;
import java.text.*;
public class HW52 {
public static void main(String[] argv) throws IOException{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
Tokenizer tokenizer = new Tokenizer();
while(true){
System.out.print("Input:");
System.out.flush();
String s = br.readLine();
if(s.length()==0){
break;
}
tokenizer.setString(s);
Token t;
try{
do{
t=tokenizer.getToken();
System.out.println(t);
}while(t.getType() !=TOK.END);
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
}

85 :>>81 その2:04/12/23 12:23:10
class Tokenizer {
List list = new ArrayList();
int index;
public void setString(String s){
boolean opeFlag = false;
Matcher mat = Pattern.compile("[\\+\\-\\*/%=\\(\\)]|[^\\+\\-\\*/%=\\(\\)]+").matcher(s);
while(mat.find()) {
String token = mat.group();
if (token.matches("[\\+\\-\\*/%=\\(\\)]")) {
switch (token.charAt(0)) {
case '+':
if (opeFlag) {
list.add(new Token(TOK.plus, token)); opeFlag=false;
} else {
list.add(new Token(TOK.u_plus, token)); opeFlag=false;
}
break;
case '-':
if (opeFlag) {
list.add(new Token(TOK.minus, token)); opeFlag=false;
} else {
list.add(new Token(TOK.u_minus, token)); opeFlag=false;
}
break;

86 ::>>81 その3:04/12/23 12:23:59
case '*':
list.add(new Token(TOK.mul, token)); opeFlag=false; break;
case '/':
list.add(new Token(TOK.div, token)); opeFlag=false; break;
case '%':
list.add(new Token(TOK.mod, token)); opeFlag=false; break;
case '=':
list.add(new Token(TOK.assign, token)); opeFlag=false; break;
case '(':
list.add(new Token(TOK.lparen, token)); opeFlag=false; break;
case ')':
list.add(new Token(TOK.rparen, token)); break;
}
} else if (token.matches("\\d+(\\.\\d+|\\d*)")) {
list.add(new Token(TOK.constant, token)); opeFlag=true;
} else if (token.matches("[\\w&&[\\D]][\\w]*")){
list.add(new Token(TOK.id, token)); opeFlag=true;
} else {
list.add(new Token(13, ""));
}
}
list.add(new Token(TOK.END, ""));
}
public Token getToken(){
return (Token) list.get(index++);
}
}

87 :>>81 その4:04/12/23 12:26:00
class Token{
static ChoiceFormat fmt = new ChoiceFormat("4#演算子|5#単項演算子|7#定数|8#右括弧|9#左括弧|"
+ "10#変数|11#演算子|12#(終)|13#(不正トークン)");
String sign;
int type;
public Token(int type, String sign){
this.type = type;
this.sign = sign;
}
public int getType(){
return type;
}
public double getValue() {
return Double.parseDouble(sign);
}
public String toString(){
return fmt.format(type) + " : " + sign;
}
}

88 :古代帝國富士皇朝総帥・伯壬旭:04/12/23 12:30:32
>>81
クラスHW52は、TestTokenそのままなので改名してください。
(間違えたまま貼ってしまった。)
上のプログラムに、>>77のクラスTOKを追加してください。


89 :古代帝國富士皇朝総帥・伯壬旭:04/12/23 12:38:34
失礼。訂正。
>>87
public double getValue() {
return Double.parseDouble(sign);
}

public double getValue() {
if (type == TOK.constant) {
return Double.parseDouble(sign);
} else {
return 0;
}
}
としてください。

90 :デフォルトの名無しさん:04/12/23 15:56:59
CharacterクラスのUnicodeBlockインナークラスを使用して
文字列を一文字ずつ比較し、その文字がひらがなかカタカナか漢字か数字かアルファベット
かその他の文字かを判定します。
全て判定したあとそれぞれの合計を求めます。

(例)

String str = "青い空ミドリの海、RedMT20

〜〜処理中〜〜

結果

ひらがな:2
カタカナ:3
漢字:3
数字:2
アルファベット:5
その他:1

91 :M.B.:04/12/23 16:30:50
>>90
> CharacterクラスのUnicodeBlockインナークラスを使用して
実用性は乏しいが、「ほとんど役に立たん」ことを確認するには
いい課題とは思われ。
漏れはけっきょく直接文字コードで判定した。

92 :M.B.:04/12/23 16:43:36
全然課題に役立たないが、プログラム(kccnt.java)としてはこんな感じ。
import java.util.*;import java.text.*;import chon.util.*;
  /**
  * 標準入力から入力して、
  * 文字種ごとに文字数を数える。
  * @version 1.0 (2004/10/22)
  * @author Maria Bethany
  */
public class kccnt {
  public static void main( String[] args ) {
    if (args.length > 0) {
      System.err.println("usage: java kccnt");
      System.exit(1);
    }
    Text text = new Text();
    text.read();
    int nchar = 0;  // 総文字数
    int nJapaneseChar = 0; // 日本語文字数
    int nKnjs = 0; // 漢字文字数(「々」含む)
    int nKnj = 0;  // 漢字文字数(「々」含まず)
    int nJoyoKnj = 0;  // 常用漢字文字数
    int nKatakanas = 0; // カタカナ文字数(音引き・続き記号を含む)
    int nKatakana = 0;  // カタカナ文字数(音引き・続き記号を含まず)
    int nHiragana = 0;  // ひらがな文字数(音引き・続き記号を含まず)
    int nOthers = 0; // その他文字数

93 :M.B.:04/12/23 16:44:17
    ListIterator liter = text.listIterator();
    while (liter.hasNext()) {
      String line = (String)liter.next();
      nchar += line.length();
      for (int cnt = 0;cnt < line.length();cnt += 1) {
        if (Parser.isJapaneseChar(line.charAt(cnt))) {
          nJapaneseChar += 1;
        }
        if (Parser.isKnjs(line.charAt(cnt))) {
          nKnjs += 1;
          if (Parser.isKnj(line.charAt(cnt))) {
            nKnj += 1;
            if (Parser.isJoyoKnj(line.charAt(cnt))) {
              nJoyoKnj += 1;
            }
            continue;
          }
        }
        if (Parser.isKatakanas(line.charAt(cnt))) {
          nKatakanas += 1;
          if (Parser.isKatakana(line.charAt(cnt))) {
            nKatakana += 1;
            continue;
          }
        }
        if (Parser.isHiragana(line.charAt(cnt))) {
          nHiragana += 1;
          continue;
        }
        nOthers += 1;
      }
    }

94 :M.B.:04/12/23 16:45:51
    DecimalFormat form1 = new DecimalFormat("##0.#");
    DecimalFormat form2 = new DecimalFormat("##,###,###");
    System.out.println(
      "  総文字数: " + form2.format(nchar) + " 字");
    System.out.println(
      "  日本語文字数(全角): " +
      form1.format(100.0 * (double)nJapaneseChar / (double)nchar) +
      " % (" +
      form2.format(nJapaneseChar) + " 字)");
    System.out.println("    漢字(「々」含む): "+
      form1.format(100.0 * (double)nKnjs / (double)nJapaneseChar) +
      " % (" +
      form2.format(nKnjs) + " 字)");
    System.out.println("    漢字(「々」含まず): "+
      form1.format(100.0 * (double)nKnj / (double)nJapaneseChar) +
      " % (" +
      form2.format(nKnj) + " 字)");

95 :M.B.:04/12/23 16:46:30
    System.out.println("    常用漢字: "+
      form1.format(100.0 * (double)nJoyoKnj / (double)nJapaneseChar) +
      " % (" +
      form2.format(nJoyoKnj) + " 字)");
    System.out.println("    ひらがな(音引き・続き記号を含まず): "+
      form1.format(100.0 * (double)nHiragana / (double)nJapaneseChar) +
      " % (" +
      form2.format(nHiragana) + " 字)");
    System.out.println("    カタカナ(音引き・続き記号を含む): "+
      form1.format(100.0 * (double)nKatakanas / (double)nJapaneseChar) +
      " % (" +
      form2.format(nKatakanas) + " 字)");
    System.out.println("    カタカナ(音引き・続き記号を含まず): "+
      form1.format(100.0 * (double)nKatakana / (double)nJapaneseChar) +
      " % (" +
      form2.format(nKatakana) + " 字)");
    System.out.println("  その他:" + form2.format(nOthers) + " 字");
  }
}

96 :デフォルトの名無しさん:04/12/23 17:07:28
お願いしまふ。以下はデータベースを利用するためのユーティリティクラスで、
JNDIを利用してコネクションを取得するのだが、sqlもアクセスも使わずテキストファイルを
書き込んだり読み込んだりするかたちにしたい。
import java.util.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
public final class DBUtil {
private static DBUtil obj = null;
private Connection con = null;
private Statement stmt = null;
//このクラスのインスタンスを取得するための唯一のメソッド
//ServletContextを渡し、この中でコンテキストパラメータを取得する
public static synchronized DBUtil createInstance()
throws Exception {
if(obj == null) {
obj = new DBUtil();
}
return obj;
}
//このコンストラクタはprivateであるので、外部からは利用することができない
private DBUtil() throws Exception {
Context ctx = new InitialContext();


97 :デフォルトの名無しさん:04/12/23 17:08:31
>>96続き
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/yasaishop");
con = ds.getConnection();
stmt = con.createStatement();
}
//新規ユーザを登録するメソッド
public synchronized boolean addUser(User user) throws Exception {
//登録しようとしているIDが存在するかチェック
String sql = "SELECT * FROM USER WHERE user_id='";
sql += user.getId() + "';";
ResultSet rs = stmt.executeQuery(sql);
if(rs.next()) {
rs.close();
return false;
}
rs.close();
//新規ユーザを登録する
sql = "INSERT INTO USER VALUES('";
sql += user.getMail() +"','"+user.getId()+"','";
stmt.execute(sql);
return true;
//仮登録したユーザを削除する
sql = "DELETE FROM PROVISIONAL_USER WHERE user_id='";
sql += user.getId() + "';";
stmt.execute(sql);
return true;
}

}


98 :デフォルトの名無しさん:04/12/23 17:09:13
>>96です。
テキストファイルに
userid1;usermail1;
userid2;usermail1;
 ・
   ・
   ・
という形で書いていけたらいいと思うのだが…
よろしくお願いします


99 :M.B.:04/12/23 17:13:40
>>98
ここは宿題・課題に答えるスレです。
クズな職業プログラマーが、仕事で詰まって
泣きつくスレではありません。
どういう流れで大学・専門学校等の教育機関で
こういう宿題・課題が出されたのかを
明らかにしなさい。

100 :デフォルトの名無しさん:04/12/23 17:18:54
>>98
データベースから取得したのを、ただファイルに書き込めば
いいのでは・・・・・


101 :デフォルトの名無しさん:04/12/23 17:20:04
>>99です。
普通の大学生です。
宿題ではないのですが、マイクロソフトアクセスを持っていないのと、
今までファイルテキストに書き込む形でプログラムを作ってきたため、
同じようにsqlでなくテキストに書き込むような形でプログラムを作りたいと思いました。
テキストを読み込んで配列にして…。

登録をして、それからいろいろサービスを提供する感じのプログラムを作っています。
それの、ユーザ登録をどうしようかと思っているのですが…。
要するにjava.io.*;を使う感じでできないでしょうか…


102 :デフォルトの名無しさん:04/12/23 17:24:23
>>100さんへ
誤読を誘う書き込みをしてしまいました!すみません。
JNDIでコネクションを取得しないで、sqlも使わずアクセスも使わず
プログラムを作りたい…という意味です。
アクセスを持っていないのです。

103 :M.B.:04/12/23 17:32:27
>>101
>>102
MySQL 使うのがいちばん早い。
でなかったら、Serializable インタフェースを implemennt した
class に押し込んでしまえ。
ab で open して seek して write して……とかいったプログラムは
さんざん C で書いたが、Java でそれをやるのは
あまり勉強にならんぞ(C でやるならそれなりに意味はありそうだが)。

104 :M.B.:04/12/23 17:41:32
たとえばこんなふうにする。
データを取得するメソッドは自分で考えれ。
package chon.util;import java.util.*;
  /**
  * 単独のキーで文字列キーで昇順整列された、
  * キーごとに複数個のオブジェクトを格納できるファイル。
  * @version 1.0, 30. June, 2004
  * @author Maria Bethany
  */
public class ISAM extends TreeMap {
  public ISAM() {
  }
  /**
  * レコードを追加する。
  * @param key キー
  * @param value 格納する値
  */
  public void add( String key, Object value ) {
    ArrayList records;
    if (this.containsKey(key)) {
      records = (ArrayList)this.get(key);
    } else {
      records = new ArrayList();
    }
    records.add(value);
    this.put(key, records);
  }

105 :M.B.:04/12/23 17:42:04
  /**
  * 全部のレコードを返す。
  * @return 同一キーの場合、先入先出。
  */
  public ArrayList getRecords() {
    ArrayList work = new ArrayList(this.values());
    ArrayList ret = new ArrayList();
    ListIterator xIter = work.listIterator();
    while (xIter.hasNext()) {
      ArrayList records = (ArrayList) xIter.next();
      ListIterator yIter = records.listIterator();
      while (yIter.hasNext()) {
        ret.add(yIter.next());
      }
    }
    return ret;
  }
}

106 :M.B.:04/12/23 17:49:24
ついでながらファイルに押し込んだり、読んだりするのは
こんな感じな。
書く:
public String write( String filename ) {
try {
FileOutputStream fos = new FileOutputStream(filename);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(this);
oos.close();
} catch (IOException ex) {
return null;
}
return filename;
}
読む:
public static なんとか read( String filename ) {
なんとか bt = null;
try {
FileInputStream fis = new FileInputStream(filename);
ObjectInputStream ois = new ObjectInputStream(fis);
bt = (なんとか)ois.readObject();
ois.close();
} catch (IOException ex) {
return null;
} catch (ClassNotFoundException ex) {
return null;
}
return bt;
}

107 :デフォルトの名無しさん:04/12/23 17:52:29
M.B.さんへ
やはり、わからないです。ファイルテキストを使えば感覚的に
すぐわかるのでやりやすかったのですが…。
データを取得するメソッドが一番知りたかったのです。
INDIを使わずっていうの。

108 :デフォルトの名無しさん:04/12/23 17:58:08
>>106
こういう感じです!
これはわかります!
データの取得のしかたというのはどうなるのでしょうか…。
fileのwrite、readはわかりました。
聞いてばかりですみません。

109 :デフォルトの名無しさん:04/12/23 18:24:10
質問は質問スレでしろこのバカが


110 :デフォルトの名無しさん:04/12/23 18:44:35
>>109
わかりました。
M.B.さんどうもありがとうございました。
参考にさせていただきます。


111 :デフォルトの名無しさん:04/12/23 20:46:08
【Java宿題スレッド基本ルール 五箇条のご誓文】

@ 問題文は自己省略せずに、直接全部貼り付けてください。
  宿題&課題をそのまま丸投げするのが、一番好ましい提示法です。

A 数学問題は何々法でせよだけでなく、その解を出す為の数式を
  具体的に詳細に説明してください。
  ただ、数学問題の回答率は低いです・・・。

B 宿題&課題とその回答プログラムに対する質問はOKですが、
  それ以外の普通の質問はここではしないでください。
  JavaScript、Perl、Ruby、PHP など、他言語の課題はやめてください。

C もし自分の提示課題への回答プログラムが返って来たら、
  動いた動かなかった位の返レスをお願いします。

D 隣のマッドマックスばりの殺伐とした無法地帯Java質問スレと違って、
  ここ宿題スレは、みんな仲良くがモットーの明るく楽しいスレッドを
  目指しているので、無礼かつ乱暴な言葉使いは控えてください。

112 :デフォルトの名無しさん:04/12/23 21:38:16
英語の文章で各単語が何行目に出てきたかの表を作成し、
・アルファベット順で最後から30単語を出力
・出現頻度順にソートして上位30単語を出力
・出現する単語を長いものから30個出力
以上3つを行うプログラムを作成せよ
との課題が出ました。
以下に途中までのヒントがあるのですが、何度やっても
「シンボルを見つけられません」となってしまいます。
どなたか回答お願いします。

ttp://www.ueda.info.waseda.ac.jp/oess/PB/Html/class_rsc/materials/2004-12-20/Indexer-hints.java

113 :M.B.:04/12/23 22:10:26
>>みんな仲良くがモットーの明るく楽しいスレッド
プログラム書くのが楽しいか?w
ろくなもんじゃねぇな

 困ったことに楽しいんだこれが _| ̄|○

114 :デフォルトの名無しさん:04/12/23 23:23:48
ボタンがクリックされるごとに現在の日付と時刻を画面の中央に表示するアプレットを作成せよ。

上記の問題でプログラムソースをお願いします。


115 :77:04/12/23 23:24:16
>>古代帝國富士皇朝総帥・伯壬旭様
すごい、ありがとうございます。
本当に助かりました。自宅のパソコンにJavaの環境がないので明日、学校で動作確認します。
(色々調べたんですがJavaのコンパイラ?がどこでダウンロードできるのかわからなかったもので(^^;)
本当にありがとうございました。

116 :>>112 その1:04/12/24 00:20:24
import java.io.*;
import java.util.*;
public class HW53 {
static Map map = new TreeMap();
public static void main(String[] args) {
try {
FileInputStream flIn = new FileInputStream(args[0]);
BufferedReader r = new BufferedReader(new InputStreamReader(flIn));
String line;
int lno= 1;
while ((line = r.readLine()) != null) {
String[] word = line.split("\\s+");
for (int i = 0; i < word.length; i++) {
if (word[i].length() == 0)
continue;
if (map.containsKey(word[i])) {
List lineList = (List) map.get(word[i]);
lineList.add(new Integer(lno));
} else {
List lineList = new ArrayList();
lineList.add(new Integer(lno));
map.put(word[i], lineList);
}
}
++lno;
}
} catch (Exception e) {
System.out.println("ファイル読み込みエラー");
System.exit(0);
}

117 :>>112 その2:04/12/24 00:20:55
List wordList = new ArrayList(map.keySet());
Collections.sort(wordList, new Comparator() {
public int compare(Object arg1, Object arg2) {
String s1 = (String) arg1;
String s2 = (String) arg2;
return s1.toLowerCase().compareTo(s2.toLowerCase());
}
});
Collections.reverse(wordList);
showWordList("アルファベット順で最後から30単語", wordList);
List entList = new ArrayList(map.entrySet());
Collections.sort(entList, new Comparator() {
public int compare(Object arg1, Object arg2) {
List l1 = (List) ((Map.Entry) arg1).getValue();
List l2 = (List) ((Map.Entry) arg2).getValue();
if (l1.size() > l2.size())
return -1;
else if (l1.size() < l2.size())
return +1;
else
return 0;
}
});
wordList.clear();
for (int i = 0; i < entList.size(); i++)
wordList.add(((Map.Entry) entList.get(i)).getKey());
showWordList("出現頻度順にソートして上位30単語", wordList);

118 :>>112 その3:04/12/24 00:21:26
wordList = new ArrayList(map.keySet());
Collections.sort(wordList, new Comparator() {
public int compare(Object arg1, Object arg2) {
String s1 = (String) arg1;
String s2 = (String) arg2;
if (s1.length() > s2.length())
return -1;
else if (s1.length() < s2.length())
return +1;
else
return 0;
}
});
showWordList("出現する単語を長いものから30個", wordList);
}
static void showWordList(String title, List wordList) {
System.out.println(title);
for (int i = 0; i < 30 && i < wordList.size(); i++) {
String word = (String) wordList.get(i);
System.out.print(word + " : ");
List lineList = (List) map.get(word);
for (int k = 0; k < lineList.size(); k++) {
System.out.print(lineList.get(k) + ", ");
}
System.out.println("行目");
}
System.out.println();
}
}

119 :古代帝國富士皇朝総帥・伯壬旭:04/12/24 00:22:03
>>112
全部コピペしてコンパイルしてください。


120 :古代帝國富士皇朝総帥・伯壬旭:04/12/24 00:24:46
>>112
プログラムの実行引数に、読み込む英文のテキストファイル名を指定してください。
java HW53 word.txt みたいに。


121 :古代帝國富士皇朝総帥・伯壬旭:04/12/24 00:42:47
>>114
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
import java.text.*;
public class HW54 extends JApplet {
public void init() {
final JLabel label = new JLabel();
label.setOpaque(true);
label.setBackground(new Color(245, 245, 255));
label.setFont(new Font("Dialog", 1, 30));
label.setHorizontalAlignment(JLabel.CENTER);
JButton btn = new JButton("日付時刻表示");
btn.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
Date date = new Date(System.currentTimeMillis());
DateFormat fmt = DateFormat.getDateTimeInstance(DateFormat.SHORT,
DateFormat.MEDIUM);
label.setText(fmt.format(date));
}
});
getContentPane().add(label);
getContentPane().add(btn, BorderLayout.SOUTH);
}
}


122 :デフォルトの名無しさん:04/12/24 00:50:41
10000100
の8ビットの情報を
2010
にする。
1ビット目が立っていれば2、二ビット目が立っていれば11ビット目
二ビット目が立っていなければ0、で処理をかけていって、最終的に
4bitの情報に直すコードを教えてください。

123 :デフォルトの名無しさん:04/12/24 00:54:59
1ビット目、二ビット目の両方が立っていた時の数字を教えてください。

124 :デフォルトの名無しさん:04/12/24 00:56:41
>>123
データの形式上存在しないです。

125 :デフォルトの名無しさん:04/12/24 01:16:17
2010
これが4bitの情報なら、このデータ自体も存在しない事に。。。。

126 :デフォルトの名無しさん:04/12/24 01:19:54
10 00 01 00

2 0 1 0
にするのだから、データはこれでいいです。

11 00 00 00

3 0 0 0
はないです。

bitに2が混ざってる理由は聞かないで・・・。

127 :デフォルトの名無しさん:04/12/24 01:29:21
2が表せるビット?だと、回答データは文字列しかないようで。
それで、両方とも1のケースがないならこれで。。。

byte src = (byte) 0x84;
String res = "";
for (int i = 0; i < 8; i++, src <<= 1) {
if ((src & 0x80) != 0) {
if (i % 2 == 0) {
res = res + "2";
src <<= 1;
++i;
} else {
res = res + "1";
}
} else {
if (i % 2 != 0)
res = res + "0";
}
}
System.out.println(res);


128 :デフォルトの名無しさん:04/12/24 01:42:16
をを、ありがとうございます。
ちなみに元データが
"10000100"の文字列だった場合はどうなりますか?

129 :デフォルトの名無しさん:04/12/24 02:08:26
私も一応作ったのですが、仕様事態違うのかな・・・
>>128 の結果は 2010 とでました

import java.util.regex.*;
import java.text.*;
class LogicSample {
 public static void main(String[] args) {
  try {
   if(args.length < 1) System.exit(0);
   int num = Integer.parseInt(args[0]);
   String str = Integer.toString(num);
   String[] stackStr = Pattern.compile("").split(str, 0);
   if(((stackStr.length-1) % 2) != 0) {
    for(int i=1; i < stackStr.length; i++)
     System.out.println("[" + i + "]文字目: " + stackStr[i] + " ");
    System.out.println("入力文字数が不正です\n偶数個数の数字のみ入力してください");
    System.exit(0);
   }
   str = "";

130 :デフォルトの名無しさん:04/12/24 02:09:12
   for(int i = 1; i <= stackStr.length-1; i+=2) {
    if((stackStr[i].equals("1")) && (stackStr[i+1].equals("1"))) {
     System.out.println("例外エラー、入力文字が不正です");
     System.exit(0);
    }
    if((stackStr[i].equals("1")) && (stackStr[i+1].equals("0")))
     str += "2";
    else if((stackStr[i].equals("0")) && (stackStr[i+1].equals("1")))
     str += "1";
    else
     str += "0";
   }
   System.out.println(str);
  }
  catch(NumberFormatException e) {
   System.out.println("数字以外を入力しないでください");
  }
 }
}

131 :デフォルトの名無しさん:04/12/24 02:18:10
あぁ、ビット演算子使えばもっと楽でしたね
もっと単純に考えれば思いつくのに・・・・・
>>127 すごく勉強になりました!!

132 :デフォルトの名無しさん:04/12/24 03:54:51
結局4進数なら、Integer.toString(Integer.valueof(string,4),4)とかじゃだめなの?

133 :デフォルトの名無しさん:04/12/24 03:56:12
ちがった、
Integer.toString(Integer.parseInt(string,4),4)、だな

134 :デフォルトの名無しさん:04/12/24 08:22:30
>>116-120
ありがとうございます。
ですが、言い忘れてしまったので申し訳ないのですが、
>>112のヒントを元にして作らなければならないため、
Hashtable<String,ArrayList<Integer>>で表す必要があるのです。
よろしければ、>>112のヒントファイルから作成して頂けないでしょうか。

135 :デフォルトの名無しさん:04/12/24 08:28:50
>>133
おしい
Integer.toString(Integer.parseInt(string, 2),4))
だね

136 :デフォルトの名無しさん:04/12/24 13:15:32
マルチモニタのためのAPIってJ2SEにゃついてないんすかね

何台ついてるかとか、解像度はどうかとか、別のモニタにもっていくとか

137 :デフォルトの名無しさん:04/12/24 13:24:00
>>136
java.awtパッケージの
GraphicsConfiguration、GraphicsEnvironment、GraphicsDevice
辺りを使えばOK
あと、質問は、隣の質問スレで

138 :77:04/12/25 10:38:54
>>古代帝國富士皇朝総帥・伯壬旭様
無事動きました。プログラムも完璧でした。本当にありがとうございました。
今回答えていただいたプログラムに関してまた新しい課題が出ましたので教えていただければ幸いです。
class stack{
//スタックのデータを管理するためのフィールド変数
private Object[] stackArray;
private int stackTop;

public Stack(int siza){
//最大size個のデータを利用できるスタックを準備
}
public void push(Object o){
//スタックにデータを一つpush
}
public Object pop(){
//スタックからデータを1つpop
}
public Object peek(){
//スタックの先頭を返す(popはしない)
}
}


139 :77:04/12/25 10:42:44
ttp://www.morikita.co.jp/soft/8444/Programs/program10-1.java
上記のclass stack、class Parserを完成させて今回教えていただいたプログラムに追加しなさい。
と言うものです。何度もすいませんがどうかお願いします。

140 :デフォルトの名無しさん:04/12/26 00:43:59
String str = "0101010101010101010101010101010101010101010101010101010101010101";

を、

01 01 01 01...
と分割してVectorやArrayListに分割するアルゴリズムを教えてください。

141 :デフォルトの名無しさん:04/12/26 01:35:08
String s = "0101010101010101010101010101010101010101010101010101010101010101";
ArrayList list = new ArrayList();
for (java.util.regex.Matcher m = java.util.regex.Pattern.compile("..").matcher(s) ;m.find(); list.add(m.group()));
System.out.println(list);


142 :デフォルトの名無しさん:04/12/26 02:00:14
>>141
サンクスです。
一行で出来るとは・・・自分で書くと13行・・・修行せにゃ

143 :デフォルトの名無しさん:04/12/26 02:03:43
正規表現を用いたコードと純粋なアルゴリズムからなるコードを
比較するのはナンセンスかと。
学習目的のプログラミングなら、まともにガリガリと書いて
それが13行であっても、そっちの方が力がつく。

144 :141:04/12/26 02:14:50
>>142
自分で書いたコード使いな。
宿題スレで正規表現使うのは反則っていうか、どっちかというとイジワルだから。
多少長くてもメソッド化すればいい。


145 :デフォルトの名無しさん:04/12/26 03:48:26
現在オセロができるプログラムを作っているのですが、
オセロで相手の駒をひっくり返すときの方法で困っています。
自分のターンを現在は黒であるとし、左の方向を調べるとしますと、
駒が○か●か走査することはでき、●○○とあって○の右に●を置くと○○を●にするようにはできたのですが、
もし左方向に●がなければ自分が置いたところから左が全て●にしてしまいます。
もしも自分が置いたところから先に自分と同じ色の駒がなければひっくり返す動作をしないということをさせるにはどうすればいいでしょうか?

146 :あっちょ:04/12/26 04:18:14
TextField が三つあって、 ボタンがひとつ、二つのTextFieldに数字を
入れて ボタンを押すと、数字を足した結果が残りのTextFieldに表示
される、プログラムを教えてくれませんか?


147 :デフォルトの名無しさん:04/12/26 05:36:21
>>145
置かれていない目や盤面の端についたりした時には、
キャンセルするようにすればいいのではないでしょうか。
該当部分のコードを晒してください。
または、Googleで検索して、適当なコードを見つけましょう。
または、質問スレへ。

>>146
つまらなすぎて書く気にならぬ。
神を待て。

148 :145:04/12/26 07:41:42
>>147
走査が盤面の端についたらキャンセルするという方法で解決しました。
ヒントを教えてくださりありがとうございました。

149 :M.B.:04/12/26 09:23:35
 >>143 とか >>144 とか、
 このスレにはナイスな香具師が多いな
            ∧_∧
     ∧_∧  (`<_´ ) できる人というのは
     ( ´_ゝ`)  〈   ⌒i    そういうものなのよ兄者
    /   \ /    | |
    /    / ̄ ̄ ̄ ̄/ |
  __(__ニつ/  IBM   / .| |____
      \/____/ (u っ


150 :デフォルトの名無しさん:04/12/26 10:19:46
お願いします。マウスのボタンを押している時だけ画像を切替えるように変更したいのですが
//の列を有効にすると画像の切替えが止まり動かなくなってしまいます。
何が原因なのかだけでもご教授お願いします。
import java.awt.Graphics;
import java.awt.Image;
import java.lang.Math;
import java.awt.event.*;
import java.awt.*;

public class Action3 extends java.applet.Applet implements Runnable{
Image Pic[]=new Image[3];
int PicIndex=0;
boolean loop=true;
Thread play=null;

public void init(){
Pic[0]=getImage(getCodeBase(),"Pic1.jpg");
Pic[1]=getImage(getCodeBase(),"Pic2.jpg");
Pic[2]=getImage(getCodeBase(),"Pic3.jpg");
}

public void paint(Graphics g){
update(g);
}

public void update(Graphics g){
if(Pic[PicIndex]==null){
g.drawString("絵が入っていません",0,60);
}

g.drawImage(Pic[PicIndex],0,0,this);
}

151 :150:04/12/26 10:20:22
public void start(){
if(play==null){

play=new Thread(this);play.start();
}
}

public void stop(){
if(play!=null){
play.stop();
play=null;
}
}

152 :150:04/12/26 10:20:46
public void run(){
while(loop){

//addMouseMotionListener(new MouseMotionAdapter(){
//public void mouseReleased(MouseEvent e){

repaint();

//}
//});

try{
Thread.sleep(200);
}
catch(InterruptedException e){
}

if(PicIndex==0){
PicIndex=1;System.out.println("1<=0");
}
else if(PicIndex==1){
PicIndex=2;System.out.println("2<=1");
}
else{
PicIndex=0;System.out.println("0<=2");
}

}
}
}

153 :デフォルトの名無しさん:04/12/26 10:53:43
mouseReleasedメソッドは、MouseMotionListenerに属していないので
そのmouseReleasedメソッドは、ボタンを離しても永久に呼ばれる事が
ないのです。
addMouseMotionListener(new MouseMotionAdapter(){

addMouseListener(new MouseAdapter() {
としてみてください。

154 :>>134 その1:04/12/26 13:04:50
import java.io.*;
import java.util.*;
public class Indexer {
static class IndexItem {
String word;
ArrayList<Integer> line;
IndexItem(String word, ArrayList<Integer> line) {
this.word = word;
this.line = line;
}
}
public static void main(String[] args) {
Hashtable<String, ArrayList<Integer>> dic =
new Hashtable<String, ArrayList<Integer>>();
Scanner sc = null;
try {
sc = new Scanner(new FileInputStream("word.txt"));
} catch (FileNotFoundException e) {
}
int lineNumber = 0;
while (sc.hasNextLine()) { // 行切出しループ
Scanner sc2 = new Scanner(sc.nextLine());
sc2.useDelimiter("[^a-zA-Z]+");
lineNumber++;
while (sc2.hasNext()) {
String word = sc2.next().toLowerCase();
ArrayList<Integer> a = dic.get(word);
if (a == null) {
a = new ArrayList<Integer>();
a.add(new Integer(lineNumber));
dic.put(word, a);

155 ::>>134 その2:04/12/26 13:05:40
} else {
a.add(new Integer(lineNumber));
}

}
}
sc.close();
int n = dic.size();
System.out.println(n);
IndexItem[] ii = new IndexItem[n];
Iterator<String> it = dic.keySet().iterator();
for (int k = 0; k < n; k++) {
String word = it.next();
ii[k] = new IndexItem(word, dic.get(word));
}
java.util.Arrays.sort(ii, new Comparator<IndexItem>() {
public int compare(IndexItem o1, IndexItem o2) {
return -(o1.word.compareTo(o2.word));
}
});
System.out.println("アルファベット順で最後から30単語");
for (int i = 0; i < 30 && i < ii.length; i++)
System.out.println(ii[i].word);
System.out.println();
java.util.Arrays.sort(ii, new Comparator<IndexItem>() {
public int compare(IndexItem o1, IndexItem o2) {
return -(new Integer(o1.line.size()).compareTo(
new Integer(o2.line.size())));
}
});

156 :>>134 その3:04/12/26 13:06:14
System.out.println("出現頻度順にソートして上位30単語");
for (int i = 0; i < 30 && i < ii.length; i++)
System.out.println(ii[i].word + " : " + ii[i].line.size() + "回");
System.out.println();
java.util.Arrays.sort(ii, new Comparator<IndexItem>() {
public int compare(IndexItem o1, IndexItem o2) {
return -(new Integer(o1.word.length()).compareTo(
new Integer(o2.word.length())));
}
});
System.out.println("出現する単語を長いものから30個");
for (int i = 0; i < 30 && i < ii.length; i++)
System.out.println(ii[i].word);
System.out.println();
}
}


157 :デフォルトの名無しさん:04/12/26 14:41:36
>>153
ご教授ありがとうございました。大変助かります。
結果報告の方は月曜の夜に改めて致します。

158 :デフォルトの名無しさん:04/12/26 14:50:06
>>134
同士ハッケソ
記念カキコ

159 :デフォルトの名無しさん:04/12/26 15:01:40
>>158
コメントに「Hashtableを使う奴はバカ」と書いとけ

160 :デフォルトの名無しさん:04/12/26 15:25:55
最新のgenericsと最古のHashtableを混在させる微妙なアンバランスさに
担当講師の深い考えとテクニックがある事を気付けない人は
まだまだ凡人の域を出ていないと言えるだろう。

161 :デフォルトの名無しさん:04/12/26 16:15:53
>>154-156
何度もありがとうございます。
おかげで助かりました。

162 :デフォルトの名無しさん:04/12/26 19:59:58
>>138
class Constantや、class BinaryExpression、class Expression
の詳細が不明ですのでお手上げです・・・


163 :154:04/12/26 20:05:26
>>134
よく見たらテストケースのまま貼ってしまった。
Scanner sc = null;
try {
sc = new Scanner(new FileInputStream("word.txt"));
} catch (FileNotFoundException e) {
}
の辺りを元の文に戻してください。

164 :デフォルトの名無しさん:04/12/26 20:37:13
>>163
何度もお手数おかけしてすいません。
試してみたのですが、「IndexItemのシンボルを見つけられません」と
エラーが出てしまいます。
これはIndexItemのclassを作成する必要があるのでしょうか。

165 :デフォルトの名無しさん:04/12/26 21:18:34
>>164
154の4行目に、メンバクラスIndexItemの定義が描いてありますが・・・

166 :デフォルトの名無しさん:04/12/26 22:15:41
>>146
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

class Sample303 extends JFrame{
private JTextField t1;
private JTextField t2;
private JTextField ansawer;
public static void main(String[] args){
new Sample303();
}
Sample303(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cc = getContentPane();
JPanel c = new JPanel();
cc.add(c);
cc.setLayout(null);
t1 = new JTextField();
t2 = new JTextField();
ansawer = new JTextField();
JButton b =new JButton();
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(!(t1.getText().equals(""))&&(!t2.getText().equals(""))){
ansawer.setText( String.valueOf(Integer.parseInt(
t1.getText())+Integer.parseInt(t2.getText())));
}
}
});



167 :デフォルトの名無しさん:04/12/26 22:16:08
>>146つづき
c.setLayout(new GridLayout(2,2));
c.setBounds(0,0,200,100);
c.add(t1);
c.add(t2);
c.add(ansawer);
c.add(b);
setSize(200,200);
setVisible(true);
}
}



168 :デフォルトの名無しさん:04/12/26 22:24:18
>>165
ごめんなさい。思いっきり見落としてました。
ご指摘ありがとうございます。

169 :デフォルトの名無しさん:04/12/27 00:37:25
y=f(x)におけるMIN+dxの時のyの値を返す関数funcがあり、
区間0.0から5.0までの積分値を求めるにはどうすればいいのですか?

double MIN = 0.0;
double MAX = 5.0;
dx=0.1;
for(i=1; i<MAX; i++){
func(MIN+dx*(i-1),dx*i)
}

170 :デフォルトの名無しさん:04/12/27 01:00:10
>>169
double s = 0;
for(double x=MIN, dx=0.1; x<MAX; x+=dx){
s += func(x)*dx;
}

171 :デフォルトの名無しさん :04/12/27 04:52:46
問題
指令行の引数に正の整数 n を指定すると, 2^0, 2^(-1), 2^(-2), ..., 2^(-n)(^はべき乗) を順に各行に出力していくプログラムを作ってください。
n が大きな値になっても,小数点以下100桁までは正確に結果を出力するようにしてください。

javaで小数点100桁をうまく表現するにはどうすればよいのですか?


172 :デフォルトの名無しさん:04/12/27 08:38:46
BigDecimal クラスを使えばOK

173 :デフォルトの名無しさん:04/12/27 12:51:25
カードレイアウト使った紙芝居アプレットつくってます。
んで、タイトル画面となるTitlePanelをJPanelを継承して
作りました。

/* TitlePanel */
public class TitlePanel extends JPanel {
public void TitlePanel(final Container parent, final CardLayout cl) {
setLayout(new BorderLayout());
JButton startButton = new JButton("スタート");
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae){
cl.show(parent, "title");
}
});
add(startButton, BorderLayout.SOUTH);
}
}

んでアプレットのほうで

public void init() {
getContentPane().setLayout(cl = new CardLayout());
titlePanel = new TitlePanel(getContentPane(), cl);
getContentPane().add(titlePanel, "title");
}

ってしようと思ったんですけど、titlePanelを作成すると、
「コンストラクタTitlePanelのシンボルを見つけられません。」
てエラーが出ます。引数の渡し方まちがってるんでしょうか?

174 :デフォルトの名無しさん:04/12/27 13:00:54
>>173
> public void TitlePanel(final Container parent, final CardLayout cl) {
コンストラクタ宣言じゃなくてメソッド宣言になってる。
void を外せ。

175 :デフォルトの名無しさん:04/12/27 14:08:54
>>174
わ!でけた!ありがとうお優しい人(´з`)ちゅ〜

176 :デフォルトの名無しさん:04/12/27 15:17:27
a.txtの内容を読みこんで、a.txtの内にある一行 testtest
のあとに =100 のように追加で書き込んでb.txtなどにして保存したいと思っています。
ご教授いただけるととても助かります。よろしくお願いします。

177 :デフォルトの名無しさん:04/12/27 16:04:38
ttp://uploader.zive.net/file/2083.jpg

すみません。これをお願いします。課題3の方は陰的解放で求めるやり方を使うそうです。

178 :デフォルトの名無しさん:04/12/27 16:45:47
グロ画像

179 :デフォルトの名無しさん:04/12/27 18:00:12
>>138
class Constantや、class BinaryExpression、class Expression
の詳細が不明ですのでお手上げです・・・


180 :77:04/12/27 19:23:47
>>162様、179様
大変失礼いたしました。

abstract class Expression {
abstract public int eval();
abstract public String toString();
}

class Constant extends Expression {
public int value;
public Constant(int i) {
value = i;
}
public int eval() {
return value;
}
public String toString() {
return "" + value;
}
}

181 :77:04/12/27 19:25:25
class BinaryExpression extends Expression {
public int operator; // 演算子の種類
public Expression left; // 左側
public Expression right; // 右側
public BinaryExpression(int op, Expression l, Expression r) {
operator = op;
left = l;
right = r;
}
public int eval() {
int lval = left.eval();
int rval = right.eval();
int val;
switch(operator) {
case OP.plus: val = lval + rval; break;
case OP.minus: val = lval - rval; break;
case OP.mul: val = lval * rval; break;
case OP.div: val = lval / rval; break;
case OP.mod: val = lval % rval; break;
default:
System.err.println("不正な二項演算子です");
val = 0;
}
return val;
}

182 :77:04/12/27 19:28:14
public String toString() {
String exp;

exp = "(" + left;
switch(operator) {
case OP.plus: exp += "+"; break;
case OP.minus: exp += "-"; break;
case OP.mul: exp += "*"; break;
case OP.div: exp += "/"; break;
case OP.mod: exp += "%"; break;
default: System.err.println("不正な二項演算子です");
exp += "??";
}
exp += right + ")";
return exp;
}
}
ご指摘いただいたクラスは以上になります。この他にまだ必要なものはありますでしょうか?

183 :150:04/12/27 22:43:03
すでに忘却の彼方かも知れませんが一応報告をば。
いろいろ思考錯誤してみた結果、以下のようなコードで希望のものは出来上がりました。
>>153さん大変ありがとうございました。
addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
flag=true;
}
public void mouseReleased(MouseEvent e){
flag=false;
}
});
if(flag){
repaint();
}

184 :デフォルトの名無しさん:04/12/28 01:20:38
String s = "a,b,c,foo\nfoo\nfoo\n";
という文字列から正規表現を用いて
String A = "a";
String B = "b";
String C = "c";
String Foo = "foo\nfoo\nfoo\n"
という風に文字列を取得したいのですが、どのようにすればいいのでしょうか?
Pattern p = Pattern.compile("(.*),(.*),(.*),(.*)");
Matcher m = p.matcher(s);
String a = m.group(1);
という風にやろうとしたのですが、マッチしませんでした。
fooの間に挟まってる\nを消すとマッチするのですが…。

185 :デフォルトの名無しさん:04/12/28 01:38:55
Pattern p = Pattern.compile("(.*),(.*),(.*),([\\s\\S]*)");


186 :デフォルトの名無しさん:04/12/28 16:20:03
すいません。学校で問題を出されたのですが、さっぱりわかりません。
どなたかご教授お願いできないでしょうか?

問・適切な状況を考えて、abstractクラスを一つ作りなさい。そのサブクラスを
  3つ以上作ってスーパクラスのabstractメソッドを全て実装しなさい。
  また、そのテストプログラムを書きなさい

どうかよろしくお願いしますm(__)m

187 :デフォルトの名無しさん:04/12/28 17:11:54
ttp://up00.homelinux.com/up/trash-box/contents.jsp?file=20041228170949001.txt
これをMouseAdapterを用いたプログラムに変更したいのですが
どういじればいいでしょうか?

188 :デフォルトの名無しさん:04/12/28 17:57:53
英文テキストを対象とした単語毎の出現数及び出現位置を出力するプログラム(MakeIndex)を作成せよ。プログラムは以下の仕様を満たすこと。

仕様
・コマンドライン引数として解析対象の英文テキストファイル名を受け取る
・テキストに出現する単語の出現数及び出現位置(行番号)を、単語の辞書順に画面に出力する
・単語の大文字・小文字の区別は行わない
・単語は英文字及び数字のみからなる。つまり、シングルクォート、ダブルクォート、アポストロフィ、ハイフンなどの記号は単語に含まないこととする。
・Javaで作成されたプログラムである

備考
大きなファイルの解析が高速に終了するほどよい



189 :>>188 その1:04/12/28 20:07:39
import java.io.*;
import java.util.*;
import java.util.regex.*;

public class HW53 {
static Map map = new TreeMap();
public static void main(String[] args) {
try {
FileInputStream flIn = new FileInputStream(args[0]);
BufferedReader r = new BufferedReader(new InputStreamReader(flIn));
Pattern pat = Pattern.compile("[a-zA-Z0-9]+");
String line;
int lno= 1;
while ((line = r.readLine()) != null) {
Matcher mat = pat.matcher(line);
while (mat.find()) {
String word = mat.group().toLowerCase();
if (map.containsKey(word)) {
List lineList = (List) map.get(word);
lineList.add(new Integer(lno));
} else {
List lineList = new ArrayList();
lineList.add(new Integer(lno));
map.put(word, lineList);
}
}
++lno;
}
} catch (Exception e) {
System.out.println("ファイル読み込みエラー");
System.exit(0);
}

190 ::>>188 その2:04/12/28 20:08:28
List wordList = new ArrayList(map.keySet());
Collections.sort(wordList, new Comparator() {
public int compare(Object o1, Object o2) {
return ((String)o1).compareTo((String) o2);
}
});

for (int i = 0; i < wordList.size(); i++) {
String word = (String) wordList.get(i);
List line = (List) map.get(word);
System.out.print(word + " : " + line.size());
System.out.print("個登場 行 ");
List lineList = (List) map.get(word);
for (int k = 0; k < lineList.size(); k++) {
System.out.print(lineList.get(k) + ", ");
}
System.out.println();
}
}
}


191 :デフォルトの名無しさん:04/12/28 20:15:45
>>187
addMouseListener(this);

addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e)
{
mgetX=e.getX();
mgetY=e.getY();
repaint();
}
});
とすればOK

192 :デフォルトの名無しさん:04/12/28 20:54:10
>>186
これは抽象的な問題ですね。

193 :デフォルトの名無しさん:04/12/29 02:12:34
そうだな、まずばか教師に実装問題を作ってもらおう。

194 :デフォルトの名無しさん:04/12/29 14:37:59
import java.awt.*;
import javax.swing.*;
class FlowLayoutSample1 extends JFrame{
PanelSample1 j;
FlowLayoutSample1(){
super("FlowLayoutSample1");
Container c = getContentPane();
j = new PanelSample1();
c.add(j);
}
public static void main(String args[]){
JFrame jframe = new FlowLayoutSample1();
jframe.pack();
jframe.setVisible(true);
jframe.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
class PanelSample1 extends JPanel{
JButton jb1, jb2, jb3;
PanelSample1(){
b1 = new JButton("Yse");
jb2 = new JButton("No");
jb3 = new JButton("Cancel");
setLayout(new FlowLayout());
this.add(jb1);
this.add(jb2);
his.add(jb3);
}
}
load: FlowLayoutSample1.class は public ではありません。あるいは public なコンストラクタを持っていません。
とエラーがでるのですが、どうすればよろしいのでしょうか?

195 :デフォルトの名無しさん:04/12/29 14:47:57
jb1 = new JButton("Yes");
this.add(jb3);

196 :デフォルトの名無しさん:04/12/29 14:55:36
>>195
jb1 = new JButton("Yes");
this.add(jb3);

すいません、ここはコピペのミスです。
これを修正しても上のエラーがでます。
よろしくお願いします。

197 :デフォルトの名無しさん:04/12/29 15:00:56
public class FlowLayoutSample1 extends JFrame{

198 :デフォルトの名無しさん:04/12/29 15:29:33
>>197
public つけても同じエラーが出てしまいます。

199 :デフォルトの名無しさん:04/12/29 15:41:47
>>198
>java -version

200 :デフォルトの名無しさん:04/12/29 16:14:44
java version "1.4.1_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_03-b02)
です。

201 :デフォルトの名無しさん:04/12/29 16:36:24
appletじゃないから

202 :デフォルトの名無しさん:04/12/29 17:56:38
>java FlowLayoutSample1

203 :デフォルトの名無しさん:04/12/29 18:48:19
>>201
>>202
あっ、わかりました。ありがとうございます。

204 :デフォルトの名無しさん:04/12/29 19:16:53
GUI関係の質問で申し訳ないのですが、
addActionListenerでボタンを一度押されたらその押されたボタンをremoveActionListenerで削除しています。
これを初期化ボタンを押した時に全てのボタンを再びremoveActionListenerをする前に戻したいんです。
流れとしては、
ボタンが押される

ボタンの動作をする

removeActionListener(this)
押されたボタンのアクションが削除される

初期化ボタンを押す

removeされたものが再び復活して押せるようになる
こういう流れを作りたいです。
初期化したいボタンの数が多いので一個一個を再びaddActionListenerをすると行数が膨大になってしまいます。
何かいい方法がありましたら教えてください。

205 :デフォルトの名無しさん:04/12/29 19:18:18
>>204
イベントハンドラ消すとかアクロバティックなことせずフラグかなんかで管理すれば。

206 :デフォルトの名無しさん:04/12/29 20:40:54
1.個々のインスタンスがトランプのカードを表すクラスCardを作りなさい

2.個々のインスタンスが一組のトランプを表すクラスDeckを作りなさい

3.1・2で作成した2つのクラスCard,Deckをテストするための小さなプログラム
(例えば、一組のトランプを生成してそのカードを表示するプログラム)DisplayDeckを作って実行しなさい

4.1・2・3で作成した3つのクラスCard,Deck,DisplayDeckについて、クラスObjectのどのメソッドを
オーバーライドすべきかを考えてそれを実装しなさい

以上のソースコードも書きなさい

初歩的なんですが、この4つの問題がわからずに困っています。
どなたか教えてもらえないでしょうか?
お願いします。

207 :>>139 その1:04/12/30 07:09:48
public class Parser {
private static char[][] relTable = {
{'>', '>', '<', '<', '<', '<', '<', '<', '<', '>', '<', 4 , '>'},
{'>', '>', '<', '<', '<', '<', '<', '<', '<', '>', '<', 4 , '>'},
{'>', '>', '>', '>', '>', '<', '<', '<', '<', '>', '<', 4 , '>'},
{'>', '>', '>', '>', '>', '<', '<', '<', '<', '>', '<', 4 , '>'},
{'>', '>', '>', '>', '>', '<', '<', '<', '<', '>', '<', 4 , '>'},
{'>', '>', '>', '>', '>', '<', '<', '<', '<', '>', '<', 4 , '>'},
{'>', '>', '>', '>', '>', '<', '<', '<', '<', '>', '<', 4 , '>'},
{'>', '>', '>', '>', '>', 0 , 0 , 2 , 2 , '>', 2 , 4 , '>'},
{'<', '<', '<', '<', '<', '<', '<', '<', '<', '=', '<', 4 , 3 },
{'>', '>', '>', '>', '>', 0 , 0 , 2 , 2 , '>', 2 , 4 , '>'},
{'>', '>', '>', '>', '>', 0 , 0 , 2 , 2 , '>', 2 , '>', '>'},
{'<', '<', '<', '<', '<', '<', '<', '<', '<', 1 , '<', 4 , '>'},
{'<', '<', '<', '<', '<', '<', '<', '<', '<', 1 , '<', '<', 0 },
};
private static String[] errMsg = {
"Unknown Error",
"')'が多すぎます",
"演算子(+,-,*,/)がありません",
"')'が足りません",
"代入文の左側は変数でなければなりません",
};
LinkedList tokenStack = new LinkedList(), treeStack = new LinkedList();
public static void main(String[] argv) {
new Parser(null);
}

208 ::>>139 その2:04/12/30 07:10:24
public Parser(Tokenizer t) {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
while (true) {
try {
System.out.print("Input:");
System.out.flush();
String s = br.readLine();
if (s.length() == 0)
break;
parse(s);
assert treeStack.size() == 1 : "解析エラー";
System.out.println(((Expression) treeStack.getLast()).eval());
System.out.println(((Expression) treeStack.getLast()));
} catch (Exception e) {
System.out.println("error: " + e);
}
}
}
private char getRelation(Token t1, Token t2) {
return relTable[t1.getType()][t2.getType()];
}
private void initialize(String s) {
treeStack.clear();
tokenStack.clear();
tokenStack.addLast(new Token(TOK.END, "end"));
}

209 :>>139 その3:04/12/30 07:11:00
private int TOKtoOP(int tok) throws Exception {
// トークンの番号から,対応する演算子の番号を返す.
switch(tok) {
case TOK.plus: return OP.plus;
case TOK.minus: return OP.minus;
case TOK.mul: return OP.mul;
case TOK.div: return OP.div;
case TOK.mod: return OP.mod;
case TOK.u_plus: return OP.u_plus;
case TOK.u_minus: return OP.u_minus;
default: throw new Exception("TOKtoOP: 不正なトークンです(" + tok + ")");
}
}
public void buildTree(Token t) throws Exception {
if (t.type == TOK.constant) {
treeStack.addLast(new Constant((int) t.getValue()));
} else if (t.type == TOK.id) {
treeStack.addLast(new Variable(t.sign));
} else if (t.type >= TOK.plus && t.type <= TOK.mod) {
Expression ex = new BinaryExpression(TOKtoOP(t.type), (Expression) treeStack.removeLast(),
(Expression) treeStack.removeLast());
treeStack.addLast(ex);
} else if (t.type == TOK.u_minus || t.type == TOK.u_plus) {
Expression ex = new UnaryExpression(TOKtoOP(t.type), (Expression) treeStack.removeLast());
treeStack.addLast(ex);
} else if (t.type == TOK.assign) {
Expression ex = new Assign((Expression) treeStack.removeLast(),
(Expression) treeStack.removeLast());
treeStack.addLast(ex);
}
}

210 ::>>139 その4:04/12/30 07:12:42
public Expression parse(String s) throws Exception {
Token a, b, c;
initialize(s);
Tokenizer tknz = new Tokenizer(); tknz.setString(s);
while (true) {
b = tknz.getToken();
if (b.type == TOK.END && ((Token) tokenStack.getLast()).getType() == TOK.END) break;
if (b.type == TOK.constant || b.type == TOK.id) {
tokenStack.addLast(b); continue;
}
a = (Token) tokenStack.getLast();
if (getRelation(a, b) == '<') {
tokenStack.addLast(b);
} else if (getRelation(a, b) == '>' || getRelation(a, b) == '=') {
do {
try {
buildTree(a);
} catch (Exception e) {
throw new Exception("式が不正");
}
tokenStack.removeLast();
a = (Token) tokenStack.getLast();
} while (getRelation(a, b) == '>' || getRelation(a, b) == '=');
if (b.type != TOK.rparen) tokenStack.addLast(b);
} else {
throw new Exception(errMsg[getRelation(a, b)]);
}
if (b.type == TOK.END && ((Token) tokenStack.getLast()).getType() == TOK.END) break;
}
return (Expression) treeStack.getLast();
}
}

211 :>>139 その5:04/12/30 07:13:17
class Variable extends Expression {
public int value;
public String name;

public Variable(String n) {
name = n;
}
public int eval() {
return value;
}
public String toString() {
return name;
}
}
class Assign extends Expression {
public Expression left;
public Expression right;

public Assign(Expression r, Expression l) {
left = l;
right = r;
}

public int eval() {
return right.eval();
}

public String toString() {
return "(" + left + "=" + right + ")";
}
}

212 :>>139 その6:04/12/30 07:14:07
class UnaryExpression extends Expression {
public int operator;
public Expression value;
public UnaryExpression(int op, Expression v) {
operator = op;
value = v;
}
public int eval() {
int val;
switch (operator) {
case OP.u_minus: val = -value.eval(); break;
case OP.u_plus: val = value.eval(); break;
default:
System.err.println("不正な単項演算子です"); val = 0;
}
return val;
}
public String toString() {
String exp = "(";
switch (operator) {
case OP.u_minus: exp += "-"; break;
case OP.u_plus: exp += "+"; break;
default:
System.err.println("不正な二項演算子です"); exp += "??";
}
exp += value + ")";
return exp;
}
}

213 ::>>139 その7:04/12/30 07:14:49
class OP{
public final static int plus = 0; //演算子+
public final static int minus = 1; //演算子-
public final static int mul = 2; //演算子*
public final static int div = 3; //演算子/
public final static int mod = 4; //演算子%
public final static int u_plus = 5; //単項演算子+
public final static int u_minus = 6; //単項演算子-
public final static int lparen = 8; //右括弧
public final static int rparen = 9; //左括弧
public final static int assign = 11; //演算子=(代入)
public final static int END = 12; //式の終わり
}

214 :sage:05/01/02 02:05:50
次のプログラムの実行結果を予想し、プログラムを説明せよ。
import java.io.*;
class PriorityThread extends Thread {
public PriorityThread(String name) {
super(name);
}
public void run() {
for(int i=0; i<10; i++) {
System.out.print(getName() + " ");
try{
Thread.sleep(400);
}
catch(InterruptedException e) { }
}
}
public static void main(String[] args) {
PriorityThread thread1 = new PriorityThread("스레드1");
PriorityThread thread2 = new PriorityThread("스레드2");
thread2.setPriority(NORM_PRIORITY+4);
thread1.start();
thread2.start();
try{
Thread.sleep(2000);
}
catch(InterruptedException e) { }
thread2.setPriority(NORM_PRIORITY-4);
}
}

215 :デフォルトの名無しさん:05/01/02 02:45:17
解析とかプログラム組まないのは自分でやれよ。

216 :デフォルトの名無しさん:05/01/02 03:29:55
SWINGのJtableで現在表示されている、データの行のtopのINDEXを取得
する方法ってありますか?

217 :M.B.:05/01/02 22:00:09
>>216
質問は質問スレへ

218 :77:05/01/03 03:09:13
>>207
本当にありがとうございます!
自分でも考えていたのですがさっぱり分からず半ば諦めていました。
本当に助かりました。

219 :デフォルトの名無しさん:05/01/03 19:46:15
class Exercise
{
public static void main(String[] args)
{
int i = 27;
for(int j=3; j >=-1; j--) {
System.out.println("i=" + i + "j= " + j);
System.out.println(i/j);
}
}
}

これをtry-catch文に直したいのですが、どうすればいいでしょうか?

220 :デフォルトの名無しさん:05/01/03 20:10:48
質問です。

Timerクラスのことなのですが、

例えば、
Task task = new Task();
Timer timer = new Timer();
timer.schedule(task,10000L,500L);

とやれば、きちんと動くのですが、
Task task = new Task(String1,String2);  ←※
Timer timer = new Timer();
timer.schedule(task,10000L,5000L);
というようにすると、一回目はきちんと動くのですが、それ以降だと、
※のところをもう一度読んでくれていないので、String1,String2がnullとして
作動します。
  timer.schedule(new Task(String1,String2),10000L,5000L);
というようにしても同じでした。
TimerというクラスはTaskクラス(これはわたしが作ったクラス)のvoid run()メソッド
を読み込むので、こういう現象が起きるみたいなのです。
どうすれば、コンストラクタもちゃんと読んでもらえるようになるのでしょうか。
教えてください。


221 :デフォルトの名無しさん:05/01/03 20:12:44
>>220
です。スレ間違えました。すみません。
無視してくださって結構です。

222 :なんだかな?:05/01/05 10:13:11
宿題で困っています。。
配列同士の比較の問題です。
String A={"あ","い","う","え","お"}
String B={"あ","い"}
(配列は場合によって要素が異なる。上は、あくまで一例)
Bの配列の要素全てが、Aに含まれていればTrue、含まれていなければfalseにする。
プログラムです。
上の例だと、Bの要素には、「あ」「い」があります。Aの要素には、「あ」と「い」
がありますので、trueです。
ちなみにBの配列が、「あ」、「い」、「き」の場合は、Aに「き」がないのでfalseになります。
どなたかどうぞ宜しくお願いします





223 :デフォルトの名無しさん:05/01/05 11:57:54

boolean flag = Arrays.asList(A).containsAll(Arrays.asList(B));

224 :デフォルトの名無しさん:05/01/05 12:53:13
JDialogを継承して、最大化ボタンを付けたクラスが欲しいです。

225 :デフォルトの名無しさん:05/01/05 13:09:23
どなたかお願いします。

テクストファイルの名前を指令行の第1引数に指定すると, そのファイルの中身を後で述べる方式で圧縮してファイルに書き出すプログラムを 作ってください。書き出すファイルに付ける名前は,指令行の第2引数に 指定するようにします。

圧縮は, ファイルの各行の内容について,つぎのような操作を行うことで実現します。
行の中の文字を,同じ文字の続く限りまとめます。
それぞれのまとまりについて,その文字数が1個または2個であるときは,もとのとおりにその文字を1個または2個出力します。その文字 c が n 個 (n>2) 続いていたときは,c,'0', (char)n の3文字を出力します。

例を示します。

入力行:aaaabcaddccccccc
出力行:a.4bcaddc.7
ここで . は文字番号 0 の文字('0')を, 4 は文字番号 4 の文字((char)4)を, 7 は文字番号 7 の文字((char)7)を,それぞれ表しています。

226 :デフォルトの名無しさん:05/01/05 13:11:29
boost
map

227 :>>225 その1:05/01/05 15:18:08
import java.io.*;
import java.util.regex.*;
public class HW57 {
public static void main(String[] args) {
BufferedReader r = null;
BufferedWriter w = null;
try {
FileInputStream fi = new FileInputStream(args[0]);
r = new BufferedReader(new InputStreamReader(fi));
} catch (FileNotFoundException e) {
System.out.println("入力ファイル名が不正か存在しない");
System.exit(0);
}
try {
w = new BufferedWriter(new FileWriter(args[1]));
} catch (IOException e1) {
System.out.println("出力ファイル名が無いか不正");
System.exit(0);
}
StringBuffer sb = new StringBuffer();
Pattern pat = Pattern.compile("(\\w)\\1*");
String line;

228 :>>225 その2:05/01/05 15:19:04
try {
while ((line = r.readLine()) != null) {
Matcher mat = pat.matcher(line);
while (mat.find()) {
String newline = mat.group();
if (newline.length() > 2) {
newline = mat.group(1) + ((char)0) + ((char)newline.length());
}
sb.append(newline);
}
sb.append("\r\n");
}
} catch (IOException e2) {
System.out.println("解析中に読み取りエラー");
System.exit(0);
}
try {
r.close();
w.write(sb.toString());
w.close();
} catch (IOException e3) {
System.out.println("ファイル書き込みエラー");
System.exit(0);
}
}
}


229 :ねこさん:05/01/05 19:05:26
XMLファイルのタグ内文字列を使って比較をしたいのですが
お願いします。
*****あ.xml********
<Top>
<youso><key>あ</key><key>い</key></youso>
<youso><key>う</key></youso>
<youso><key>え</key><key>お</key><key>か</key></youso>
</Top>
*********************
String A={"あ","き","え","か","お"}
上記のようなxmlとAの配列があります。このxmlは、あくまで一例です。
yousoのタグの数やkeyのタグの数は、複数ある場合があります。
また配列Aもyouso数が複数ある場合があります。
このようなあ.xmlのkeyのタグ内の文字列とA配列を比較してtureかfalseを判別します。
☆比較のルール
あ.xmlのkeyの文字列はyouso毎に分けます。youso内のkeyはandを示しています。
つまりあ.xmlでは、(「あ」と「い」),(「う」),(「え」と「お」と「か」)
を示すことになります。
これと配列Aが一つでも一致していれば、turuです。合っていなければfalseです。
上の例を使って説明します。
「あ」と「い」を比較するとA配列には、「あ」があるが「い」がないので×
「う」を比較するとA配列には、「う」がないので×
「え」と「お」と「か」を比較するとA配列には「え」と「お」と「か」があるので○
よって一つでも一致したものがあるのでtureになります。
このようなプログラムです。よろしくお願いします。

230 :デフォルトの名無しさん:05/01/05 21:10:22
>>229
import javax.xml.parsers.*; import org.w3c.dom.*;
import java.io.*; import java.util.*;
public class HW58 {
public static void main(String[] args) {
List listOfA = Arrays.asList(new String[] { "あ", "き", "え", "か", "お" });
boolean flag = false;
Document doc = null;
try {
DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
DocumentBuilder db = fac.newDocumentBuilder();
doc = db.parse(new File("あ.xml"));
} catch (Exception e) {
System.out.println("xmlファイルエラー"); System.exit(0);
}
NodeList elms = doc.getElementsByTagName("youso");
for (int i = 0; i < elms.getLength(); i++) {
List words = new ArrayList();
NodeList childs = ((Element) elms.item(i)).getElementsByTagName("key");
for (int k = 0; k < childs.getLength(); k++)
words.add(((Element) childs.item(k)).getTextContent());
for (int m = 0; m < words.size(); ++m)
System.out.print(words.get(m));
if (listOfA.containsAll(words)) {
flag = true; System.out.println(" : この行はTrue");
} else { System.out.println(" : この行はfalse"); }
}
if (flag) System.out.println("結果はTrue");
else System.out.println("結果はfalse");
}
}


231 :デフォルトの名無しさん:05/01/05 21:27:18
「キーボードからローマ字表現を入力すると、それに対応したひらがなが表示されるプログラム」
をお願いします。
例: akasatana 
   と入力すると、
   あかさたな
   と表示される。

できるだけGUI形式で、つまりローマ字入力枠やひらがな表示枠などをひとつの画面に表示させるようにプログラムを作るようにする。
正しくないローマ字表現が入力された場合は、ローマ字のまま表示されるようにする。

232 :デフォルトの名無しさん:05/01/05 22:01:58
>>231
>>1

233 :デフォルトの名無しさん:05/01/05 23:12:00
こういう問題なのですが、お願いします。

下の2個の時計を表示するプログラムを以下のように変更する。
1.2個の時計の図形部をパラメトリックに変更する(時計の径だけでも構わない)。
2.2つの時計の大きさを変更してみる。

プログラムはこちらです。
ttp://www.uploda.org/file/uporg28022.txt

234 :ねこさん:05/01/06 02:08:47
>>230さん
有難うございます。しかし上記のプログラムをコンパイルした結果一個だけエラーが
起こってしまいました。エラー内容は以下の通りです。
****************エラー内容*********************
シンボル: メソッド getTextContent ()
場所 : org.w3c.dom.Element の インタフェース
words.add(((Element) childs.item(k)).getTextContent());
^
エラー 1 個
**********************************************
素人目の僕には、難しくすみませんが
どうすればよいか教えてくださいよろしくお願い致します。


235 :デフォルトの名無しさん:05/01/06 02:21:49
>>234
すいません・・・getTextContent()は、JSE1.5の新メソッドでした・・・

words.add(((Element) childs.item(k)).getTextContent());
の行を

Text text = (Text) ((Element) childs.item(k)).getFirstChild();
words.add(text.getNodeValue());
に修正してください・・・


236 :ねこさん:05/01/06 02:38:14
>>235さん修正有難うございます。
しかしやっぱりエラーが・・・なんでだろう・・
エラー内容は以下の通りです。
****************エラー内容*********************
A.java:25: 文ではありません。
Text text = (Text) ((Element) childs.item(k)).getFirstChild();
^
A.java:25: ';' がありません。
Text text = (Text) ((Element) childs.item(k)).getFirstChild();
^
A.java:26: シンボルを解決できません。
シンボル: 変数 text
場所 : A の クラス
words.add(text.getNodeValue());
^
エラー 3 個
*******************************************
申し訳ないですが、またよろしくお願いします。

237 :デフォルトの名無しさん:05/01/06 02:58:11
for (int k = 0; k < childs.getLength(); k++) {
words.add(((Element) childs.item(k)).getTextContent()); Text text = (Text) ((Element) childs.item(k)).getFirstChild();
}

for (int k = 0; k < childs.getLength(); k++) {
Text text = (Text) ((Element) childs.item(k)).getFirstChild();
words.add(text.getNodeValue());
}
としてください・・・


238 :ていせい:05/01/06 03:00:45
for (int k = 0; k < childs.getLength(); k++) {
words.add(((Element) childs.item(k)).getTextContent());
}

for (int k = 0; k < childs.getLength(); k++) {
Text text = (Text) ((Element) childs.item(k)).getFirstChild();
words.add(text.getNodeValue());
}
としてください・・・


239 :ねこさん:05/01/06 12:04:45
>>238さん
ありがとうございました。動く事は出来ました。。(ToT)
しかし結果がおかしいようです。
下のxmlは、例題のやつなのですが
*****あ.xml********
<Top>
<youso><key>あ</key><key>い</key></youso>
<youso><key>う</key></youso>
<youso><key>え</key><key>お</key><key>か</key></youso>
</Top>
*********************
String A={"あ","き","え","か","お"}
この場合
・「あ」「い」×
・「う」×
・「え」「お」「か」○
結果tureになるはずなのですが、すべてfalseになってしまいます。
配列の中身をtureになるように変更しても同じようにfalseの結果しか出ません。
申し訳ないですが、もう一度宜しくお願いします。


240 :デフォルトの名無しさん:05/01/06 12:18:38
>>239  そんなバカな・・・ もう一度同じやつを貼りますので、これを
一字一句間違わずに、ただコピペしてコンパイル、実行してください。
import javax.xml.parsers.*; import org.w3c.dom.*; import java.io.*; import java.util.*;
public class HW58 {
static final String[] A = { "あ", "き", "え", "か", "お" };
public static void main(String[] args) {
List listOfA = Arrays.asList(A); boolean flag = false; Document doc = null;
try {
DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
DocumentBuilder db = fac.newDocumentBuilder();
doc = db.parse(new File("あ.xml"));
} catch (Exception e) {
System.out.println("xmlファイルエラー"); System.exit(0);
}
NodeList elms = doc.getElementsByTagName("youso");
for (int i = 0; i < elms.getLength(); i++) {
List words = new ArrayList();
NodeList childs = ((Element) elms.item(i)).getElementsByTagName("key");
for (int k = 0; k < childs.getLength(); k++) {
Text text = (Text) ((Element) childs.item(k)).getFirstChild();
words.add(text.getNodeValue());
}
for (int m = 0; m < words.size(); ++m)
System.out.print(words.get(m));
if (listOfA.containsAll(words)) {
flag = true; System.out.println(" : この行はTrue");
} else { System.out.println(" : この行はfalse"); }
}
if (flag) System.out.println("結果はTrue");
else System.out.println("結果はfalse");
}
}

241 :デフォルトの名無しさん:05/01/06 12:43:05
http://homepage3.nifty.com/homakiyo/
新スプリクト?

242 :デフォルトの名無しさん:05/01/06 12:53:07
お願いします(><)
単語が辞書順に並べてあるファイルがあります。
そうしたファイル二つの名前を指令行の第1引数と第2引数に指定すると,
その二つのファイルの中を調べ,両方のファイルに現れている単語だけを
辞書順に並べたファイルを書き出すプログラムを作りなさい。
書き出したファイルに付ける名前は,指令行の第3引数に指定するようにする。

243 :デフォルトの名無しさん:05/01/06 12:54:57
・各行に数値が1個書いてあるファイルがあります。
そのファイルの名前を 指令行の引数として与えると,
1番大きな数値, 2番目に大きな数値, 3番目に大きな数値の 3個の数値を
出力するプログラムを作りなさい。
ここで,数値として最大のもの,2番目のもの,3番目のものを出力する
ことに注意して下さい。たとえば,ファイルの中の数値が
1.0,2.0,2.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 5.0
であったとすると、出力は 1番目:5.0, 2番目:4.0, 3番目:3.0
となります。
なお,たとえばすべてが同じ数値だったとすると,
2番目,3番目はありません。 そのときは,1番目だけを出力してください
。同様に,1番目,2番目の数値だけで, 3番目の数値がない
(つまり,2種類の数値しか現れない)こともあります。
そのときは1番目と2番目の値だけを出力してください。

244 :デフォルトの名無しさん:05/01/06 13:04:21
>>227,228
ありがとうございます。プログラムを実行したところ出力が
a.4bcaddc.7  ではなく、
a bcaddc  となってしまうのですが・・・(;´Д`)?

245 :デフォルトの名無しさん:05/01/06 13:12:29
>>244

>>225
>ここで . は文字番号 0 の文字('0')を,
>4 は文字番号 4 の文字((char)4)を,
>7 は文字番号 7 の文字((char)7)を,それぞれ表しています。

と書いてましたので、連続した文字数は、注文通りにchar型の数値
そのままにしました・・・
newline = mat.group(1) + ((char)0) + ((char)newline.length());
の部分を
newline = mat.group(1) + ((char)0) + newline.length();

修正すれば数字の文字が入ります。


246 :>>231 その1:05/01/06 14:21:21
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
public class HW59 {
static final String alphas = "a,i,u,e,o,ka,ki,ku,ke,ko,sa,si,su,se,so,ta,ti,tu,te,to,"
+ "na,ni,nu,ne,no,ha,hi,hu,he,ho,ma,mi,mu,me,mo,ya,yi,yu,ye,yo,ra,ri,ru,re,ro,wa,wi,wu,we,wo,"
+ "ga,gi,gu,ge,go,za,zi,zu,ze,zo,da,di,du,de,do,ba,bi,bu,be,bo,pa,pi,pu,pe,po,"
+ "la,li,lu,le,lo,ltu,lya,lyi,lyu,lye,lyo";
static final String graphs = "あ,い,う,え,お,"
+ "か,き,く,け,こ," + "さ,し,す,せ,そ," + "た,ち,つ,て,と," + "な,に,ぬ,ね,の,"
+ "は,ひ,ふ,へ,ほ," + "ま,み,む,め,も," + "や,い,ゆ,え,よ," + "ら,り,る,れ,ろ,"
+ "わ,い,う,え,を," + "が,ぎ,ぐ,げ,ご," + "ざ,し,ず,ぜ,ぞ," + "だ,ぢ,づ,で,ど,"
+ "ば,び,ぶ,べ,ぼ," + "ぱ,ぴ,ぷ,ぺ,ぽ," + "ぁ,ぃ,ぅ,ぇ,ぉ," + "っ,ゃ,ぃ,ゅ,ぇ,ょ";
static final Map inputMap = new TreeMap() {
{
StringTokenizer st1 = new StringTokenizer(alphas, ",");
StringTokenizer st2 = new StringTokenizer(graphs, ",");
while (st1.hasMoreTokens() && st2.hasMoreTokens()) {
String tok = st1.nextToken();
if (tok.length() > maxlen)
maxlen = tok.length();
put(tok, st2.nextToken());
}
}
};
static JTextField tfd = new JTextField(40);
static JLabel lab = new JLabel();
static int maxlen;

247 :>>231 その2:05/01/06 14:22:11
public static void main(String[] args) {
lab.setHorizontalAlignment(JLabel.CENTER);
JFrame frame = new JFrame();
tfd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
translate();
}
});
frame.getContentPane().setLayout(new BorderLayout(16, 16));
((JComponent) frame.getContentPane()).setBorder(BorderFactory.createEmptyBorder(16, 16, 16, 16));
frame.getContentPane().add(tfd, BorderLayout.NORTH);
frame.getContentPane().add(lab);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
}

248 :>>231 その3:05/01/06 14:23:05
static void translate() {
String text = tfd.getText().trim().toLowerCase();
StringBuffer sb = new StringBuffer();
StringBuffer ap = new StringBuffer();
for (int i = 0; i < text.length(); i++) {
ap.append(text.substring(i, i + 1));
String gp = (String) inputMap.get(ap.toString());
if (gp != null) {
sb.append(gp);
ap.delete(0, ap.length());
} else {
if (ap.length() == 2) {
if (ap.charAt(0) == 'n') {
sb.append("ん");
--i; ap.delete(0, ap.length()); continue;
}
else if (ap.charAt(0) == ap.charAt(1)) {
sb.append("っ");
--i; ap.delete(0, ap.length()); continue;
}
}
if (ap.length() >= maxlen) {
sb.append(ap.toString().charAt(0));
i -= ap.length() - 1;
ap.delete(0, ap.length());
}
}
}
lab.setText(sb.toString());
tfd.setText("");
}
}

249 :>>231 その4:05/01/06 14:29:14
>>231
上のテキストフィールドに入力してEnterキーを押すと、
下に変換平仮名が出ます。

入力が面倒だったので、「ぴゃぴゅぴゅぴぇぴょ」などの文字は省略しました。
それらを追加したければ
変数alphasに、"pya,pyi,pyu,pye,pyo"・・・と追加し、
変数graphsに、"ぴゃ,ぴゅ,ぴゅ,ぴぇ,ぴょ"・・・と追加してください。
文字データはカンマで区切ってください。
alphasとgraphsの各文字データ(カンマで区切られた文字)の位置が
対照するようにしてください。
そうしないと別の文字が出てしまいます。


250 :>>242 その1:05/01/06 15:07:15
import java.io.*; import java.util.*; import java.util.regex.*;
public class HW60 {
public static void main(String[] args) {
BufferedReader r1 = null, r2 = null;
BufferedWriter w = null;
try {
FileInputStream fi1 = new FileInputStream(args[0]);
FileInputStream fi2 = new FileInputStream(args[1]);
FileWriter fw = new FileWriter(args[2]);
r1 = new BufferedReader(new InputStreamReader(fi1));
r2 = new BufferedReader(new InputStreamReader(fi2));
w = new BufferedWriter(fw);
} catch (Exception ex) {
System.out.println("ファイル名が指定されてない");
System.exit(0);
}
StringBuffer sb1 = new StringBuffer(), sb2 = new StringBuffer();
try {
String line;
while ((line = r1.readLine()) != null)
sb1.append(line + " ");
while ((line = r2.readLine()) != null)
sb2.append(line + " ");
r1.close();
r2.close();
} catch (IOException e) {
System.out.println("ファイル読み込みエラー");
System.exit(0);
}

251 ::>>242 その2:05/01/06 15:07:45
Pattern pat = Pattern.compile("[A-Za-z]+");
Set words1 = new TreeSet();
Matcher mat = pat.matcher(sb1.toString());
while (mat.find())
words1.add(mat.group());
Set words2 = new TreeSet();
mat = pat.matcher(sb2.toString());
while (mat.find())
words2.add(mat.group());
words1.retainAll(words2);

try {
w.write("両ファイルの共通単語\r\n\r\n");
Iterator it = words1.iterator();
while (it.hasNext())
w.write(it.next() + "\r\n");
w.flush();
w.close();
} catch (IOException e1) {
System.out.println("ファイル書き込みエラー");
System.exit(0);
}
}
}


252 :>>243:05/01/06 15:23:05
import java.io.*; import java.util.*; import java.util.regex.*;
public class HW60 {
public static void main(String[] args) {
BufferedReader r1 = null;
try {
FileInputStream fi1 = new FileInputStream(args[0]);
r1 = new BufferedReader(new InputStreamReader(fi1));
} catch (Exception ex) {
System.out.println("ファイル名が指定されてない"); System.exit(0);
}
Set nums = new TreeSet();
try {
String line;
while ((line = r1.readLine()) != null) {
try {
nums.add(Double.valueOf(line.trim()));
} catch (NumberFormatException e1) { }
}
r1.close();
} catch (IOException e) {
System.out.println("ファイル読み込みエラー"); System.exit(0);
}
System.out.println("数値の大きい順で表示\n");
List list = new ArrayList(nums);
Collections.reverse(list);
Iterator it = list.iterator();
int count = 0;
while (it.hasNext() && count < 3) {
System.out.println(it.next()); ++count;
}
}
}

253 :デフォルトの名無しさん:05/01/06 18:15:42
import java.net.*;
import java.io.*;

public class IpUDPReceiveSample1{

private static int BUFFER_SIZE = 256;
static int port = 10000;

public void main(String args[]){

try{
DatagramSocket ds = new DatagramSocket(port);
byte[] data = new byte[BUFFER_SIZE];

System.out.println("Waiting.......");

while(true){
DatagramPacket dp = new DatagramPacket(data, BUFFER_SIZE);

ds.receive(dp);
data = dp.getData();
int length = dp.getLength();
String str = new String(data, 0, length);
System.out.println(str);
}
}
catch(Exception e){
System.err.println("エラーです" + e);
}
}
}
『 java.lang.NoSuchMethodError 』と実行時にエラーがでるのですがなにがいけないんでしょうか?

254 :デフォルトの名無しさん:05/01/06 18:23:24
public void main(String args[]){

public static void main(String args[]){



255 :デフォルトの名無しさん:05/01/06 18:34:16
>>254
ありがとうございます。
無事、実行できました。

256 :ねこさん:05/01/06 19:53:45
>>240さん
有難うございます。出来ました。。もう一度コピーしたらできるようになりました


257 :>>233 その1:05/01/06 20:28:22
import java.applet.*; import java.awt.*; import java.awt.event.*;
import javax.swing.*; import javax.swing.event.*;
public class HW61 extends Applet {;
Mojiban f1,f2;
Tokei th1,th2;
public void init() {
f1 = new Mojiban("時計1"); f1.setSize(400,400); f1.setLocation(0,250); f1.show();
th1 = new Tokei(f1); th1.start();
f2 = new Mojiban("時計2"); f2.setSize(400,400); f2.setLocation(400,250); f2.show();
th2 = new Tokei(f2);
th2.start();
final JSlider sd1 = new JSlider(JSlider.VERTICAL, 50, 350, 200);
sd1.setOpaque(false);
sd1.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
f1.setSize(sd1.getValue());
}
});
final JSlider sd2 = new JSlider(JSlider.VERTICAL, 50, 350, 200);
sd2.setOpaque(false);
sd2.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
f2.setSize(sd2.getValue());
}
});
setLayout(new GridLayout(1, 2, 50, 0));
add(sd1); add(sd2);
}
}

258 :>>233 その2:05/01/06 20:29:17
class Mojiban extends JFrame implements ActionListener {
int size = 200;
boolean flag;
double tt=0.0;
double dt=1.0;
double dtq=0.0;
Button b1,b2,b3,b4;
public Mojiban(String s) {
super(s);
setSize(200,240);
b1 = new Button("中断");
b2 = new Button("再開");
b3 = new Button("速く");
b4 = new Button("遅く");
setLayout(new FlowLayout());
add(b1);
add(b2);
add(b3);
add(b4);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
}

259 ::>>233 その3:05/01/06 20:29:49
synchronized public void actionPerformed(ActionEvent e) {
String s=e.getActionCommand();
if ( s == "中断" ){
if ( dt!=0.0 ) {
dtq=dt;
dt=0.0;
}
}
else if ( s == "再開" )
dt=dtq;
else if ( s == "速く" )
dt*=2.0;
else if ( s == "遅く" )
dt/=2.0;
}
synchronized void setSize(int size) {
this.size = size;
flag = true;
}

260 :>>233 その4:05/01/06 20:30:29
synchronized public void paint(Graphics gg) {
double da=3.1416/30.0;
double db=3.1416/6.0;
double ss,cc,t,r=size/2*0.95,rr=size/2*0.20;
double u,rrr=size/2*0.90;
double v,rrrr=size/2*0.85;
int x,y,xx,yy;
int center = 200;

if (flag) {
gg.setColor(getBackground());
gg.fillRect(0 , 0, getWidth(), getHeight());
flag = false;
}
Graphics2D g = (Graphics2D) gg;
g.setColor(Color.white);
g.fillOval(center-(size/2),center-(size/2),size,size);
g.setColor(Color.black);
g.setStroke(new BasicStroke(4));
g.drawOval(center-(size/2),center-(size/2),size,size);
g.setStroke(new BasicStroke(2));
g.drawOval(center-3,center-3,6,6);
t=da*(double)((int)tt%60);
ss=Math.sin(t);
cc=Math.cos(t);

261 ::>>233 その5:05/01/06 20:30:57
x=center+(int)(r*ss);
y=center-(int)(r*cc);
xx=center-(int)(rr*ss);
yy=center+(int)(rr*cc);
g.drawLine(xx,yy,x,y);
g.setColor(Color.blue);
u=da*(double)(((int)tt/60)%60);
ss=Math.sin(u);
cc=Math.cos(u);
x=center+(int)(rrr*ss);
y=center-(int)(rrr*cc);
g.drawLine(center,center,x,y);
g.setColor(Color.red);
v=db*tt/3600.0;
ss=Math.sin(v);
cc=Math.cos(v);
x=center+(int)(rrrr*ss);
y=center-(int)(rrrr*cc);
g.drawLine(center,center,x,y);
tt+=dt;
}
}

262 :>>233 その6:05/01/06 20:31:52
class Tokei はそのままです。

263 :デフォルトの名無しさん:05/01/07 00:03:39
指令行の引数に正の整数 n を指定すると, 2^0, 2^(-1), 2^(-2), ..., 2^(-n) を順に各行に出力していくプログラムを作ってください。
n が大きな値になっても,小数点以下100桁までほ正確に結果を出力するようにしてください。

お願い致します・・



264 :デフォルトの名無しさん:05/01/07 00:09:20
>>263
2進法で出力するなら簡単ですね

265 :デフォルトの名無しさん:05/01/07 00:10:58
>>257-262
ありがとうございます。

266 :ねこさん:05/01/07 06:42:45
main(String[] argv)
の部分なのですが、argvが入力された時とされていない時で分岐をしたいのですが
どうすればよいでしょうか?
自分的にやってみたのですが、
入力されていなくても
argv→[Ljava.lang.String;@18fe7c3
このような文字列が入いってしまっているようなのです。何方か宜しくお願いします。
実行結果としては以下の通りです。
☆入力された場合
*********MS-DOS****************
C:\java>java A キーワード入力
argv:キーワードが表示
*******************************
☆入力されていない場合
*********MS-DOS****************
C:\java>java A
argv:キーワードが入力されていない
*******************************




267 :デフォルトの名無しさん:05/01/07 07:57:06
>>266
argv.length

268 :デフォルトの名無しさん:05/01/07 08:07:54
C言語にはargvがあるけど、JAVAにもargvってあったっけ。

269 :デフォルトの名無しさん:05/01/07 08:25:30
Javaの場合はargsって書くのが普通だったような・・・?

270 :デフォルトの名無しさん:05/01/07 16:13:33
すいません、このプログラムのアプレット化をしたいのですが、初期化されいませんとなってできません。
どうしたらいいか教えていただけませんか?長すぎたので分割しました。よろしくお願いします。(1)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.URL;
public class LunarPhases implements ActionListener {
final static int NUM_IMAGES = 8;
final static int START_INDEX = 3;
ImageIcon[] images = new ImageIcon[NUM_IMAGES];
JPanel mainPanel, selectPanel, displayPanel;
JComboBox phaseChoices = null;
JLabel phaseIconLabel = null;
public LunarPhases() {
selectPanel = new JPanel();
displayPanel = new JPanel();
addWidgets();
mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS));
mainPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
mainPanel.add(selectPanel);
mainPanel.add(displayPanel);
}


271 :デフォルトの名無しさん:05/01/07 16:14:34
続き(2)
private void addWidgets() {
for (int i = 0; i < NUM_IMAGES; i++) {
images[i] = createImageIcon("/images/image" + i + ".jpg");
}
phaseIconLabel = new JLabel();
phaseIconLabel.setHorizontalAlignment(JLabel.CENTER);
phaseIconLabel.setVerticalAlignment(JLabel.CENTER);
phaseIconLabel.setVerticalTextPosition(JLabel.CENTER);
phaseIconLabel.setHorizontalTextPosition(JLabel.CENTER);
phaseIconLabel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createLoweredBevelBorder(),
BorderFactory.createEmptyBorder(5,5,5,5)));

phaseIconLabel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createEmptyBorder(0,0,10,0),
phaseIconLabel.getBorder()));

272 :デフォルトの名無しさん:05/01/07 16:16:39
続き(3)
String[] phases = { "New", "Waxing Crescent", "First Quarter",
"Waxing Gibbous", "Full", "Waning Gibbous",
"Third Quarter", "Waning Crescent" };
phaseChoices = new JComboBox(phases);
phaseChoices.setSelectedIndex(START_INDEX);
phaseIconLabel.setIcon(images[START_INDEX]);
phaseIconLabel.setText("");
selectPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Select Phase"),
BorderFactory.createEmptyBorder(5,5,5,5)));
displayPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Display Phase"),
BorderFactory.createEmptyBorder(5,5,5,5)));
displayPanel.add(phaseIconLabel);
selectPanel.add(phaseChoices);
phaseChoices.addActionListener(this);
}


273 :デフォルトの名無しさん:05/01/07 16:23:33
>>270
アプレットの作り方を勉強してください

274 :デフォルトの名無しさん:05/01/07 16:25:20
続き(4)
public void actionPerformed(ActionEvent event) {
if ("comboBoxChanged".equals(event.getActionCommand())) {
phaseIconLabel.setIcon(images[phaseChoices.getSelectedIndex()]);
}
}
protected static ImageIcon createImageIcon(String path) {
java.net.URL imageURL = LunarPhases.class.getResource(path);

if (imageURL == null) {
System.err.println("Resource not found: "
+ path);
return null;
} else {
return new ImageIcon(imageURL);
}
}
private static void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
LunarPhases phases = new LunarPhases();
JFrame lunarPhasesFrame = new JFrame("Lunar Phases");
lunarPhasesFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
lunarPhasesFrame.setContentPane(phases.mainPanel);
lunarPhasesFrame.pack();
lunarPhasesFrame.setVisible(true);
}

275 :デフォルトの名無しさん:05/01/07 16:26:44
続き(5)長くすいませんこれが最後です。
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}


276 :デフォルトの名無しさん:05/01/07 16:34:10
>>270
まず、宿題じゃなかったらスレ違い
あと、ソースコードのどこが間違ってるというより、アプレットを勉強してください
ついでにmainメソッドからinvokeLaterを使ってる意味がないな

277 :デフォルトの名無しさん:05/01/07 16:59:17
そもそもGUIだしめんどい

278 :デフォルトの名無しさん:05/01/07 22:11:20
>>191
>>187はこんな感じに直せばいいのでしょうか?
ttp://y.achoo.jp/up5/src/yo-kan0307.txt


279 :デフォルトの名無しさん:05/01/07 23:51:04
いいで〜〜〜〜〜〜〜〜〜す

280 :デフォルトの名無しさん:05/01/08 04:12:44
初心者まるだしな質問ですいませんorz。
「自然数nを入力し、nのすべての約数(1とn自身除く)を出力する。
もしnが素数な"Prime"と出力する。」という問題をJAVAで書きたいのですが、どなたかご教授お願いします。

281 :デフォルトの名無しさん:05/01/08 04:16:33
出力ってどこへだ?

282 :デフォルトの名無しさん:05/01/08 10:32:24
みんなの心の中にです。

283 :デフォルトの名無しさん:05/01/08 12:30:38
Javadocでドキュメントを作る課題がでたのですが、
どんな感じでつくればいいのでしょうか?

284 :デフォルトの名無しさん:05/01/08 14:45:10
JAVAで ”ここのインスタンスがトランプのカードを表すCardを作りなさい”
”個々のインスタンスが一組のトランプをクラスDeckを作りなさい”
”Card , Deckをテストするための小さなプログラム(例えば、一組のトランプを生成してそのカードを表示するプログラム)DisplayDeckを作って実装しなさい”
”クラスCard , Deck , DisplayDeckについて、クラスObjectのどのメソッドをオーバーライドすべきかを考えてそれを実装しなさい”
という問題があるのですが自分には難しくてわかりません。教えていただけないでしょうか!?


285 :デフォルトの名無しさん:05/01/08 14:56:16
>>284

DisplayDeckという名前は気持ち悪い
DeckPanel とか Board のほうがいい。

286 :デフォルトの名無しさん:05/01/08 14:57:46
大体にして、カードクラスなんて作る意味あんのか
挙動なんてありようがない
単なる定数でしかない


287 :カオル:05/01/08 14:58:20
大学で出された宿題丸投げします。
さっぱり分からないのでお願い致します。

3人のケーキ職人が作るケーキを3人のお客が食べる様子をシミュレートするプログラムを定
義しなさい。ケーキは1つ作られるごとに1つのテーブルに置かれます。お客はそのテーブルか
らケーキを1つ取って食べます。テーブルには3個までしかケーキが置けません。ケーキがない
時には、お客はケーキがテーブルに置かれるのを待ちます。お客のA さんは5個、B さんは10
個、C さんは15個食べると満腹し、ケーキを食べることをやめます。
プログラムの条件
@ つぎの4つのクラスを定義する
􀂄 TestThread:ケーキが3個しか置けないテーブルを作り、ケーキ職人3人とお客3人を動
作させるクラス
􀂄 Table:テーブルのクラス。ケーキを置くメソッドや、ケーキを取るメソッドをもつ。
􀂄 Maker:ケーキ職人のクラス。テーブルにケーキを置くという動作を繰り返す。
􀂄 Eater:ケーキを食べる人のクラス。テーブルからケーキを取るという動作を繰り返す。
A Table クラスはQueue と同様に定義する。(Table にケーキを置く=Queue に要
素を入れる、Table からケーキを取る=Queue から要素を取り出す。)ただし、例外を発生す
るのではなく、テーブルが一杯の場合には、ケーキ職人はケーキを置くのを待ち、テーブル
が空の場合にはお客がケーキを取ることを待つように定義する。ここでケーキを置くメソッド
は put、ケーキを取るメソッドはtake とする。
B Maker もEater も自己の動作を制御するフィールドrandom をもつ。この値によって、Maker
はケーキを置く前に作る時間があるという意味で間を置く。Eater はケーキを食べる時間があ
るという意味で間を置く。乱数の発生のついては以下のヒントを参照のこと。

288 :デフォルトの名無しさん:05/01/08 14:59:08
続き。
C Eater は満腹の限界値に応じて、食べる動作を終了する。終了時には何個食べたかというメ
ッセージを表示する。Maker はC さんが食べ終わるのを待ち、その後にそれぞれの作業を
終了する。それぞれ、終了時には作業の終了メッセージを標準出力に表示する。
D ケーキには通し番号を付与する。開始番号は1。ケーキをテーブルに置いた場合は、だれ
が何個目のケーキを置いたのかを標準出力に表示する。ケーキを食べた時にも、だれが何
個目のケーキを食べたのかを標準出力に表示する。
ヒント
􀂄 擬似乱数の発生には、java.util.Random クラスを利用する。
Random r = new Random(long seed);
により、seed を与えて擬似乱数を発生するインスタンスを生成する。
nextInt()
nextDouble()
nextLong()
nextInt(int i);
等々、いろいろなメソッドがあるが、ここでは間をおく期間が長すぎても困るので、一定の範
囲内で妥当な時間となるように数を調整する必要がある。
􀂄 スレッドに名前をつけるには、以下のコンストラクタが利用できる。
コンストラクタ Thread(String name)
このようにして指定した名前は getName() で参照することができる。

289 :デフォルトの名無しさん:05/01/08 15:06:16
>>283
どんな感じと言われても困るが
とりあえず、そのクラスを使う目的とかメソッドの使い方を他人が見ても
わかるように作る

290 :280:05/01/08 20:52:40
>>281
コマンドプロンプトにだと思います。
印刷して持って来いといわれたので・・・。

291 :デフォルトの名無しさん:05/01/08 21:43:49
>>290
System.out.printf で出力するということだな?

292 :デフォルトの名無しさん:05/01/09 01:52:53
(なぜにprintf…)

293 :デフォルトの名無しさん:05/01/09 02:27:12
「三角形の中に三角形を再帰を使って書く.
描画される三角形の個数は20個とする」
という問題で、以下のように書いたら、再帰使ってないから駄目と言われました。
どう直せばいいのか教えて下さい。
よろしくお願いします。


import java.applet.Applet;
import java.awt.*;

public class Problem3 extends Applet {
public void paint(Graphics g) {
int points = 3;
int x[] = new int[points];
int y[] = new int[points];
int i = 0;

x[0] = 200; // 三角形の第1頂点のX座標値
x[1] = 400; // 三角形の第2頂点のX座標値
x[2] = 0; // 三角形の第3頂点のX座標値
y[0] = 50; // 三角形の第1頂点のY座標値
y[1] = 384; // 三角形の第2頂点のY座標値
y[2] = 384; // 三角形の第3頂点のY座標値
}

294 :デフォルトの名無しさん:05/01/09 02:28:20
<続き>
void fillPolygon(x,y,points) {
if (i <= 20) {
setColor(g, i);
g.fillPolygon(x, y, points);
fillPolygon(
for (int i = 0;i<=20;i++) {
setColor(g, i);
g.fillPolygon(x, y, points);
fillPolugon
x[0] = x[0];
x[1] = x[1]-10;
x[2] = x[2]+10;
y[0] = y[0]+10;
y[1] = y[1]-5;
y[2] = y[2]-5;
}
}
void setColor(Graphics g, int count) {

295 :293:05/01/09 02:29:09
<更に続き>
switch (count % 5) {
case 0:
g.setColor(Color.blue);
break;
case 1:
g.setColor(Color.magenta);
break;
case 2:
g.setColor(Color.pink);
break;
case 3:
g.setColor(Color.yellow);
break;
case 4:
g.setColor(Color.green);
break;
default:
g.setColor(Color.blue);
} }}


細切れになっちゃってすみません。。
よろしくお願いします。

296 :280:05/01/09 03:01:55
>>291
作ったプログラムをコマンドプロンプトで実行して、それを印刷してこいと言われました。
多分それでいいと思います。

297 :デフォルトの名無しさん:05/01/09 03:43:09
実行結果を印刷するんだったら作らなくてもいいんじゃあ…

298 :>>284 その1:05/01/09 11:33:28
import java.text.*; import javax.swing.*; import java.awt.event.*;
import java.awt.*; import java.util.List; import java.util.*;
public class DisplayDeck extends JFrame {
public static void main(String[] args) {
new DisplayDeck();
}
List decks = new ArrayList();
int index;
DisplayDeck() {
List cards = new ArrayList();
for (int i = 1; i < 5; i++)
for (int k = 1; k < 14; k++)
cards.add(new Card(i, k));
Collections.shuffle(cards);
for (int i = 0; i < cards.size(); i+=2)
decks.add(new Deck((Card) cards.get(i), (Card) cards.get(i + 1)));
final JLabel lab1 = new JLabel(), lab2 = new JLabel();
lab1.setPreferredSize(new Dimension(70, 140));
lab2.setPreferredSize(new Dimension(70, 140));
lab1.setBorder(BorderFactory.createLineBorder(Color.black));
lab2.setBorder(BorderFactory.createLineBorder(Color.black));
lab1.setOpaque(true);
lab2.setOpaque(true);
lab1.setBackground(Color.blue.darker());
lab2.setBackground(Color.blue.darker());
lab1.setHorizontalAlignment(JLabel.CENTER);
lab2.setHorizontalAlignment(JLabel.CENTER);
lab1.setVerticalAlignment(JLabel.CENTER);
lab2.setVerticalAlignment(JLabel.CENTER);

299 ::>>284 その2:05/01/09 11:33:56
JPanel pal = new JPanel(new FlowLayout(FlowLayout.CENTER, 32, 0));
pal.add(lab1);
pal.add(lab2);
getContentPane().add(pal);
JButton btn = new JButton("カードを一組表示する");
getContentPane().add(btn, BorderLayout.SOUTH);
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (index >= decks.size())
return;
lab1.setBackground(Color.white);
lab2.setBackground(Color.white);
lab1.setText(((Deck) decks.get(index)).getCard1().toString());
lab2.setText(((Deck) decks.get(index)).getCard2().toString());
++index;
}
});
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}

300 :>>284 その3:05/01/09 11:34:25
class Card {
private int mark, number;
private String pat1 = "1#スペード|2#クラブ|3#ダイア|4#ハート";
private String pat2 = "1#エース|2#2|3#3|4#4|5#5|6#6|7#7|8#8|9#9|10#10|11#ジャック|12#クイーン|13#キング";
private ChoiceFormat cf1 = new ChoiceFormat(pat1), cf2 = new ChoiceFormat(pat2);
Card(int mk, int num) {
mark = mk; number = num;
}
public boolean equals(Object obj) {
return obj instanceof Card && mark == ((Card) obj).mark && number == ((Card) obj).number;
}
public String toString() {
return "<html>" + cf1.format(mark) + "<br> の<br>" + cf2.format(number) + "</html>";
}
}
class Deck {
private Card card1, card2;
Deck(Card c1, Card c2) {
card1 = c1; card2 = c2;
}
public boolean equals(Object obj) {
return obj instanceof Deck && card1.equals(((Deck) obj).card1) && card2.equals(((Deck) obj).card2);
}
public Card getCard1() {
return card1;
}
public Card getCard2() {
return card2;
}
}

301 :デフォルトの名無しさん:05/01/09 11:58:45
>>293
fillPolygonをこうしてみて・・・

void fillPolygon(Graphics g, int[] x, int[] y, int points, int index) {
if (index >= 20)
return;
setColor(g, i);
g.fillPolygon(x, y, points);
x[0] = x[0];
x[1] = x[1]-10;
x[2] = x[2]+10;
y[0] = y[0]+10;
y[1] = y[1]-5;
y[2] = y[2]-5;
fillPolygon(g, x, y, points, index + 1);
}


302 :>>287 その1:05/01/09 13:56:46
import java.util.*;
public class Table {
static LinkedList queue = new LinkedList();
static List makers = new ArrayList(), eaters = new ArrayList();
static int cakeno = 1;
public static void main(String[] args) {
eaters.add(new Eater(1, 5));
eaters.add(new Eater(2, 10));
eaters.add(new Eater(3, 15));
for (int i = 1; i <= 3; i++)
makers.add(new Maker(i));
for (int i = 0; i < makers.size(); i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
((Thread) makers.get(i)).start();
}
for (int i = 0; i < makers.size(); i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
((Thread) eaters.get(i)).start();
}
}

303 ::>>287 その2:05/01/09 13:57:13
synchronized static boolean put(Maker maker) {
if (queue.size() >= 3)
return false;
queue.addLast(new Integer(cakeno++));
System.out.println(maker + "がテーブルにケーキ<" + queue.getLast() + ">を置く");
return true;
}
synchronized static int take(Eater eater) {
if (queue.isEmpty())
return -1;
System.out.println(eater + "がテーブルからケーキ<" + queue.getFirst() + ">を取る");
return ((Integer) queue.removeFirst()).intValue();
}
synchronized static void leave(Eater eater) {
eaters.remove(eater);
if (eaters.isEmpty())
for (int i = 0; i < makers.size(); i++)
((Thread) makers.get(i)).interrupt();
}
}

304 :::>>287 その3:05/01/09 13:57:42
class Maker extends Thread {
private int no, count;
private Random rand;
Maker(int no) {
this.no = no;
rand = new Random(System.currentTimeMillis() * no);
}
public void run() {
while (true) {
int ms = 500 + rand.nextInt(5000);
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
System.out.println(this + "がケーキ作りをやめる 作成数 : " + count);
return;
}
System.out.println(this + "がケーキを完成");
++count;
while (!Table.put(this)) {
if (interrupted()) {
System.out.println(this + "がケーキ作りをやめる 作成数 : " + count);
return;
}
}
}
}
public String toString() {
return "ケーキ職人(" + no + ")";
}
}

305 ::::>>287 その4:05/01/09 13:58:10
class Eater extends Thread {
private int no, maxc, count;
private Random rand;
Eater(int no, int maxc) {
this.no = no;
this.maxc = maxc;
rand = new Random(System.currentTimeMillis() * no * 2);
}
public void run() {
while (true) {
int cakeno;
while ((cakeno = Table.take(this)) == -1) ;
int ms = 500 + rand.nextInt(5000);
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
}
System.out.println(this + "がケーキ<" + cakeno + ">を食べ終える");
++count;
if (count >= maxc) {
System.out.println(this + "がテーブルから去る 消費数 : " + count);
Table.leave(this);
return;
}
}
}
public String toString() {
return "客(" + no + ")";
}
}


306 :カオル:05/01/09 14:50:41
>>302-305
す・・・凄い!! ありがとうございます!!!
コンパイル、実行もできましたw
本当に助かりましたっ

307 :デフォルトの名無しさん:05/01/09 15:23:39
>>297
プログラムも提出しなきゃならないもので・・・

308 :デフォルトの名無しさん:05/01/09 18:44:32
java Fibanacci 130
のように,項数 n を指令行の引数に指定すると,フィボナッチ数を前から n 項,すなわち, f0, f1, f2, ..., fn-1 を,各行に順に出力するプログラムを作りなさい。
なお,フィボナッチ数は,つぎの漸化式で定義されているものです。

f0 = 0, f1 = 1, fn+2 = fn+1+fn (n>=0)
フィボナッチ数自身は,少なくとも100桁まで正確に計算して出力してください。与えられた項数が大きすぎて,フィボナッチ数が100桁を超えたときは,そ之時点で計算を打ち切ってかまいません。

お願いします;;

309 :デフォルトの名無しさん :05/01/09 19:25:32
import java.util.*;

class TestMap {
public static void main(String[] args) {
String[] country = { "Japan", "UK", "France" };
String[] capital = { "Tokyo", "London", "Paris" };
HashMap map = new HashMap();

for (int i = 0; i < country.length; ++i) {
map.put(country[i], capital[i]);
}

for (int i = 0; i < args.length; ++i) {
System.out.print("Captal of " + args[i] + " : " );
System.out.println((String)(map.get(args[i])));
}
}
}

マップを使わないで上と同じ動きをするプログラムってわかりますか?

310 :デフォルトの名無しさん:05/01/09 19:38:37
>>309
http://pc5.2ch.net/test/read.cgi/tech/1105264976/l50
これどうにかしろよ。

311 :デフォルトの名無しさん:05/01/09 19:48:10
>310
じゃあおまえがどうにかしろよ。

312 :デフォルトの名無しさん:05/01/09 19:49:15
>>310
そんなにきになるならおまえがどうにかしろ

313 :デフォルトの名無しさん:05/01/09 20:47:26
次の問題を出されました。自分では解けないので、よろしくお願いします。
問1 n個の数を蓄えた表がある。個の表の中のもっとも大きな数を求めるプログラムを作りなさい。ただし、表の中の数はでたらめに並んでいるものとする。
問2 正の整数nの階乗 n!= n × (n - 1) × (n - 2) × ・・・ × 2 × 1 を求めるプログラムを作りなさい。
問3 西暦年号yが与えられたときその年がうるう年であるかどうかを求めるプログラムを作りなさい。ただし、うるう年は次のように求めることができる。
(1) 4で割り切れる年は次の例外を除いてうるう年である。 (2) 100で割り切れる年は次の例外を除いてうるう年ではない。 (3) 400で割り切れる年はうるう年である。
問4 n個の数を蓄えた表がある。この表の中の数を逆順となるように並べ替えるプログラムを作りなさい。
問5 n個の数を蓄えた表がある。表の中の数はでたらめに並んでいる。この表の中の数を小さい数から順に大きな数となるように並べ替えるプログラムを作りなさい。
問6 正の整数Nがある。これをr進法で表記するためのプログラムを作りなさい。


314 :デフォルトの名無しさん:05/01/09 22:05:35
突然申し訳ございません。私が受けているプログラムの授業で以下のような問題が出されました。恥ずかしながらこの手の問題は苦手でしてなかなか解くことができません。どうかひとつよろしくお願いします。

問題:以下のプログラムを、TreeSet 及び ArrayList を使って作成してください。
import java.util.*;
import java.io.*;

class WordsSet {
private Set words;

public WordsSet(String fileName) {
words = new HashSet();

try {
FileReader fr = new FileReader(fileName);
BufferedReader br = new BufferedReader(fr);

String line;
while ((line = br.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line);
while (st.hasMoreTokens()) {
words.add(st.nextToken());
}
}
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}



315 :デフォルトの名無しさん:05/01/09 22:06:24
>>314の続きです。

public void listWords() {
System.out.println("number of words: " + words.size());
Iterator it = words.iterator();
while (it.hasNext()) {
System.out.println((String)it.next());
}
}

public static void main(String[] args) {
WordsSet ws = new WordsSet(args[0]);
ws.listWords();
}
}


316 :初心者です:05/01/09 22:09:46
大学のプログラミング課題で魔方陣作成がでました。ですが、解けませんでした。
下に問題と参考のソースを書きますので、お願いしたいと思います。

次のプログラムは、「奇数魔方陣」を求めるためのプログラムです。
奇数魔方陣とは、n×n(nは奇数)の正方形のマスの中に1〜n×nまでの数字を
各行、各列、対角線のそれぞれの合計が、全て同じ数になるように並べたものです。



317 :通りすがり:05/01/09 22:17:05
>>314-315
問題はこれだけですか?
もう少し詳しく教えてください。

TreeSetとArrayListを両方用いるのか、TreeSetで1つArrayListで1つ答案を用意するのか、あたりを。

318 :初心者:05/01/09 22:59:38
すいません。そこで、奇数魔方陣をヒントにして、「4N魔方陣」なるものを求めるプログラムを作成しなさい、というのがききたいのです。奇数魔方陣についてはソースがありますので、次にのせます。

319 :初心者:05/01/09 23:07:35
すいません。そこで、奇数魔方陣をヒントにして、「4N魔方陣」なるものを求めるプログラムを作成しなさい、というのがききたいのです。奇数魔方陣についてはソースがありますので、次にのせます。

320 :初心者:05/01/09 23:11:56
すいません。そこで、奇数魔方陣をヒントにして、「4N魔方陣」なるものを求めるプログラムを作成しなさい、というのがききたいのです。奇数魔方陣についてはソースがありますので、次にのせます。

321 :初心者:05/01/09 23:14:28
すいません。そこで、奇数魔方陣をヒントにして、「4N魔方陣」なるものを求めるプログラムを作成しなさい、というのがききたいのです。奇数魔方陣についてはソースがありますので、次にのせます。

322 :デフォルトの名無しさん:05/01/09 23:24:19
>>313
public class Q1 {
public static void main(String[] args) {
int max = Integer.MIN_VALUE;
for( int i=0; i<args.length; i++ ) {
max = Math.max( max, Integer.parseInt(args[i]) );
}
System.out.println( "最大値:" + max );
}
}
public class Q2 {
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
if( n < 0 ) System.exit(1);
int factorial = 1;
for( int i=n; i>0; i-- ) {
factorial *= i;
}
System.out.println( n + "の階乗:" + factorial );
}
}
public class Q3 {
public static void main(String[] args) {
int year = Integer.parseInt(args[0]);
boolean isLeapYear = false;
if( year%400 == 0 ) isLeapYear = true;
else if( year%100 == 0 ) isLeapYear = false;
else if( year%4 == 0 ) isLeapYear = true;
else isLeapYear = false;
System.out.println( "西暦" + year + "年はうるう年" + (isLeapYear ? "です。" : "ではありません。") );
}
}

323 :デフォルトの名無しさん:05/01/09 23:25:21
>>313
public class Q1 {
public static void main(String[] args) {
int max = Integer.MIN_VALUE;
for( int i=0; i<args.length; i++ ) {
max = Math.max( max, Integer.parseInt(args[i]) );
}
System.out.println( "最大値:" + max );
}
}
public class Q2 {
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
if( n < 0 ) System.exit(1);
int factorial = 1;
for( int i=n; i>0; i-- ) {
factorial *= i;
}
System.out.println( n + "の階乗:" + factorial );
}
}
public class Q3 {
public static void main(String[] args) {
int year = Integer.parseInt(args[0]);
boolean isLeapYear = false;
if( year%400 == 0 ) isLeapYear = true;
else if( year%100 == 0 ) isLeapYear = false;
else if( year%4 == 0 ) isLeapYear = true;
else isLeapYear = false;
System.out.println( "西暦" + year + "年はうるう年" + (isLeapYear ? "です。" : "ではありません。") );
}
}

324 :デフォルトの名無しさん:05/01/09 23:45:29
>>313
public class Q4 {
public static void main(String[] args) {
int[] nums = new int[args.length];
for( int i=0; i<args.length; i++ ) {
nums[args.length-i-1] = Integer.parseInt(args[i]);
}
System.out.print( "出力:" );
for( int i=0; i<nums.length; i++ ) {
System.out.print(nums[i] + ", ");
}
}
}
public class Q6 {
public static void main(String[] args) {
int num = Integer.parseInt(args[0]);
int base = Integer.parseInt(args[1]);
java.util.ArrayList answerList = new java.util.ArrayList();
while( num > 0 ) {
int reminder = num % base;
num /= base;
answerList.add( new Integer(reminder) );
}
Integer[] answers = (Integer[])answerList.toArray(new Integer[0]);
for( int i=0; i<answers.length; i++ ) {
System.out.print(answers[answers.length-i-1]);
}
}
}
問5は次レスで。

325 :デフォルトの名無しさん:05/01/09 23:57:34
>>313
問4、問6が書き込みに失敗したって出たけど、嘘っぽいので問5も書いておく。
public class Q5 {
public static void main(String[] args) {
int[] nums = new int[args.length];
for( int i=0; i<args.length; i++ ) {
nums[i] = Integer.parseInt(args[i]);
}
int temp = 0;
for( int i=0; i<nums.length; i++ ) {
for( int j=0; j<i; j++ ) {
if( nums[j] > nums[i] ) {
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}
System.out.print( "ソート結果:" );
for( int i=0; i<nums.length; i++ ) {
System.out.print(nums[i] + ", ");
}
}
}
動かし方と実行結果。
問1:java Q1 20 30 40 30 20→最大値:40
問2:java Q2 5→5の階乗:120
問3:java Q3 2005→西暦2005年はうるう年ではありません。
問4:java Q4 1 2 3 4 5 6→出力:6, 5, 4, 3, 2, 1,
問5:java Q5 30 40 20 10 90 80→ソート結果:10, 20, 30, 40, 80, 90,
問6:java Q6 15 2→1111 (15は2進数表記だと「1111」)

326 :デフォルトの名無しさん:05/01/10 01:01:34
>>322-325
わかり易く動かし方までつけていただき有難うございました。m(_ _)m

327 :初心者:05/01/10 02:30:43
// Magic Phalanx(Odd Number Dimension)
//OddMagicPhalanx.java
import java.awt.*; import java.awt.event.*;
class OddMagicPhalanxPanel extends Panel {
public void paint(Graphics g){
final int N =7;int i,j,k;
int[][] hojin = new int[N+1][N+1];
j=(N+1)/2; i=0;
for(k=1;k<=N*N;k++){
if((k%N)==1)
i++;
else{i--;j++;}
if(i==0)
i=N;
if(j>N)
j=1;
hojin[i][j]=k;}
g.drawString("Magic Phalanx(Odd)(N="+N+")",140,20);
for(i=1;i<=N;i++){
for(j=1;j<=N;j++)
g.drawString(""+hojin[i][j],40*j,20*i+20);}}}
class OddMagicPhalanxFrame extends Frame {
public OddMagicPhalanxFrame() {
setSize(350,250);addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);}});
Panel p =new OddMagicPhalanxPanel();add(p);}}
public class OddMagicPhalanx {
public static void main(String args[]){
Frame w =new OddMagicPhalanxFrame(); w.show();}}


328 :カオル:05/01/10 14:16:50
>>302-305
すみません、再度宿題お願いなのですが、
QueueをLinkedListではなく、リングバッファで表してもらえませんか?
自力でやろうとしましたが無理でした。。。(´Д`;)

329 :デフォルトの名無しさん:05/01/10 14:58:28
>>318
FourNMagicPhalanx.java
-------ここから
import java.awt.*;
import java.awt.event.*;
class FourNMagicPhalanxPanel extends Panel {
public void paint(Graphics g) {
final int FOUR_N = 12;
int i, j, k;
int[][] hojiFourN = new int[FOUR_N][FOUR_N];
g.drawString("Magic Phalanx(4N)(4N=" + FOUR_N + ")", 140, 20);
for (i=0; i<FOUR_N; i++) {
for (j=0; j<FOUR_N; j++) {
// 4x4で区切ったときに対角線上にあるとき
if( i%4==j%4 || i%4+j%4==4-1 ) {
g.drawString("" + (j*FOUR_N+i+1), 40 * (j+1), 20 * (i+2));
// 4x4で区切ったときに対角線上にないとき
} else {
int ura_i = FOUR_N-1-i;
int ura_j = FOUR_N-1-j;
g.drawString("" + (ura_j*FOUR_N+ura_i+1), 40 * (j+1), 20 * (i+2));
}
}
}
}
}
class FourNMagicPhalanxFrame extends Frame {
public FourNMagicPhalanxFrame() {
setSize(350, 250);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);

330 :デフォルトの名無しさん:05/01/10 15:00:01
>>318
つづき
}
});
Panel p = new FourNMagicPhalanxPanel();
add(p);
}
}
public class FourNMagicPhalanx {
public static void main(String args[]) {
Frame w = new FourNMagicPhalanxFrame();
w.show();
}
}
-------ここまで

俺は配列0からしか考えられない人なので327とはその辺の実装方法が違います。
ちなみに
ttp://www2u.biglobe.ne.jp/~zed/m_s4n.htm
を参考にしました。

331 :330:05/01/10 15:05:19
×配列
○for文
スマソ…。

332 :デフォルトの名無しさん:05/01/10 15:11:08
Cに比べてジャバの宿題は、規模が大きいのが多いね

333 :初心者:05/01/10 18:20:08
ありがとうございます!とても助かりました。
一月末にテストがあるのですが、また質問させてもらうかもしれません。
そのときは、どうぞよろしくお願いします。


334 :デフォルトの名無しさん:05/01/10 20:47:36
【Java宿題スレッド基本ルール 五箇条のご誓文】

@ 問題文は自己省略せずに、直接全部貼り付けてください。
  宿題&課題をそのまま丸投げするのが、一番好ましい提示法です。

A 数学問題は何々法でせよだけでなく、その解を出す為の数式を
  具体的に詳細に説明してください。
  ただ、数学問題の回答率は低いです・・・。

B 宿題&課題とその回答プログラムに対する質問はOKですが、
  それ以外の普通の質問はここではしないでください。
  JavaScript、Perl、Ruby、HSP など、他言語の課題はやめてください。

C もし自分の提示課題への回答プログラムが返って来たら、
  動いた動かなかった位の返レスをお願いします。

D 隣のマッドマックスばりの殺伐とした無法地帯Java質問スレと違って、
  ここ宿題スレは、みんな仲良くがモットーの明るく楽しいスレッドを
  目指しているので、無礼かつ乱暴な言葉使いは控えてください。

335 :M.B.:05/01/10 22:27:50
【附則】
……ついでに言うと、(丸数字などの)OS 依存である可能性の
高い文字は使わないほうが「OS に依存しない開発環境」である
Java の世界では、印象がいいかも知れない……

336 :初心者:05/01/10 22:58:20
大学でレポート課題が出されましたが
自分では解けないのでよろしくお願いします
(大学では作成は秀丸で実行はコマンドプロンプトを使用しています)

【問題1】月と日を入力し、1月1日からその日までの日数を入力する。
    閏年ではない年として計算してよい
    適当に入力データを与えてプログラムを実行し結果も添付すること
<入力例>    <出力例>
3  13   元日より 72日

【問題2】自然数nを入力し,nの全ての約数(1とn自身をのぞく)
を出力する.もしnが素数なら'prime'と出力する. 

337 :デフォルトの名無しさん:05/01/10 23:05:12
単純な質問なのですけど
int max = Math.max(A,B);
でAとBが同数だった場合maxには何が代入されることになるのでしょうか?
よろしくお願いします

338 :330:05/01/10 23:06:14
>>308
import java.math.BigInteger;
public class Fibanacci {
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
BigInteger sum = new BigInteger("1");
BigInteger before = new BigInteger("1");
BigInteger before_before = new BigInteger("1");
for( int i=0; i<n; i++ ) {
if( i==0 ) sum = new BigInteger("1");
else if( i==1 ) sum = new BigInteger("1");
else {
sum = before.add(before_before);
before_before = before;
before = sum;
if( sum.toString().length() > 100 ) {
System.out.println( "100ケタを超えたので終了します。" );
System.exit(0);
}
}
System.out.println( sum );
}
}
}

339 :デフォルトの名無しさん:05/01/10 23:12:53
>>337
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/Math.html#max(int, int)

340 :デフォルトの名無しさん:05/01/10 23:22:20
>>309
import java.util.ArrayList;
class TestMap{
public static String a[];
public static void main(String args[]){
a = args;
new TestMap();
}
TestMap(){
String[] country = {"j","u","f"};
String[] capital = {"t","l","c"};
map m = new map();
for(int i = 0;i<country.length;i++){
m.put(country[i],capital[i]);
}
for(int i = 0;i<a.length;i++){
System.out.println((String)m.get(Integer.parseInt(a[i])));
}}
class map{
private ArrayList c;
private ArrayList cc;
map(){
c = new ArrayList();
cc = new ArrayList();
}
void put(String country, String capital){
c.add(country);
cc.add(capital);
}
String get(int i){
return c.get(i)+","+cc.get(i);
}}}

341 :337:05/01/11 00:05:34
すいません、普通に考えれば当たり前のこと聞いてしまったみたいですね・・・

342 :デフォルトの名無しさん:05/01/11 00:21:01
>>336
class Testn{
private String[] count;
public static void main(String args[]){
new Testn(150);
}
Testn(int n){
count = new String[n];
p(n);
for(int i = 0;i<count.length;i++){
if(count[i] != null){
System.out.println(i+count[i]);
}}}
boolean p(int n){
boolean d = false;
for(int i=2;i<n;i++){
if(n%i==0){
count[i] = "";
count[n/i] = "";
if(p(n/i)==false){
count[n/i]="prim";
}
if(p(i)==false){
count[i]="prim";
}
d = true;
}}
return d;
}}
int 範囲内でしか使えない書き直してくれ。
問題2のみ

343 :293:05/01/11 03:11:34
>>301
>>293-295 の件です。
お答え、ありがとうございました。
コンパイルにかけてみたところ、

「シンボルが解決できません。
シンボル:変数i
場所:Problem3のクラス  setColor(g,i); 」

と出てしまうのですが、この点はどう直したら良いでしょうか?
度々申し訳ありませんが、ご教授お願い致します。

344 :デフォルトの名無しさん:05/01/11 09:13:30
>>343
setColor(g,index);
としてください・・・

345 :デフォルトの名無しさん:05/01/11 11:11:54
すげぇ、ソースコード読む気全くないんだなw

346 :デフォルトの名無しさん:05/01/11 11:24:38
>>336
問題1のみ

class DLT
{
  private static final int[] lom = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  private static int count(String[] s){
    int month = Integer.parseInt(s[0]);
    int day = Integer.parseInt(s[1]);
    int length = day;
    for(int i=0; i<=month-2; i++) length += lom[i];
    return length;
  }
  public static void main(String[] args){
    if(args.length != 2) return;
    System.out.println("元日より"+count(args)+"日");
  }
}

347 :デフォルトの名無しさん:05/01/11 16:12:31
標準入力からプログラムテキストファイルを読み込み、
使用している関数名を頻度順に並べなさい。
これは宣言文と実際の式のどちらも含みます。
なお、同じ頻度の関数は辞書順に並べなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに
入力した出力を示しなさい。

なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。
勝手な上限を設けてはいけません。
但し、関数名の長さは高々 255 文字と仮定して良い。

実行例
入力
int combination(int n, int m){
if(m==0){return 1;}
else if(n==m){return 1;}
return combination(n-1,m-1)+combination(n-1,m);
}
main(){
int n=5,m=2;
printf("%dC%d = %d\n",n,m,combination(n,m));
}
出力
combination: 4
main: 1
printf: 1

まったくわからないので助けてください。

348 :依頼人:>>309:05/01/11 17:13:16
とても助かりました。本当にありがとうございました。

349 :依頼人:05/01/11 17:15:11
>>317
TreeSetでお願いします。m(_ _)m

350 :デフォルトの名無しさん:05/01/11 19:33:09
ttp://lecture.ecc.u-tokyo.ac.jp/~ueda/cp04/prog9.html
このページの練習9-4がさっぱりわかりません
どうか教えてください

351 :デフォルトの名無しさん:05/01/11 20:18:10
>>350
int[] target = { 2, 3, 7, 8, 1 };
Arrays.binarySearch( target, 7 );


352 :デフォルトの名無しさん:05/01/11 20:26:46
>>342す。書き直します。すまそ。
import java.util.Hashtable;
import java.util.Enumeration;
class Testn{
private Hashtable key;
public static void main(String args[]){
new Testn(126820);}
Testn(int n){
key = new Hashtable();
p(n);
for(Enumeration e = key.elements();e.hasMoreElements();){
System.out.println(e.nextElement());}}
boolean p(int n){
boolean d = false;
for(int i=2;i<n;i++){
if(n%i==0){
if(key.size()!=0){
if(key.containsKey(String.valueOf(i))==false){
key.put(String.valueOf(i),String.valueOf(i));}
}else{
key.put(String.valueOf(i),String.valueOf(i));}
if(p(i)==false){
key.remove(String.valueOf(i));
key.put(String.valueOf(i),String.valueOf(i)+"prim");}
d = true;}}
return d;}}

353 :デフォルトの名無しさん:05/01/11 21:26:43
エクセルで簡単な足し算や掛け算、引き算が20問くらい出題されて最後に採点される計算問題集作りたいんですけど、どんなプログラムかけばいいのかおしえてください。お願いします。


354 :デフォルトの名無しさん:05/01/11 21:32:46
エクセルで簡単な足し算や掛け算、引き算が20問くらい出題されて最後に採点される計算問題集作りたいんですけど、どんなプログラムかけばいいのかおしえてください。お願いします。


355 :デフォルトの名無しさん:05/01/11 21:45:37
>>353
エクセルでないと駄目なの?
まぁ、JDBC-ODBCブリッジドライバでできると思うからぐぐってみて
わからなかったら次は↓に行ってくれ、スレ違いだから
http://pc5.2ch.net/test/read.cgi/tech/1103729175/

356 :依頼人2:05/01/11 22:24:12
こんばんわ
3で割り切れる数値の表示の仕方を教えてください


357 :デフォルトの名無しさん:05/01/11 22:32:14
>>347
マルチ乙

358 :デフォルトの名無しさん:05/01/11 22:34:09
>>347
http://pc5.2ch.net/test/read.cgi/tech/1103913840/723

359 :デフォルトの名無しさん:05/01/11 22:52:12
>>350
class SelectionSort {
public static void main(String[] args) {
int max = 100; //配列のサイズ
ArraySelectionSort data = new ArraySelectionSort(max); //データを格納する配列の確保

data.setArray(77);
data.setArray(99);
data.setArray(44);
data.setArray(55);
data.setArray(22);
data.setArray(88);
data.setArray(11);
data.setArray(00);
data.setArray(66);
data.setArray(33);

data.display(); // ソート前のデータの表示
data.sortSelection(); // 選択ソートの実行
data.display();// ソート後のデータの表示
boolean d = data.binarySerch(Double.parseDouble(args[0]),data.size(),0,(int)(data.size()+0)/2);
System.out.println(d);
}
}

360 :デフォルトの名無しさん:05/01/11 22:52:49
>>350
class ArraySelectionSort {
private double[] array; //データを格納する配列を指す参照
private int numElems; //データ数

public ArraySelectionSort(int max) { //コンストラクタ
array = new double[max]; //配列の確保
numElems = 0;
}

public void setArray(double value) { //配列へのデータの挿入
array[numElems] = value; //代入
numElems++; //データ数をインクリメント
}

public void display() { //配列の内容(データ)の表示
for (int i = 0; i < numElems; i++)
System.out.print("\t" + array[i]);
System.out.println("");
}


361 :デフォルトの名無しさん:05/01/11 22:53:24
>>350
public void sortSelection() { //選択ソートの実施
int in, out, min;

for (out = 0; out < numElems - 1; out++) {
min = out;
for (in = out + 1; in < numElems; in++)
if(array[in] < array[min])
min = in;
swap(out, min);
}
}

public void swap(int one, int two) { //データの交換
double temp = array[one];
array[one] = array[two];
array[two] = temp;
}

362 :デフォルトの名無しさん:05/01/11 22:54:15
>>350
//個々から書き足し
public int size(){
return numElems-1;
}
public boolean binarySerch(double target,int max, int min, int point){//binaryserch
if(point>max || point<min){
return false;
}
if(array[point]==target){
return true;
}
if(array[point]<target){
return binarySerch(target, max, point, ((int)(max+point)/2)+1);
}else{
return binarySerch(target, point, min, ((int)(min+point)/2)-1);
}
}
}

363 :デフォルトの名無しさん:05/01/11 23:01:35
>355
エクセルでなくてもいいです。

364 :デフォルトの名無しさん:05/01/11 23:36:54
>>353
import java.io.*;
public class ProgramsCollection {
/*private*/ int correct = 0;
private static final int QUESTIONS = 20;
public static void main(String[] args) throws IOException {
ProgramsCollection obj = new ProgramsCollection();
for (int i = 0; i < QUESTIONS; i++) {
int random = (int) (Math.random() * 3);
int a = (int)(Math.random() * 100);
int b = (int)(Math.random() * 100);
switch (random) {
case 0:
if( plus(a, b) ) obj.correct++; break;
case 1:
if( minus(a, b) ) obj.correct++; break;
case 2:
if( mult(a, b) ) obj.correct++; break;
}
}
System.out.println( "出題数:" + QUESTIONS );
System.out.println( "正解数:" + obj.correct );
System.out.println( "正答率:" + obj.correct * 100 / QUESTIONS + "%" );
}
public static boolean plus(int a, int b) throws IOException {
System.out.print( a + " + " + b + " = " );
BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );
int ans = Integer.parseInt(br.readLine());
return ans == a + b;
}

365 :デフォルトの名無しさん:05/01/11 23:37:28
import com.nttdocomo.ui.*;
import java.util.Random;

class HitNumCanvas extends Canvas implements Runnable
{
int nShownNumber=3;
int nPosX[],nPosY[];
int No[];
String NoStr[];

int nScreenWidth,nScreenHeight,nFontWidth,nFontHeight;

Thread myThread;
Random rnd; boolean bEnd=false;

int keyNum=0, KeyCnt=0;

private int RandomNum(int maxVal)
{
int rnum=rnd.nextInt();
rnum=rnum % maxVal;
if (rnum<0) rnum=-1*rnum;
return rnum;
}


public HitNumCanvas()
{
setSoftLabel(Frame.SOFT_1,"再開");
setSoftLabel(Frame.SOFT_2,"終了");



366 :364:05/01/11 23:38:05
>>353
つづき
public static boolean minus(int a, int b) throws IOException {
System.out.print( a + " - " + b + " = " );
BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );
int ans = Integer.parseInt(br.readLine());
return ans == a - b;
}
public static boolean mult(int a, int b) throws IOException{
System.out.print( a + " x " + b + " = " );
BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );
int ans = Integer.parseInt(br.readLine());
return ans == a * b;
}
}
例外処理は自分で書いて。

367 :デフォルトの名無しさん:05/01/11 23:41:21
private int RandomNum(int maxVal)
{
int rnum=rnd.nextInt();
rnum=rnum % maxVal;
if (rnum<0) rnum=-1*rnum;
return rnum;
}


public HitNumCanvas()
{
setSoftLabel(Frame.SOFT_1,"再開");
setSoftLabel(Frame.SOFT_2,"終了");


nScreenWidh=getWidth();
nScreenHeight=getHeight();

rnd= new Random();


368 :デフォルトの名無しさん:05/01/11 23:51:40
簡単な計算ソフトってどんなプログラムかけばできるんですか。

369 :デフォルトの名無しさん:05/01/12 01:41:07
>>347
来年もがんばれ後輩よ!
去年よりもキチーな...
正規表現(Stringクラスのヤツね)とStringTokenizerクラスで関数名を検出するんだ!
具体的には(の前の単語を取り出せばいいわけだ...

「同じ頻度の関数は辞書順に並べなさい」
→「Tree○○○を使いなさい」と読み取れるよな...

370 :デフォルトの名無しさん:05/01/12 08:07:52
>>350すげーな。東大生かよ…。

371 :デフォルトの名無しさん:05/01/12 10:02:39
現実を垣間見るといったところではないだろうか。

372 :デフォルトの名無しさん:05/01/12 13:40:06
宿題まだかな。

373 :デフォルトの名無しさん:05/01/12 15:53:43
ファイルダイアログから読み込んだ文字列を表示する
アプリケーション起動が可能なアプレットを作れ。
ただし、読み込みボタンはフレームで配置し
テキストエリアに表示させよ。

という課題が出されました。
自分では解けなかったので教えてください。

374 :デフォルトの名無しさん:05/01/12 18:09:52
>>362す。まちがってますた。訂正す。
public boolean binarySerch(double target,int max, int min, int point){//binaryserch
if(array[point]==target){
return true;
}
if(point>=max || point<=min){
return false;
}
if(array[point+1]==target){
return true;
}
if(array[point-1]==target){
return true;
}

if(array[point]<target){
return binarySerch(target, max, point, ((int)(max+point)/2));
}else{
return binarySerch(target, point, min, ((int)(min+point)/2));
}
}

375 :デフォルトの名無しさん:05/01/12 18:33:57
>>374です。>>350さんへ
もう一度よく読んでみると検索方法間違っていました。
検索を失敗する部分をエラーとして逃げるのか状況がつかめないのですが、
とりあえずこのような感じでしょか
public boolean binarySerch(double target,int max, int min, int point){//binaryserch
if(array[point]==target){
return true;
}
if(point==max){
return (array[min]==target);
}else if(point==min){
return (array[max]==target);
}
if(point>max || point<min){
return false;
}
if(array[point]<target){
return binarySerch(target, max, point+1, ((int)(max+point)/2));
}else{
return binarySerch(target, point-1, min, ((int)(min+point)/2));
}
}

376 :初心者:05/01/12 20:08:18
>>336です
みなさん答えていただきありがとうございました
おかげ様で無事宿題を提出することができました
大変感謝いたします

377 :デフォルトの名無しさん:05/01/12 22:29:08
>>373
問題文がこのままだと意味が不明瞭なところがあります。
(1) ファイルダイアログから読み込むのはテキストファイルで、
  そのファイルの文字列をテキストエリアに表示させる。
(2) ファイルダイアログから読み込んだ「ファイルのパス情報」を
  テキストエリアに表示するのか。
問題として出すなら(1) だけど「テキストファイル」とはどこにも書いてないしなー。
全然違ってたらダサイな。。

378 :W:05/01/12 22:43:07
次のプログラムでπ乃近似値がわかる理由、仕組みを教えてもらえませんか?
import java.awt.*; import java.awt.event.*;
class CalcPiFrame extends Frame {
private Panel p; private TextField tf; private Button bt;
public CalcPiFrame() {
setSize(200,200);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0); }});
add(p=new Panel(),"Center"); add(tf=new TextField("",10),"North"); add(bt=new Button("Calculation of PI"),"South");
bt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Graphics g=p.getGraphics();
final int N=50000;
double x,y,pai;
int i,sum=0,px,py;
g.clearRect(50,10,100,100); g.drawRect(50,10,100,100);
for (i=1;i<N;i++) {
x=Math.random();
y=Math.random();
if (x*x+y*y<1) {
px=50+(int)(100*x);py=110-(int)(100*y);
g.drawLine(px,py,px,py);
sum++; }}
pai=(double)4*sum/N;
tf.setText("PI ="+pai);
g.dispose(); } }); } }
public class CalcPi { public static void main(String[] args) {
Frame w=new CalcPiFrame();
w.show();}}
よろしくお願します。

379 :デフォルトの名無しさん:05/01/12 22:52:45
Google 検索: pi モンテカルロ 乱数
http://www.google.com/search?hl=ja&lr=lang_ja&ie=sjis&q=pi+%83%82%83%93%83e%83J%83%8B%83%8D%81@%97%90%90%94

380 :373:05/01/13 20:54:37
>>377
問題文がわかりにくくてすみません。
(1)の方です。

問題用紙には実行サンプルの図が載っているのですが
取り込めないので載せられませんでした。

381 :デフォルトの名無しさん:05/01/13 21:08:08
エクセルでボタン作って、そこを押すとランダムに数字がでるプログラムをつくってもらえないですか

382 :デフォルトの名無しさん:05/01/13 21:52:01
>>381
タイトル嫁

383 :デフォルトの名無しさん:05/01/13 22:35:25
>>373
// ShowTextApplet.java
import java.applet.Applet;
public class ShowTextApplet extends Applet {
public void init() {
ShowTextFrame frame = new ShowTextFrame();
frame.setVisible(true);
}
}
// ShowTextFrame.java
import java.awt.*; import java.awt.event.*; import java.io.*;
public class ShowTextFrame extends Frame implements ActionListener {
Button chooseButton;
String fullPath;
FileDialog fileDialog;
TextArea textArea;
Panel panel, smallPanel;
public ShowTextFrame() {
setTitle("テキストファイル表示");
panel = new Panel();
panel.setLayout( new BorderLayout() );
smallPanel = new Panel();
smallPanel.add( chooseButton = new Button("ファイル選択") );
chooseButton.addActionListener(this);
panel.add( BorderLayout.NORTH, smallPanel );
panel.add( BorderLayout.CENTER, textArea = new TextArea() );
add( panel );
setSize( 500, 500 );
setVisible(true);
}

384 :デフォルトの名無しさん:05/01/13 22:35:53
>>373
つづき
public void actionPerformed(ActionEvent ae) {
if( ae.getSource().equals(chooseButton) ) {
fileDialog = new FileDialog(this, "ファイルを選択してください。");
fileDialog.setVisible(true);
fullPath = fileDialog.getDirectory() + fileDialog.getFile();
try {
BufferedReader br = new BufferedReader( new FileReader(fullPath) );
String line;
StringBuffer buffer = new StringBuffer();
while( (line=br.readLine()) != null ) {
buffer.append(line + "\n");
}
textArea.setText(buffer.toString());
} catch( IOException ie ) {
textArea.setText(ie.getMessage());
}
} else {
System.out.println( "error!" );
}
}
}

385 :383, 384:05/01/13 22:40:48
>>373
書くの忘れたけど、
「アプリケーション起動が可能なアプレット」の意味が分かりません。
「mainメソッドからFrameをnewすることで、Javaアプリケーションとして実行する」
という意味ならば、それはアプレットではありません。
とりあえず>>383,384ではAppletクラスを継承しときました。

386 :デフォルトの名無しさん:05/01/14 00:25:29
ボタンとテキストフィールドをつくる。
ボタンを押すとテキストフィールドに書いてある内容が
新規テキストファイルに書き込まれ出力される。
テキストファイルのファイル名は学籍番号。

たったこれだけのことができないオレはいったい・・・
エクリプス使ってるんですが下線がいっぱい・・・

387 :デフォルトの名無しさん:05/01/14 01:15:05
レポートなのですれ違いかもしれませんが・・・

ぐぐってみたのですがいまいち分からんので聞いてみます。

・Java言語で書かれるプログラム(applet,application,servlet,JSP)の
それぞれについて、「その内容、形式、役割」等々について述べよ。

・HTTP通信におけるサーブレットの役割について述べよ。

それぞれ900字以上ですが(そんなに何を書けって言うんだ…

お願いします。

388 :デフォルトの名無しさん:05/01/14 01:26:36
お願いします

GUIでボタンを作成しボタンが押されることでコンパイル、実行ができるプログラムを作成せよ。また結果はGUIに表示せよ。

389 :デフォルトの名無しさん:05/01/14 01:30:57
説明がわからんのはお前の頭と努力が足りないから

390 :293:05/01/14 01:49:12
>>344
一回そうしてみたのですが、コンパイルは出来るのですが表示がされなくて、
何か他のとこが間違ってるのかな?と思っていました。

コンパイル出来るけど、そのあとappletviewer でも、htmlの表示でも表示できない場合は、
やっぱりプログラム自体が何か違うんでしょうか?

391 :デフォルトの名無しさん:05/01/14 02:02:39
「何でも良いからフラクタル図形を再帰や繰り返しを使って書きなさい」
という課題がでました。

丸投げで申し訳ありませんが、よろしくお願いします。

392 :デフォルトの名無しさん:05/01/14 02:19:02
>>387
どこまでわかってるのか書いたほうがレス率あがるんじゃ?

393 :デフォルトの名無しさん:05/01/14 02:41:03
>>378 さん:
モンテカルロ法によるパイの計算です.
たとえば辺の長さが1の正方形とそれに内接する円が有った場合,
正方形の面積は1, 円は0.25*パイ(円の半径は0.5なので)になります.
そこで, たとえば-0.5から0.5まで二つ組で乱数を振って(各々x座標とy座標に相当),
振った組数と円の内側に来た組数(x*x+y*y<1で判定できる)を
まずカウントします. 乱数の数は充分多ければ面積に比例すると
考えられるので, 上記の数の比からパイが計算できます.
当然振る数が多ければ多いほど精度よく計算することが可能です.
(コード中は0から1の乱数を使っていますが, この場合は
1/4円が内接していることに相当します),

こんな説明で分かりました?
図を描けば一発で分かると思うけど, 文章で説明するのは
なかなか難しいです.

394 :デフォルトの名無しさん:05/01/14 03:32:32
>>391
class unko
{
public static void main(String args[])
{
String price = "priceless";
System.out.println("Sonokachi " + price);
System.out.println("Okanede Kaenai Monoga Aru");
}
}

395 :デフォルトの名無しさん:05/01/14 10:06:08
>>386

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import javax.swing.*;

class Wlt
{
  private File selectFile(){
    JFileChooser fc = new JFileChooser(".");
    if(fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION){
      return fc.getSelectedFile();
    }
    else return null;
  }
  private void write(File f, String text){
    try{
      FileChannel fc = new FileOutputStream(f).getChannel();
      fc.write(ByteBuffer.wrap(text.getBytes()));
      fc.close();
    }
    catch(IOException ex){
    }
  }

396 :デフォルトの名無しさん:05/01/14 10:08:02
>>386

  public Wlt(){
    final JTextField tf = new JTextField();
    JButton b = new JButton("click!");
    b.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        File f = selectFile();
        if(f == null) return;
        write(f, tf.getText());
      }
    });
    JFrame f = new JFrame();
    Container c = f.getContentPane();
    c.setLayout(new GridLayout(2, 1));
    c.add(tf);
    c.add(b);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setSize(400, 90);
    f.setVisible(true);
  }
  public static void main(String[] args){
    new Wlt();
  }
}

保存先のファイルは適当に書き換えて下さい。

397 :>>391:05/01/14 12:21:29
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class Ccg{
  class CD{
    double x;
    double y;
    CD(double x, double y){
      this.x = x;
      this.y = y;
    }
  }
  private CD createRectangle(CD p0, CD p1){
    double x = p0.x+Math.cos(Math.PI/3)*(p1.x-p0.x)-Math.sin(Math.PI/3)*(p1.y-p0.y);
    double y = p0.y+Math.cos(Math.PI/3)*(p1.y-p0.y)+Math.sin(Math.PI/3)*(p1.x-p0.x);
    return new CD(x, y);
  }
  private void createLine(ArrayList<CD> points, int rd){
    if(rd <= 0) return;
    for(int i=0; i+1<points.size(); i+=4){
      CD[] p = new CD[5];
      p[0] = points.get(i);
      p[4] = points.get(i+1);
      p[1] = new CD(p[0].x+(p[4].x-p[0].x)/3, p[0].y+(p[4].y-p[0].y)/3);
      p[3] = new CD(p[0].x+(p[4].x-p[0].x)*2/3, p[0].y+(p[4].y-p[0].y)*2/3);
      p[2] = createRectangle(p[1], p[3]);
      for(int j=1; j<4; j++) points.add(i+j, p[j]);
    }
    createLine(points, --rd);
  }

398 :>>391:05/01/14 12:26:14
  class CPanel extends JPanel{
    private int[] x; private int[] y;
    void setPoints(int[] x, int[] y){
      this.x = x; this.y = y; repaint();}
    public void paint(Graphics g){
      Graphics2D g2d = (Graphics2D)g;
      g2d.setColor(Color.WHITE);
      g2d.fillRect(0, 0, getWidth(), getHeight());
      if(x == null) return;
      g2d.setColor(Color.BLACK);
      g2d.drawPolyline(x, y, x.length);
    }
  }
  public Ccg(){
    final CPanel cp = new CPanel()
    final JTextField tf = new JTextField();
    JButton b = new JButton("paint");
    b.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        ArrayList<CD> p = new ArrayList<CD>();
        p.add(new CD(0, 0)); p.add(new CD(300, 0));
        createLine(p, Integer.parseInt(tf.getText()));
        int[] x = new int[p.size()]; int[] y = new int[p.size()];
        for(int i=0; i<p.size(); i++){
          CD c = p.get(i); x[i] = (int)c.x; y[i] = -(int)c.y+200;}
        cp.setPoints(x, y);
      }
    });

399 :>>391:05/01/14 12:28:15
    JToolBar tb = new JToolBar();
    tb.setFloatable(false);
    tb.add(tf);
    tb.add(b);
    JFrame f = new JFrame();
    Container c = f.getContentPane();
    c.setLayout(new BorderLayout());
    c.add(cp, BorderLayout.CENTER);
    c.add(tb, BorderLayout.SOUTH);

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setSize(300, 300);
    f.setResizable(false);
    f.setVisible(true);
  }
  public static void main(String[] args){
    new Ccg();
  }
}

確かこれはコッホ曲線だった気が。

400 :デフォルトの名無しさん:05/01/14 12:32:24
triangle..orz

401 :387:05/01/14 12:45:44
>>392
元々Javaに関する知識が0なので全部分かってはいないのですがorz

とりあえずはIT用語辞典見て内容はapplication以外はおkです

2つ目のやつは提示されている意味も分からんので…

ヴァカですみません

402 :デフォルトの名無しさん:05/01/14 15:50:09
↓のプログラムを、ファイル名をフィールドに入力させ、ボタン(”内容表示”)を押すと、
ファイル内容がテキストエリアに表示されるプログラムに改良しなさい。
なお、表示対象となるファイルは、1行を1文字列として扱えるテキストファイルとする。
・・・という問題が出されました。私にはわからないのでお願いします。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

class JFrame1 extends JFrame {
JTextField tf1, tf2;
JTextArea ta;

public JFrame1( ) {
setSize(500, 300);
setVisible(true);

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



403 :デフォルトの名無しさん:05/01/14 15:51:16
402続き
Container contentPane = getContentPane( );
contentPane.setLayout(new FlowLayout( ));

contentPane.add(new JLabel("番号"));
tf1 = new JTextField(10);
contentPane.add(tf1);
contentPane.add(new JLabel("氏名"));
tf2 = new JTextField(20);
contentPane.add(tf2);
JButton bt1 = new JButton("ボタン");
bt1.addActionListener(
new ActionListener( ) {
public void actionPerformed(ActionEvent e) {
String str = tf1.getText( ) + "," + tf2.getText( );
ta.setText(ta.getText() + str + "\n");
}
}
);
contentPane.add(bt1);
contentPane.add(new JLabel("結果"));
ta = new JTextArea(5, 40);
contentPane.add(ta);

}
}
public class JavaJFm1 {
public static void main(String args[ ]) {
JFrame app = new JFrame1( );
app.show( );}
}


404 :デフォルトの名無しさん:05/01/14 15:56:44
↓を、フォーム上に クリア ボタンを追加し、ボタンが押されたら、番号、名前、結果の3フィールドに空文字列をセットするプログラムにしなさい。
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

public class Applet1 extends Applet implements ActionListener {
TextField tfBangou;
TextField tfShimei;
TextArea taKekka;
Button btn;

public void init( ) {
add(new Label("番号"));
tfBangou = new TextField("", 6);
add(tfBangou);
add(new Label("氏名"));
tfShimei = new TextField("", 12);
add(tfShimei);
btn = new Button("ボタン");
add(btn);
add(new Label("結果"));
taKekka = new TextArea("", 5, 20);
add(taKekka);
btn.addActionListener(this); }
public void actionPerformed(ActionEvent ae) {
if (ae.getSource( ) == btn) {
String str = tfBangou.getText( ) + "," + tfShimei.getText( );
taKekka.setText(taKekka.getText( ) + str + "\n");
} } }


405 :tom:05/01/14 16:10:53
学校の課題でJavaを使ってバイオリズムを表示するプログラムを教えてくださいm(_ _)m

406 :デフォルトの名無しさん:05/01/14 16:35:17
public class BioRhythms{
public static void main(String[] args){
System.out.println("バイオリズム");
}
}

407 :デフォルトの名無しさん:05/01/14 17:04:27
>>394
>>406
いたづらはいやづら。
がきどもめ..。

408 :デフォルトの名無しさん:05/01/14 17:11:09
>>405
情報が少なすぎ
問題文とかそのまま貼り付けたほうがよさそう

409 :406:05/01/14 17:17:14
"バイオリズム"が表示されるはずだけどな・・・
何処か間違ってる?

410 :デフォルトの名無しさん:05/01/14 17:23:01
>>409
>>405の質問の仕方が悪いのはわかるがそれは駄目だろう

411 :デフォルトの名無しさん:05/01/14 17:29:45
すみません、教えてください。
Runtime.execメソッドで外部コマンドを実行したいのですが、
ファイル名に丸カッコが入ったファイルが実行できません。

Runtime.getRuntime().exec("a.exe");

は実行できるのですが、

Runtime.getRuntime().exec("(a).exe");

になると「.exeの使い方が誤っています。」になってしまいます。
このような場合はどうしたらよいのでしょうか?

412 :デフォルトの名無しさん:05/01/14 17:33:01
>>411
半角と全角は確かめたか?

413 :411:05/01/14 17:37:59
全て半角で書いていますが(ファイル名もソースも)間違ってますか?

414 :373:05/01/14 17:38:43
>>383-385
どうもありがとうございます!
「アプリケーション起動が可能なアプレット」とは
自分もよくわからないんですがこんなのらしいです↓
import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class ApplicationApplet extends JApplet{
String message;
public void init(){
message = "Sample";
}
public void paint(Graphics g){
Dimension size = this.getSize();
g.drawString(message, size.width/4, size.height/2);
}
public static void main(String[] args){
JFrame frame = new JFrame ();
frame.setTitle("アプリケーション起動が可能なアプレット");
ApplicationApplet applet = new ApplicationApplet();
frame.getContentPane().add (applet,"Center");
frame.addWindowListener (new WindowAdapter() {
public void windowClosing (WindowEvent e) {
System.exit (0);
} });
frame.pack();
frame.setSize (new Dimension (300, 300));
applet.init ();
applet.start ();
frame.setVisible (true);
} }

415 :デフォルトの名無しさん:05/01/14 17:48:08
>>411
これでどう?
Runtime.getRuntime().exec("\"(a).exe\"");

416 :373:05/01/14 18:05:07
414書き足し
上記のプログラムがアプレットとしても
アプリケーションとしても起動できるので
そういう意味ではないかと思います。

さらにすみませんが、>>383,384で画像表示用も作れと
課題が出されました。
作成に関して
・読み込んだ画像表示の際にフィルター処理(モノクロ変換などで
特定の1種類のみ適用)したものを表示させる。
・元の画像(フィルター未処理)は表示しなくてよい。
と、追加されました。
自分がテキストファイルですら出来ない程度なので
こちらも教えて下さい。

417 :>>416 その1:05/01/14 19:44:33
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.filechooser.FileFilter;
public class HW64 extends JApplet {
JLabel lab = new JLabel();
ButtonGroup bg = new ButtonGroup();
BufferedImage src;
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (src == null)
return;
lab.setIcon(new ImageIcon(filterImage(src)));
}
};

418 ::>>416 その2:05/01/14 19:45:12
public static void main(String[] args) {
HW64 apl = new HW64();
apl.init();
JFrame frm = new JFrame();
frm.getContentPane().add(apl);
frm.setSize(800, 600);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
public void init() {
lab.setHorizontalAlignment(JLabel.CENTER);
JScrollPane scroll = new JScrollPane(lab);
JButton btn = new JButton("ファイルダイアログ");
JToggleButton plane = new JToggleButton("普通"), gray = new JToggleButton("灰"),
red = new JToggleButton("赤"), green = new JToggleButton("緑"), blue = new JToggleButton("青");
bg = new ButtonGroup();
plane.setActionCommand("plane"); bg.add(plane); plane.addActionListener(al);
gray.setActionCommand("gray"); bg.add(gray); gray.addActionListener(al);
red.setActionCommand("red"); bg.add(red); red.addActionListener(al);
green.setActionCommand("green"); bg.add(green); green.addActionListener(al);
blue.setActionCommand("blue"); bg.add(blue); blue.addActionListener(al);
bg.setSelected(plane.getModel(), true);
JPanel pal = new JPanel();
pal.add(plane);
pal.add(gray);
pal.add(red);
pal.add(green);
pal.add(blue);
pal.add(btn);
getContentPane().add(scroll);
getContentPane().add(pal, BorderLayout.SOUTH);

419 :::>>416 その3:05/01/14 19:45:40
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser fc = new JFileChooser();
fc.setFileFilter(new FileFilter() {
public boolean accept(File file) {
return file.isDirectory() ||
file.getName().matches(".+\\.jpg|.+\\.gif|.+\\.png|.+\\.bmp");
}
public String getDescription() {
return "";
}
});
fc.showOpenDialog(HW64.this);
File file = fc.getSelectedFile();
if (file == null)
return;
try {
src = ImageIO.read(file);
} catch (IOException e1) {
lab.setText("不正な画像です");
return;
}
lab.setIcon(new ImageIcon(filterImage(src)));
}
});
}

420 ::::>>416 その4:05/01/14 19:46:12
Image filterImage(Image img) {
if (bg.getSelection().getActionCommand().equals("gray")) {
return createImage(new FilteredImageSource
(img.getSource(), new GrayFilter(true, 50)));
} else if (bg.getSelection().getActionCommand().equals("red")) {
return createImage(new FilteredImageSource
(img.getSource(), new RGBImageFilter() {
public int filterRGB(int x, int y, int rgb) {
return rgb|=0x00ff0000;
}
}));
} else if (bg.getSelection().getActionCommand().equals("green")) {
return createImage(new FilteredImageSource
(img.getSource(), new RGBImageFilter() {
public int filterRGB(int x, int y, int rgb) {
return rgb|=0x0000ff00;
}
}));
} else if (bg.getSelection().getActionCommand().equals("blue")) {
return createImage(new FilteredImageSource
(img.getSource(), new RGBImageFilter() {
public int filterRGB(int x, int y, int rgb) {
return rgb|=0x000000ff;
}
}));
}
return img;
}
}


421 :411:05/01/14 21:31:24
>>415
動きました。
ありがとうございます。

すみません、もう一つ質問させてください。
Windows2000上で開発してるのですが、cmd.exeを利用して外部コマンドを
起動したいです。
実行するファイルがc:\test\(a).exeの場合、

String[] cmd = {
"cmd.exe", "/c", "(a).exe"
};
Process p = Runtime.getRuntime().exec(cmd, null, new File("C:\\test"));

このようなソースを書いてみたのですが、やはり起動しません。
"(a).exe"の部分を"\"(a).exe\""に変えてみたのですがダメでした
(カッコ無しのファイルは普通に起動できました)。
これはどのようにしたらよいのでしょうか?

422 :デフォルトの名無しさん:05/01/14 21:56:36
私の環境では、そもそも、CMD.EXEが直ぐに終了してしまうようだ。
引数の(a).exeは悪くなさそう。
(試しに
String[] cmd = {
"NOTEPAD.EXE","\"c:/(test).txt\""
};
で、(test).txtをnotepad.exeで開けた(当然C:\(test).txtが存在するという前提)。)

423 :デフォルトの名無しさん:05/01/14 22:15:25
どうしてファイル名に括弧つけるの?
括弧にこだわらなくていいならリネームしてから渡しちゃうとか。
でもこだわりたいからここできいてるのか。

424 :422:05/01/14 22:24:30
String[] cmd = {
"CMD.EXE","NOTEPAD.EXE"
};
->問題なし


String[] cmd = {
"CMD.EXE","(a).EXE"
};
->駄目((a).exeにPathが通っているという前提)


普通にcmd.exeを開いて(a).exe
->駄目(上に同じく(a).exeにPathが通っているという前提)

cmd.exeで"()"などが入っているファイルを起動できない。
Javaとは関係なさそう。

425 :386:05/01/14 22:32:36
ありがとう。賢者のみなさん。ほんとうにありがとう

426 :デフォルトの名無しさん:05/01/14 23:30:27
>>402-403
// JavaJFm1.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
class JFrame1 extends JFrame {
JTextField tf1;
JTextArea ta;
public JFrame1() {
setSize(500, 300);
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
contentPane.add(new JLabel("ファイル名"));
tf1 = new JTextField(30);
contentPane.add(tf1);
JButton bt1 = new JButton("ボタン");
bt1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String path = tf1.getText();
System.out.println( path );
try {
BufferedReader br = new BufferedReader( new FileReader(path) );
String line;
StringBuffer buffer = new StringBuffer();

427 :デフォルトの名無しさん:05/01/14 23:31:00
>>402-403
つづき

428 :426=427:05/01/14 23:31:55
>>402-403
ミスった。。
while( (line=br.readLine()) != null ) {
buffer.append(line + "\n");
}
ta.setText( buffer.toString() );
} catch( IOException ioe ) {
ta.setText(ioe.getMessage());
}
}
});
contentPane.add(bt1);
contentPane.add(new JLabel("結果"));
ta = new JTextArea(5, 40);
contentPane.add(ta);
}
}
public class JavaJFm1 {
public static void main(String args[]) {
JFrame app = new JFrame1();
app.show();
}
}

429 :デフォルトの名無しさん:05/01/14 23:37:55
>>404
// Applet1.java
import java.awt.*; import java.awt.event.*; import java.applet.Applet;
public class Applet1 extends Applet implements ActionListener {
TextField tfBangou;
TextField tfShimei;
TextArea taKekka;
Button btn, clearBtn;
public void init() {
add(new Label("番号"));
tfBangou = new TextField("", 6);
add(tfBangou);
add(new Label("氏名"));
tfShimei = new TextField("", 12);
add(tfShimei);
btn = new Button("ボタン");
add(btn);
clearBtn = new Button("クリア");
add(clearBtn);
add(new Label("結果"));
taKekka = new TextArea("", 5, 20);
add(taKekka);
btn.addActionListener(this);
clearBtn.addActionListener(this);}
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == btn) {
String str = tfBangou.getText() + "," + tfShimei.getText();
taKekka.setText(taKekka.getText() + str + "\n");
} else if (ae.getSource() == clearBtn) {
tfBangou.setText("");
tfShimei.setText("");
taKekka.setText("");}}}

430 :名無しさん:05/01/15 00:21:26
丸投げですが、お願いします。
問題10

英文を収めたテキストファイルの名前を指令行の第1引数に指定すると,
そのファイルの中の行で,指定された単語のいずれかを含む行だけを
出力するプログラムを作りなさい。単語は,指令行の第2引数以降に
いくつでも指定していいことにします。なお,単語が一つも指定されて
いなければ,何もしないで終了することにします。



431 :デフォルトの名無しさん:05/01/15 00:45:10
どうかお力を貸してください。お願いします。
File copy and rename.GUIを使用した右のプログラムをコンパイルして実行せよ。
プログラムのactionPerformedメソッドを実装せよ。に次の4つの機能を搭載せよ。
(1) 左のテキストフィールドに入力されたファイル名の存在を確認し、
そのようなファイルがなければ “You may type a wrong name. Check again!”
というメッセージを表示する。
(2)右のテキストフィールドに入力されたファイル名の有無を確認し、
存在するのならば“The file exists already. Please use another name!”.
というメッセージを表示する。
(3) “File Copy”ボタンをクリックしたら、
左のテキストフィールドに与えられたファイルを
右のテキストフィールドの与えられたファイル名にコピーできるようにする
(RandomAccessFile streamを使用して)。
(4) “File Name Change” functionを実行するつまり、
“File Name Change”ボタンがクリックされたら、
左テキストフィールドに与えられたファイル名が
右テキストフィールドの与えられたファイル名に変更される。


432 :431-1:05/01/15 00:46:32
これがそのプログラムです。
import java.io.*; import java.awt.*; import java.awt.event.*;

public class fileCopyRename extends Frame implements ActionListener{
private Label L1, L2;
private TextField fromfile, tofile;
private Button B1, B2;
private Panel P; private TextArea filedisplay;

public fileCopyRename() {
super("Test file copy and rename");
filedisplay =new TextArea();
P = new Panel(); P.setLayout( new GridLayout(3,2) );
L1 = new Label("Copy/move a file from");
L2 = new Label("Copy/move a file to");
fromfile = new TextField("Enter a file to be copyed/moved");
tofile = new TextField("Enter a new file name");


433 :431-2:05/01/15 00:47:05
B1 = new Button("File Copy");
B2 = new Button("File Name Change");
P.add(L1); P.add(L2);
P.add(fromfile);P.add(tofile); P.add(B1); P.add(B2);
B1.addActionListener(this); B2.addActionListener(this);
setLayout( new BorderLayout() );
add(P, BorderLayout.NORTH);
add(filedisplay, BorderLayout.CENTER);
setSize(500, 700); setVisible(true);
filedisplay.append("\n"+
" Contents of a file to be copied are the following:"+"\n");
}


434 :431-3:05/01/15 00:47:57
public void actionPerformed(ActionEvent e) {
String fname = fromfile.getText();
String cname = tofile.getText();
// Implement 1 and 2
if(e.getSource() == B1) { // File Copy button
// Implement 3 (file copy)
}
if(e.getSource() == B2) { // File Rename button
// Implement 4 (file rename)
}
}
public static void main( String args[] ) {
fileCopyRename f = new fileCopyRename();}
}
以上です。どうかお願いします。

435 :デフォルトの名無しさん:05/01/15 00:48:07
>>426-429
ありがとうございます

436 :デフォルトの名無しさん:05/01/15 00:59:51
>>430
// Grep.java
import java.io.*;
public class Grep {
public static void main(String[] args) {
if( args.length < 2 ) System.exit(1);
try {
String[] searchWords = new String[args.length-1];
BufferedReader br = new BufferedReader( new FileReader(args[0]) );
String line;
int lineNumber = 0;
while( (line=br.readLine()) != null ) {
lineNumber++;
for( int i=1; i<args.length; i++ ) {
if( line.indexOf(args[i]) != -1 ) {
System.out.println(lineNumber);
}
}
}
} catch( IOException ioe ) {
ioe.printStackTrace();
}
}
}

437 :436:05/01/15 01:02:47
>>430
すんません。>>436でインスタンス「searchWords」は使ってないので、
String[] searchWords = new String[args.length-1];
の行は消してもらって良いです。

438 :デフォルトの名無しさん:05/01/15 02:35:31
どうか力を貸してください。お願いします。
単語が辞書順に並べてあるファイルがあります。そうしたファイル二つの
名前を指令行の第1引数と第2引数に指定すると,その二つのファイルの中
を調べ,両方のファイルに現れている単語だけを辞書順に並べたファイル
を書き出すプログラムを作りなさい。書き出したファイルに付ける名前は,
指令行の第3引数に指定するようにします。



439 :>>438 その1:05/01/15 06:13:18
import java.io.*; import java.util.*; import java.util.regex.*;
public class HW60 {
public static void main(String[] args) {
BufferedReader r1 = null, r2 = null;
BufferedWriter w = null;
try {
FileInputStream fi1 = new FileInputStream(args[0]);
FileInputStream fi2 = new FileInputStream(args[1]);
FileWriter fw = new FileWriter(args[2]);
r1 = new BufferedReader(new InputStreamReader(fi1));
r2 = new BufferedReader(new InputStreamReader(fi2));
w = new BufferedWriter(fw);
} catch (Exception ex) {
System.out.println("ファイル名が指定されてない");
System.exit(0);
}
StringBuffer sb1 = new StringBuffer(), sb2 = new StringBuffer();
try {
String line;
while ((line = r1.readLine()) != null)
sb1.append(line + " ");
while ((line = r2.readLine()) != null)
sb2.append(line + " ");
r1.close();
r2.close();
} catch (IOException e) {
System.out.println("ファイル読み込みエラー");
System.exit(0);
}


440 ::>>438 その2:05/01/15 06:14:22
Pattern pat = Pattern.compile("[A-Za-z]+");
Set words1 = new TreeSet();
Matcher mat = pat.matcher(sb1.toString());
while (mat.find())
words1.add(mat.group());
Set words2 = new TreeSet();
mat = pat.matcher(sb2.toString());
while (mat.find())
words2.add(mat.group());
words1.retainAll(words2);

try {
w.write("両ファイルの共通単語\r\n\r\n");
Iterator it = words1.iterator();
while (it.hasNext())
w.write(it.next() + "\r\n");
w.flush();
w.close();
} catch (IOException e1) {
System.out.println("ファイル書き込みエラー");
System.exit(0);
}
}
}


441 :デフォルトの名無しさん:05/01/15 12:08:13
>>439-440
横槍を入れるようで申し訳ないが、Johnの辞書で試してみたらうまく動かなかったので勝手に直してみた。
// HW60.java
import java.io.*; import java.util.*;
public class HW60 {
public static void main(String[] args) {
BufferedReader r1 = null, r2 = null;
BufferedWriter w = null;
try {
FileInputStream fi1 = new FileInputStream(args[0]);
FileInputStream fi2 = new FileInputStream(args[1]);
FileWriter fw = new FileWriter(args[2]);
r1 = new BufferedReader(new InputStreamReader(fi1));
r2 = new BufferedReader(new InputStreamReader(fi2));
w = new BufferedWriter(fw);
} catch (Exception ex) {
System.out.println("ファイル名が指定されてない");
System.exit(0);
}
TreeSet set1 = new TreeSet();
TreeSet set2 = new TreeSet();
try {
String line;
while ((line = r1.readLine()) != null)
set1.add(line);
while ((line = r2.readLine()) != null)
set2.add(line);
r1.close();
r2.close();
} catch (IOException e) {
System.out.println("ファイル読み込みエラー");
System.exit(0);

442 :デフォルトの名無しさん:05/01/15 12:08:41
どうかお力を貸してください。お願いします。
テクストファイルの名前を指令行の第1引数に指定すると,そのファイルの
中身を後で述べる方式で圧縮してファイルに書き出すプログラムを作って
ください。書き出すファイルに付ける名前は,指令行の第2引数に指定する
ようにします。
圧縮は,ファイルの各行の内容について,つぎのような操作を行うことで
実現します。

行の中の文字を,同じ文字の続く限りまとめます。
それぞれのまとまりについて,その文字数が1個または2個であるときは,
もとのとおりにその文字を1個または2個出力します。その文字 c が
n 個 (n>2) 続いていたときは,c,'0', (char)n の3文字を出力します。
例を示します。
入力行:aaaabcaddccccccc
出力行:a.4bcaddc.7
ここで . は文字番号 0 の文字('0')を, 4 は文字番号 4 の文字
((char)4)を, 7 は文字番号 7 の文字((char)7)を,それぞれ
表しています。

問題7
問題6の方式で圧縮してあるファイルの名前を指令行の第1引数に指定すると,
そのファイルを伸長し(もとのテキストファイルに復元し)てファイルに書き
出すプログラムを作ってください。書き出したファイルに付ける名前は,
指令行の第2引数として指定するようにします。


443 :デフォルトの名無しさん:05/01/15 12:09:08
>>439-440
つづき
}
set1.retainAll(set2);
try {
w.write("両ファイルの共通単語\r\n\r\n");
Iterator it = set1.iterator();
while (it.hasNext())
w.write(it.next() + "\r\n");
w.flush();
w.close();
} catch (IOException e1) {
System.out.println("ファイル書き込みエラー");
System.exit(0);
}
}
}
当たってるかなー。。

444 :デフォルトの名無しさん:05/01/15 12:26:23
>>442
> ここで . は文字番号 0 の文字('0')を,
Javaでは
'0' は 「0という文字1字」を表すのでピリオドは出力されないと思うのですが…。

445 :デフォルトの名無しさん:05/01/15 12:50:43
どうかお力添えをお願い致します!!

各行に学生の名前とその学生が受験した科目の番号とその科目での成績
(点数0〜100)とが書いてあるファイルがあります。そうしたファイル
の名前を指令行の引数に指定すると,それぞれの学生ごとに,名前と
受験した科目数とそれらの平均点を出力するプログラムを作りなさい。

なお,ファイルの中では,すべての行が学生の名前の辞書順に並べら
れているものとします。


446 :デフォルトの名無しさん:05/01/15 12:57:00
'0' は 「0という文字1字」を表すのでピリオドは出力されないと思うのですが…。
コピーして書き込んだ私も正直文の意味がわからないですが、例のとうりに
出力できればいいんじゃないでしょうか?

447 :デフォルトの名無しさん:05/01/15 13:59:30
LZ77圧縮アルゴリズムを作りたいのですがどなたかご存じないですか?

448 :デフォルトの名無しさん:05/01/15 14:41:20
助けてください!
ロジスティック写像に関するできるだけ簡単なプログラムソースを何か教えてください・・・

449 :>>442.1:05/01/15 15:40:36
import java.io.*;
import java.nio.*;
import java.nio.channels.*;


public class Czz
{
  private static String read(String file)throws IOException{
    File f = new File(file);
    FileChannel fc = new FileInputStream(f).getChannel();
    ByteBuffer bb = ByteBuffer.allocate((int)f.length());
    fc.read(bb);
    fc.close();
    bb.clear();
    byte[] bs = new byte[bb.capacity()];
    bb.get(bs);
    return new String(bs);
  }
  private static void write(String file, String text)throws IOException{
    FileChannel fc = new FileOutputStream(file).getChannel();
    fc.write(ByteBuffer.wrap(text.getBytes()));
    fc.close();
  }

450 :>>442.2:05/01/15 15:41:33
  private static String cps(String text){
    StringBuffer sb = new StringBuffer(text);
    for(int i=0; i<sb.length();){
      char c = sb.charAt(i);
      int j = 1;
      while((i+j<sb.length()) && (sb.charAt(i+j)==c)) j++;
      if(j > 2){
        sb.replace(i+1, i+j, ""+(char)0+(char)j);
        i += 3;
      }
      else i += j;
    }
    return sb.toString();
  }
  private static String dps(String text){
    StringBuffer sb = new StringBuffer(text);
    for(int i=0; i<sb.length();){
      if(sb.charAt(i) == (char)0){
        char c = sb.charAt(i-1);
        int l = (int)sb.charAt(i+1)-1;
        sb.delete(i, i+2);
        for(int j=0; j<l; j++) sb.insert(i, c);
        i += l;
      }
      else i++;
    }
    return sb.toString();
  }

451 :>>442.3:05/01/15 15:42:19
  public static void main(String[] args)throws IOException{
    if(args.length != 3) return;
    if(args[0].equals("-c")) write(args[2], cps(read(args[1])));
    else if(args[0].equals("-d")) write(args[2], dps(read(args[1])));
  }
}

こんな感じでいかがでしょうか。

452 :>>448 その1:05/01/15 16:36:51
import java.util.*;
import java.util.List;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.image.*;
public class HW19 {
static JTextField tfd_a = new JTextField("3.95"), tfd_m = new JTextField("30");
static JLabel graph = new JLabel();
static List list = new ArrayList();
static BufferedImage img = new BufferedImage(516, 516, BufferedImage.TYPE_INT_ARGB);

453 ::>>448 その2:05/01/15 16:37:22
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.add(new JLabel("係数"));
tfd_a.setPreferredSize(new Dimension(40, 20));
panel.add(tfd_a);
panel.add(new JLabel("最大項数"));
tfd_m.setPreferredSize(new Dimension(40, 20));
panel.add(tfd_m);
graph.setIcon(new ImageIcon(img));
graph.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getY() < 500)
return;
drawGraph(e.getX() / 50);
}
});
frame.getContentPane().add(panel, BorderLayout.NORTH);
frame.getContentPane().add(graph);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
clearGraph();
}

454 :::>>448 その3:05/01/15 16:37:52
static void clearGraph() {
list.clear();
Graphics2D g = img.createGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, img.getWidth(), img.getHeight());
g.setColor(Color.white);
g.fillRect(0, 0, img.getWidth(), img.getHeight());
g.setColor(Color.black);
g.drawRect(16, 0, 500, 500);
String[] col = { "0.0", "0.1", "0.2", "0.3", "0.4", "0.5", "0.6",
"0.7", "0.8", "0.9", "1.0" };
int x = 0, y = 512;
for (int i = 0; i < col.length; ++i) {
g.drawString(col[i], x, y);
x += 50;
}
x = 0;
y = 12;
for (int i = 10; i > 0; --i) {
g.drawString(col[i], x, y);
y += 50;
}
g.dispose();
graph.repaint();
}

455 ::::>>448 その4:05/01/15 16:38:20
static void drawGraph(int init) {
clearGraph();
double a;
int max;
try {
a = Double.parseDouble(tfd_a.getText());
max = Integer.parseInt(tfd_m.getText());
} catch (NumberFormatException e) {
return;
}
double crt = (double) init / 10;
for (int i = 0; i < max; ++i) {
list.add(new Double(crt));
crt = a * crt * (1 - crt);
}
Graphics2D g = img.createGraphics();
g.setColor(Color.blue);
g.drawRect(50 * init, 500, 24, 12);
Point prevpt = null, crtpt = null;
double num = ((Double) list.get(0)).doubleValue();

456 :>>448 その5:05/01/15 16:38:47
for (int i = 1; i < list.size(); ++i) {
int x = (int) Math.round(num * 500 + 16);
num = ((Double) list.get(i)).doubleValue();
int y = (int) Math.round(500 - num * 500);
crtpt = new Point(x, y);
if (i > 1) {
g.drawLine(prevpt.x, prevpt.y, crtpt.x, crtpt.y);
} else {
g.drawLine(init * 50 + 16, 500, crtpt.x, crtpt.y);
g.setColor(Color.red);
g.fillOval(crtpt.x - 4, crtpt.y - 4, 8, 8);
g.setColor(Color.blue);
}
prevpt = crtpt;
}
g.setColor(Color.green);
g.fillOval(crtpt.x - 4, crtpt.y - 4, 8, 8);
g.dispose();
graph.repaint();
}
}


457 :>>448 その6:05/01/15 16:41:36
全部コピペしてコンパイル。
上の係数と最大項数を適当にセットして、グラフ下の
0.1〜0.9の目盛りのどれかをクリックすると
グラフを描画をします。


458 :デフォルトの名無しさん:05/01/15 16:44:51
>>>451
ありがとうございます。

459 :デフォルトの名無しさん:05/01/15 16:49:21
>>>458
445 もよろしくお願いします。一人じゃ課題のすべて
を終わらせることができそうにないので。

460 :デフォルトの名無しさん:05/01/15 16:58:38
>>442は前スレにあったような。
>>445もあったような気がするし。

ふたりとも提出期限大丈夫なのかな。

461 :デフォルトの名無しさん:05/01/15 17:15:47
考えてみたらコードなんて誰も読んでなさそうだな。
インデントやめようかな。

462 :デフォルトの名無しさん:05/01/15 17:29:52
提出日が近いので(明後日)よろしくお願いします。
各行に学生の名前とその学生が受験した科目の番号とその科目での成績
(点数0〜100)とが書いてあるファイルがあります。そうしたファイル
の名前を指令行の引数に指定すると,それぞれの学生ごとに,名前と
受験した科目数とそれらの平均点を出力するプログラムを作りなさい。

なお,ファイルの中では,すべての行が学生の名前の辞書順に並べら
れているものとします。


463 :デフォルトの名無しさん:05/01/15 18:06:46
>>442の方式で圧縮してあるファイルの名前を指令行の第1引数に指定
すると,そのファイルを伸長し(もとのテキストファイルに復元し)
てファイルに書き出すプログラムを作ってください。書き出したファイル
に付ける名前は,指令行の第2引数として指定するようにします。
 この課題、お願いします。

464 :デフォルトの名無しさん:05/01/15 18:33:51
>>463
>>449-451
にその機能も付けておきました。

465 :M.B.:05/01/15 20:23:55
>>461
ちゃんと中身まで追ってるから安心しる

466 :373:05/01/15 20:44:59
>>417-420
遅くなりましたが、感謝感謝です!すごいっす!

フィルターについてですが、以下のようなフィルターを
使用することはできますか?
また、「変更可」の部分の数値をhtmlファイルから
読み込むことは出来るのでしょうか?お願いします。
class ColorFilter{
int r , g, b;
int[] set(int a[], int w, int h) {
for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) {
int flg = (y * w) + x;
r = (a[flg] >> 16) & 255; g = (a[flg] >> 8) & 255; b = (a[flg] >> 0) & 255;
if (r <= 250) && g <= 250 && b <= 250) {
r += 7; g += 6; b += 4; }/*変更可*/
else break;
a[flg] = ((255 << 24 ) | (r << 16) | (g << 8) | b);
r = g = b = 0; } } return a; } }

467 :デフォルトの名無しさん:05/01/15 21:08:25
>>462
// Average.java
import java.io.*;
import java.util.*;
public class Average {
public static void main(String[] args) {
String name = null;
int subjects = 1;
int score = 0;
try {
BufferedReader br = new BufferedReader(new FileReader(args[0]));
String line;
System.out.println( "name,subjects,average" );
while ((line = br.readLine()) != null) {
StringTokenizer token = new StringTokenizer(line, ",");
String tmpName = token.nextToken();
String tmpSubject = token.nextToken();
String tmpScore = token.nextToken();
if( name == null ) name = tmpName;
// 前の行と同じ人
else if( name.equals(tmpName) ) {
subjects++;
// 前の行と違う人のときは前の行の人を出力し初期化
} else {
System.out.println( name + "," + subjects + "," + (score / subjects) );
name = tmpName;
subjects = 1;
score = 0;
}
score += Integer.parseInt(tmpScore);
}
System.out.println( name + "," + subjects + "," + (score / subjects) );

468 :デフォルトの名無しさん:05/01/15 21:10:06
>>462
つづき
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}

与えるテキストファイルはこんなのでいいの?
// score.txt
Aki,0,100
Aki,1,30
Aki,2,50
Aki,3,60
Chie,0,20
Chie,2,70
Chie,1,30
Dai,2,50
Dai,3,80
Dai,1,40
Dai,100,50

>java Average score.txt
で実行。

469 :デフォルトの名無しさん:05/01/15 21:16:03

すごい・・・
雪崩のようにソースコードが書き込まれている・・・
規模といい、C言語宿題とは比較にならない・・・

470 :デフォルトの名無しさん:05/01/15 21:43:22
締め切り月曜で焦ってます。どうかお願いします。

下のプログラムをコンパイルして実行せよ。
これはセンテンス, “JAVA programs are classified into JaVa applications and java applets”を
“StringProcess.txt”というファイルに保存する。
しかしこれは“String Search and Replace”ボタン機能をまだ持たない。
actionPerformed method 中にread/write RandomAccessFile stream を使用して,
次の機能を実装せよ。
(1) StringProcess.txtを読み込んでTextAreaに表示する
(2) 全ての“java”という単語を “Java”にファイル中に置き換える
(3) TextAreaに表示する。
(Hints:Stringメソッド, st1.regionMatches(true, 0, st2, indexOfst2, st1.length())
を使用する,これは2つの文字列が等しいか比較する.)

http://www.uploda.org/file/uporg31135.txt
↑このソースを元に作成するそうです。どうかお願いします!!

471 :デフォルトの名無しさん:05/01/15 22:33:23
ノード数が10個以上の「有向グラフ構造」をもつ状態空間を1つ考え、初期状態(start)と目標(goal)
を設定し、幅優先探索と深さ優先探索を行うSearchクラスを作成せよ。
Nodeクラス、searchクラスは次のものを参照して完成させなさい。

class Node{
//フィールド変数
String name;
Vector children;
Node pointer;
Hashtable childrenCosts;
int gValue;
int hValue;
int fValue;
boolean hasGValue

//コンストラクタ
Node (string theName,intHValue){
name = theName;
children = new Vector();
ChildrenCosts = new Hashtable();
hValue = theValue;
}

472 :471:05/01/15 22:34:18
public String getName(){return name;}
public void setPointer(Node theNode){this.pointer = theNode;}
public Node getPointer(){return this.pointer;}
public int getGValue(){return gValue;}
public void setGValue(int theGValue){・・・;}
public int getHValue(){return hValue;}
public int getFValue(){return fValue;}
public void setFValue(int theFValue){・・・}
public void addChild(Node theChild,int theCost){
//the child=そのノードの子ノード,theCost=その子ノードまでのコスト
children.addElement(theChild);
childrenCosts.put(theChild,new Integer(theCost));
}
public Vector getChildren(){return children;}
public int getCost(Node theChild){・・・}
・・・
}

473 :M.B.:05/01/15 22:35:06
>>469
ここのヘヴィーな回答者の大部分は、
同時にC言語のヘヴィーな使い手であると思われるので、
Cのような劇薬言語を演習用に使うのは(つーか素人に使わせるのは)
基本的にヤヴァイという配慮から、
もっぱらこっちで回答しておられるように思われ。


474 :471:05/01/15 22:35:22
public class Search{
Node node[];
Node goal;
Node start;

search(){
makeStateSpace(){
}
private void makeStateSpace(){
//node[]を定義し、各自状態空間を生成せよ
}
public void breadthFirst(){
・・・
}
public void depthFirst(){
・・・
}
public static void main(String args[]){
//1を入力すれば幅優先探索、2を入力すれば深さ優先探索で動作するようにせよ
}


475 :471:05/01/15 22:36:54

searchクラスの実行例

%java Search 2
<深さ優先探索>
STEP:0
OPEN:[L.A.Airport]
CLOSED:[]
STEP:1
OPEN:[UCLA,Hoolywood]
CLOSED:[L.A.Airport]
・・・
***発見されたルート***
Las Vegas <- Pasadena <- Downtown <- UCLA <- L.A.Airport

どうかよろしくお願いします。アルゴリズムも簡単でよいので教えていただければ幸いです。

476 :デフォルトの名無しさん:05/01/15 22:56:12
>>470
// stringProcess.java#actionPerformed()内
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(B1)) {
try {
BufferedReader br = new BufferedReader(new FileReader("StringProcess.txt"));
String line;
StringBuffer sb = new StringBuffer();
while ((line = br.readLine()) != null) {
while (line.indexOf("java") != -1) {
int i = line.indexOf("java");
line = line.substring(0, i) + "Java" + line.substring(i + 4, line.length());
}
sb.append(line + "\n");
}
filedisplay.setText(sb.toString());
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
RandomAccessFileもString#regionMachesもないけど、機能は実装してる。
問題文に忠実な解答は有志を待て。

477 :デフォルトの名無しさん:05/01/15 22:58:27
>>470
actionPerformedの中に↓を入れれば動くけど問題がよくわからんので
自分で確かめてくれ
File file = new File("StringProcess.txt");
BufferedReader br = null;
String line;
try{
br = new BufferedReader(new FileReader(file));
line = br.readLine();
br.close();
filedisplay.setText(line);
line = line.replaceAll(S1.getText(), S2.getText());
filedisplay.setText(line);
}catch(IOException ie){
filedisplay.setText("IOException");
}

478 :477:05/01/15 23:02:15
ごめん、かぶった上に間違ってる…
2つめのfiledisplay.setText(line);を
filedisplay.append("\n" + line);
に変えておいて

479 :デフォルトの名無しさん:05/01/15 23:08:42
アプレット上のボタンを押したら、paintメソッドに定義されていることを描くには
どう書けばよいのでしょうか?

480 :デフォルトの名無しさん:05/01/15 23:10:18
>>479
repaint()

481 :479:05/01/15 23:13:34
public void init(){
Button b=new Button("開始");

myBTNListener1 m1=new myBTNListener1();

b.addActionListener(m1);

add(b);
}

class myBTNListener1 implements ActionListener{
public void actionPerformed(ActionEvent ae){
repaint();
}
}

public void paint(Graphics g){

-------略-----------
上のようにすると、もうアプレットを表示したらボタンを押さずとも
paintメソッドの内容もすでに描かれているのですが・・・

482 :デフォルトの名無しさん:05/01/15 23:17:20
>>481
boolean flag = false;
class myBTNListener1 implements ActionListener{
public void actionPerformed(ActionEvent ae){
flag = true;
repaint();
}
}
public void paint(Graphics g){
if(!flag) return;
-------略-----------

483 :481:05/01/15 23:22:59
>>482
 ありがとうございます

484 :470:05/01/15 23:33:01
>>476-478
返信ありがとうございます!
かなり参考になりました。
問題文が分かりにくく、すいませんでした。
自分の聞いた話だと
JAVA programs are classified into JaVa applications and java applets
↑の文のJAVA、JaVa、javaを全てまとめてJavaという形にして
TextAreaに新たに変換した文を追加して表示するということでした。

JAVA programs are classified into JaVa applications and java applets

Java programs are classified into Java applications and Java applets

もしお時間ありましたら、この条件で動くソースも答えていただけたら嬉しいです。
たびたびお手数かけて申し訳ないのですが、どうかよろしくおねがいします。

485 :デフォルトの名無しさん:05/01/15 23:49:04
テキストフィールドに入力した値を読み取って変数に代入するにはどうしたらよいですか?

486 :477:05/01/15 23:49:22
>>484
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(B1)) {
File file = new File("StringProcess.txt");
try{
BufferedReader br = new BufferedReader(new FileReader(file));
String line = br.readLine();
br.close();
filedisplay.setText(line);
String str = line.toUpperCase();
int i = 0;
while ((i = str.indexOf("JAVA", i)) != -1) {
line = line.substring(0, i) + "Java" + line.substring(i + 4, line.length());
i += 4;
}
filedisplay.append("\n" + line);
}catch(IOException ie){
filedisplay.setText("IOException");
}
}
}

487 :デフォルトの名無しさん:05/01/15 23:50:36
>>485
宿題じゃなければスレ違い

488 :デフォルトの名無しさん:05/01/15 23:51:12
>>485
JTextField tf = new JTextField();
//適当なコンポーネントにadd & ユーザーからの入力
String s = tf.getText();

489 :デフォルトの名無しさん:05/01/16 00:05:21
>>464
早速実行してみたのですが、なぜか圧縮すると文字化けが起きてるみたいです。
それを解凍するのはちゃんと初期の状態に戻るのですが。

490 :470:05/01/16 00:10:44
>>477
ばっちり動きました!!
本当に助かりました。
ありがとうございました。

491 :デフォルトの名無しさん:05/01/16 00:11:25
>>489
(char)0とかそんな文字を使ってるので文字化けは当然ではないかと思いまする。

492 :デフォルトの名無しさん:05/01/16 00:17:34
>>489
>>464ではありませんが。
そもそも>>442の問題がちょっとアヤシイのです。
今回のようにテキストファイルを「圧縮する」といった場合に
aaaa

a.4
のような方法で「ピリオドという"文字"で区切る」ような圧縮方法だと
....
のようにピリオドが連続した場合の圧縮/復元方法がないのです。
なので、圧縮後のファイルはテキストファイルではなく
文字が割り当てられていないアドレスを使ったバイナリファイルとして保存するしか方法がありません。

493 :デフォルトの名無しさん:05/01/16 00:17:40
>>468
実行してみたのですが、テキストファイルのはじめの人のデータしか
処理されずに次の人のデータが出力されずにエラーが出るんですが、
どうしてでしょうか?

494 :デフォルトの名無しさん:05/01/16 00:22:03
>>492
思ったのですが、ピリオドが連続する場合はあるのでしょうか?
例えば、aaabbbccccを圧縮したら、a.3b.3.c.4のようになれば
いいんじゃないでしょうか

495 :467-468:05/01/16 00:24:11
>>493
1. >>467-468のコードをコピーし、Average.javaとして保存(35行)。
2. javac Average.javaでコンパイル。
3. Average.classと同じディレクトリに>>468のscore.txtを書いて置く。
4. java Average score.txtで実行。

ウチの環境だと
name,subjects,average
Aki,4,60
Chie,3,40
Dai,4,55
と出力されます。

なんだったらエラーの内容をコピペして。

496 :デフォルトの名無しさん:05/01/16 00:25:18
>>494
そうじゃなくて圧縮前のデータの話。
圧縮前のデータでピリオドが連続してたら…??

497 :デフォルトの名無しさん:05/01/16 00:33:47
>>496
たぶん圧縮前はピリオドの連続はないことになってて、英文字だけ
なんじゃないでしょうか?

498 :496:05/01/16 00:35:26
良い反例を思いついたので書いときます。

前     後
「333...」→「3.3..3」

前     後
「3.3..3」→「3.3..3」

圧縮後のデータが全く同じなのでどっちに復元したらいいのか分からんのです。

499 :496:05/01/16 00:36:20
>>497
それなら特に問題ないです^^

500 :デフォルトの名無しさん:05/01/16 00:49:31
>>495エラーはこれです。プログラムの名前とテキストの名前を
Question8にしてあります。
java Question8 Question8.txt
name,subjects,average
Exception in thread "main" java.lang.NumberFormatException:
For input string: "100 "
at java.lang.NumberFormatException.forInputString
(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Question8.main(Question8.java:28)

501 :495:05/01/16 00:51:17
>>500
>For input string: "100 "
100の後ろに半角スペースが入ってるのがダメ。

502 :デフォルトの名無しさん:05/01/16 00:53:42
>>498なら、ピリオドは全く圧縮前は
無しで、圧縮前がすべて英文字のみだったら
うまくできないでしょうか?

503 :デフォルトの名無しさん:05/01/16 00:59:31
>>501スペースとか、いらない改行を除去したら、ちゃんと
出力できました。ありがとうございました。

504 :デフォルトの名無しさん:05/01/16 01:00:37
>>489
464=491なのですが、
上で皆さん議論されてるようなそんなわけで(char)0を使わせていただきました。
必要なら該当部分をそのまま適当な文字に変えてください。

505 :デフォルトの名無しさん:05/01/16 01:27:42
テキストフィールドに入力した実数をdouble型で宣言してる変数に代入するプログラムを教えてください


506 :デフォルトの名無しさん:05/01/16 01:30:58
>>505
http://pc5.2ch.net/test/read.cgi/tech/1105691367/103n
マルチ(・A・)イクナイ!!

ってかここ宿題を持ってくる/答えるスレだから。

507 :デフォルトの名無しさん:05/01/16 01:32:28
>>505
 レポートの一部なんですがダメですか?

508 :デフォルトの名無しさん:05/01/16 01:34:57
>>507
>>1読んで。
あと
http://pc5.2ch.net/test/read.cgi/tech/1105691367/105n
じゃダメ?

509 :471:05/01/16 04:26:10
書き忘れがありました

幅優先探索のサンプルプログラム
public void breadthFirst(){
Vector open = new Vector();
open.addElement(node[0]);
Vector closed = new Vector();
boolean success = false;

int step = 0;
while (true){
//openは空か?
if(open.size()==0){
success=false;
break;
}else{
//openの先頭を取り出しnodeとする
Node node = (Node)open.elementAt(0);
open.removeElementAt(0);
//nodeはゴールか?
if(node==goal){
success=true;
break;
}else{

510 :471:05/01/16 04:26:34
//nodeを展開して子ノードを全て求める
Vector children = node.getChildren();
//nodeをclosedリストに入れる
closed.addElement(node);
//子ノードmがopenにもclosedにも含まれていなければ
for(int i = 0;i<children.size();i++){
Node m = (Node)children.elementAt(i);
if(!open.contains(m)&&!closed.contains(m)){
//mからNodeへのポインタを付ける。このポインタをたどることで解を表示することができる
//mがgoalであればopenリストの先頭に挿入しgoalでなければ
m.setPointer(node);
if(m==goal){
open.insertElementAt(m,0);
}else{
open.addElement(m);
}}}
}}}
if(success){
System.out.println("*** Solution ***");
rintSolution(goal);
}}

511 :471:05/01/16 04:28:50
深さ優先探索のサンプルプログラム
//nodeを展開して子ノードを全て求める
Vector children = node.getChildren();
//nodeをclosedリストに入れる
closed.addElement(node);
//子ノードmがopenにもclosedにも含まれていなければ
//jは複数の子節点を適切にopenの先頭に置くために位置を調整する変数であり
//一般には展開したときの子節点の位置は任意でかまわない
int j = 0
for(int i=0;i<children.size();i++){
Node m = (Node)children.elementAt(i);
if(!open.contains(m)&&!closed.contains(m)){
//mからNodeへのポインタを付ける。
m.setPointer(node);
if(m==goal){
open.insertElementAt(m,0);
}else{
open.insertElementAt(m,j);
j++;
}}}
}}}
if(success){
System.out.println("*** Solution ***");
rintSolution(goal);
}}
以上で全てだと思います。提出は月曜日になってます。
あまり時間がないのですがどうかよろしくお願いします。

512 :デフォルトの名無しさん:05/01/16 12:06:06
>>471
そもそも「有向グラフ構造」ってなんなのか知らないので質問には答えられないんですが。。
どっちにしても今の>>471-472のNodeとか>>474,>>509-511のSearchは
セミコロンがない、とかコンストラクタが変、とかその次元でコンパイルできないので
答える方の人は苦しいと思いますよ…。

513 :デフォルトの名無しさん:05/01/16 13:10:01
javaでwindowsのレジストリの値って読めましたっけ?
JNIとかなしで.

514 :471:05/01/16 15:05:45
>>512
指摘ありがとうございます。ソースコードをもう一度見直しました。

public class Search{
Node node[];
Node goal;
Node start;

search(){
makeStateSpace(){
}
private void makeStateSpace(){
//node[]を定義し、各自状態空間を生成せよ
}
public void breadthFirst(){
・・・
}
public void depthFirst(){
・・・
}
public static void main(String args[]){
//1を入力すれば幅優先探索、2を入力すれば深さ優先探索で動作するようにせよ
}
}

515 :471:05/01/16 15:06:35
//コンストラクタ
Node (string theName,intHValue){
name = theName;
children = new Vector();
ChildrenCosts = new Hashtable();
hValue = theValue;
}
//メソッド群
public String getName(){return name;}
public void setPointer(Node theNode){this.pointer = theNode;}
public Node getPointer(){return this.pointer;}
public int getGValue(){return gValue;}
public void setGValue(int theGValue){・・・;}
public int getHValue(){return hValue;}
public int getFValue(){return fValue;}
public void setFValue(int theFValue){・・・}
public void addChild(Node theChild,int theCost){
//the child=そのノードの子ノード,theCost=その子ノードまでのコスト
children.addElement(theChild);
childrenCosts.put(theChild,new Integer(theCost));
}

516 :471:05/01/16 15:07:12
深さ優先探索のサンプルプログラム
//nodeを展開して子ノードを全て求める
Vector children = node.getChildren();
//nodeをclosedリストに入れる
closed.addElement(node);
//子ノードmがopenにもclosedにも含まれていなければ
//jは複数の子節点を適切にopenの先頭に置くために位置を調整する変数であり
//一般には展開したときの子節点の位置は任意でかまわない
int j = 0;
for(int i=0;i<children.size();i++){
Node m = (Node)children.elementAt(i);
if(!open.contains(m)&&!closed.contains(m)){
//mからNodeへのポインタを付ける。
m.setPointer(node);
if(m==goal){
open.insertElementAt(m,0);
}else{
open.insertElementAt(m,j);
j++;
}}}
}}}
if(success){
System.out.println("*** Solution ***");
rintSolution(goal);
}}

517 :デフォルトの名無しさん:05/01/16 15:12:09
すみません。丸投げです。初心者向けの講座で出たのですがわからないです。
問題1
指令行の引数に正の整数 n を指定すると,つぎの条件を満たす整数格子点 (x, y)(x>0, y>0)の個数を計算して出力するプログラムを作りなさい。
x^2+y^2<n^2
(x^2, y^2, n^2 は,それぞれ,x, y, n の2乗を表します)
なお,n が1億であっても,きちんと個数が計算できるように工夫してください。

問題2
指令行の引数に正の整数 n を指定すると, 2^0, 2^(-1), 2^(-2), ..., 2^(-n) を順に各行に出力していくプログラムを作ってください。 n が大きな値になっても,小数点以下100桁までほ正確に結果を出力するようにしてください。
筆算でなら,この問題は(途中でいやになって止めてしまわない限り)実行することができますね。つまりアルゴリズムは知っているのです。それをプログラムとして作り上げること,それが課題です。

問題3
指令行の引数に正の整数 n を指令すると 0!, 1!, 2!, ..., n! を順に各行に出力していくプログラムを作ってください。結果が100桁を超えない限り正確に計算して出力してください。結果が100桁を超えた解きはその時点で計算を打ち切ってかまいません。
筆算でなら,この問題は(途中でいやになって止めてしまわない限り)実行することができますね。つまりアルゴリズムは知っているのです。それをプログラムとして作り上げること,それが課題です。

518 :471:05/01/16 15:20:31
見つかった間違いは全て直しました。
有向グラフ構造は電車の路線のような感じのものだと思っています(曖昧ですいません)。
講義資料がネットにpdfでUPされているのですが自分が見るにはパスとか必要なので皆さんが見れるかどうか。
ttp://eclass.doshisha.ac.jp/seminar/SEMINAR00249/uploadfiles/tnv3tnrx/tnv3tnrx.pdf
頼りっぱなしで本当に申し訳ないです。自分でも無い頭を使ってがんばってみます。

519 :デフォルトの名無しさん:05/01/16 16:50:50
>>517
問題1だけ。
// LatticePoint.java
public class LatticePoint {
public static void main(String[] args) {
long start = System.currentTimeMillis();
long n = Long.parseLong(args[0]);
long count=0;
for( long x=0; x<n; x++ ) {
double y = Math.sqrt(n*n - x*x);
count += (Math.floor(y) + 1);
if( y == (int)y ) count--;
}
System.out.println( "全部で " + count + " 組" );
long end = System.currentTimeMillis();
System.out.println( "所要時間:" + ((end - start) / 1000.0) + "秒" );
}
}
入力値が1億のときの結果(Pen4 2.4GHz/メモリ1G)
> java LatticePoint 100000000
全部で 7853981733966973 組
所要時間:25.757秒

520 :デフォルトの名無しさん:05/01/16 17:35:30
>>517 問2
public class q2 {
public static void main(String[] args)
{
int [] num = new int [102]; num [0] = 1;
int n = Integer.parseInt (args[0]);
for (int i=0; i<n; ++i) {
for (int j=0; j<101; ++j) {
int tmp = num [j]; num [j] /= 2; tmp -= num [j] * 2; num [j+1] += tmp * 10;
}
}
// 桁溢れの判定
if (num [101] != 0) { System.out.println ("桁あふれ"); System.exit(1); }
// print
System.out.print(num[0]); System.out.print(".");
for (int i=1; i<101; ++i) { System.out.print (num[i]); }
}
}


521 :518:05/01/16 18:19:48
>>517
問題3
// Factorial.java
import java.math.BigInteger;
public class Factorial {
public static void main(String[] args) {
BigInteger big = new BigInteger("1");
System.out.println( "0! = " + big.toString() );
for( int i=1; ; i++ ) {
big = big.multiply( new BigInteger("" + i) );
System.out.println( i + "! = " + big );
if( big.toString().length() > 100 ) break;
}
}
}

522 :521:05/01/16 18:21:23
>>521を書き込んだのは>>518ではなく>>519です。スマソ。

523 :デフォルトの名無しさん:05/01/16 18:35:12
>>517 問3
public class toi3 {
public static void main(String[] args)
{
int [] num = new int [100]; num [0] = 1;
int n = Integer.parseInt (args[0]);
for (int i=1; i<=n; ++i) {
for (int j=0; j<100; ++j) { num [j] *= i; }

for (int j=0; j<100-1; ++j) {
if (num [j] >= 10) {
num [j+1] += num[j]/10; num [j] %= 10;
}
}

//桁あふれ判定
if (num [99] >= 10) { System.out.println ("桁あふれ"); System.exit (1); }

// print
int k = 99;
while (num[k] == 0) --k;
System.out.print (i + "!=");
do { System.out.print (num[k]); --k; } while (k>=0);
System.out.println ();
}
}
}
宿題というからにはこういう回答を期待されているのではないですか。


524 :デフォルトの名無しさん:05/01/16 19:54:49
問題
int が32ビット整数であることと、補数表示を使用していることを用いて、int の表示範囲を求め、
結果をアプレットに貼り付けたラベルに表示するプログラムを作成してみてください。


そんなに難しくないと言われたのですが、初心者なので全然わかりません。
-2147483648 <= n <= 2147483647 がint型の範囲らしいです。
すいませんがおねがいします。

525 :デフォルトの名無しさん:05/01/16 22:51:53
>>524
よくわかんないけどこんな感じではないですねそうですね。

public class Isp{
  public static void main(String[] args){
    System.out.println(0x7fffffff);
    System.out.println(0x80000000);
  }
}

526 :デフォルトの名無しさん:05/01/16 23:14:19
>>471
書いたが長いのでWikiに貼り付けた。
ttp://www.wikiroom.com/java/?%A5%BD%A1%BC%A5%B9%C5%BD%C9%D5%A4%B12
>>518のPDFの通りに書いたが出力部分はめんどくさいからテキトー。
問題文に書いてなかったからノードの設定もテキトー。
当ってるかどうかは知らん。

527 :デフォルトの名無しさん:05/01/16 23:48:23
>>524
class Hosuu{
public static void main(String args[]){
int n = 1;
for(int i = 1;i<=30;i++){
int k = 1;
for(int j = 1;j<=i;j++){
k = k * 2;
}
n = n + k;
}
System.out.println(n);
int c = n;
n = 0;
for( int i = 1;i<=30;i++){
int k = 1;
for(int j = 1;j<=i;j++){
k = k * 2;
}
n = n + (c - k)+1;
}
System.out.println(n);
}

}

528 :デフォルトの名無しさん:05/01/16 23:59:50
電気抵抗の抵抗値をΩ単位で入力すると、画面にそのカラーコードが表示されるプログラム
をお願いします。誤差表示部分は要りません。
たとえば1000オームなら、「茶 黒 赤」のように色は文字を表示させるだけで
十分です。

529 :デフォルトの名無しさん:05/01/17 00:18:12
いろんな面でここのルールに反するので嫌です。


530 :デフォルトの名無しさん:05/01/17 00:22:26
>>528
そのカラーコードの詳細を明記せよ。

531 :デフォルトの名無しさん:05/01/17 00:27:14
>>530
いや、そんなん常識じゃないですか。暗記しておいてくださいよ。


532 :デフォルトの名無しさん:05/01/17 00:38:04
>>531
どこの常識じゃば。

533 :471:05/01/17 00:43:07
>>526
あ、ありがとうございます。
自分の分かりにくい説明や、誤字にも関わらずここまでして頂いて、なんと感謝すればいいのかわかりません。
本当にありがとうございます。

534 :528:05/01/17 01:10:07
>>530

ttp://www.jarl.or.jp/Japanese/7_Technical/lib1/teikou.htm

535 :デフォルトの名無しさん:05/01/17 02:28:13
>>527様ありがとうございました。
下限の方が-2147483648ではなく-2147483646になっていましたが
参考にさせていただきます。

536 :デフォルトの名無しさん:05/01/17 03:21:00
int i,j,k;
double age,sage;

for(0<k<10){
 for(0<j<10){
  age=(100/j);
  sage=100;
  for(0<i<10){
   age=(100/j)*drand48();
   sage=100*drand48();
   func(x, y, z) //x,y,zの計算結果を返す関数
  }
  // ここでx, y, zの値を表示
 }
}
上記のプログラムはx,y,zをi回計算し、その最後の値をj個表示するのを
k回繰り返すプログラムなのですが、

jが1の時x1,y1,z1
jが2の時x2,y2,z1

jが9の時x9,y9,z9とし、x,y,zのそれぞれの平均
((x1+x2+…+x9)/k)
((y1+y2+…+y9)/k)
((z1+z2+…+z9)/k)
を求めるにはどうすればいいのですか?
よろしくお願いします。

537 :デフォルトの名無しさん:05/01/17 06:32:46
http://www.geocities.jp/paid_to_chobits/
の問題誰か解けませんか?

538 :デフォルトの名無しさん:05/01/17 12:07:57
科目と点数を入力して、平均点を表示させて、
点数の高い順に並べ替えて表示させるプログラムを作るんですが、
並べ替えあたりでつまずいてます。

並べ替える前まではいちおできたんで、貼り付けます。
平均表示した後二重ループで並べカエレっていわれたんですけど。。。。

よろしくお願いします。。

public class Kamoku{
public static void main(String[] args){
int sum = 0;
if(args.length == 0){
System.out.println("Usage: java Kamoku 科目1 点数1 科目2 点数2 科目3 点数3 ...");
System.exit(0);
}
if( (args.length % 2) != 0){
System.out.println("引数の数が合わないぞ(;Д;)ウワァーン");
System.exit(0);
}
for(int i=0; i < args.length; i++){
System.out.println(args[i] + "\t: " + args[++i]);
sum += Integer.parseInt(args[i]);
}
System.out.println("平均\t: "+ sum/(args.length/2));
}
}

539 :デフォルトの名無しさん:05/01/17 17:10:57
ファイルダイアログから読み込んだjpg画像の各画素に対し
任意のRGB値(htmlから読み込むこと)以下ならそれぞれ-5を、
以上なら+5をして画像を表示するアプレットを作れ。

という課題が出されました。
丸投げですがお願いします。

540 :539:05/01/17 17:50:40
書き忘れました。追加条件で
0以下となる場合は0に固定、255以上となる場合は255固定すること。
です。

541 :デフォルトの名無しさん:05/01/17 19:38:30 ,
ttp://lecture.ecc.u-tokyo.ac.jp/〜ueda/cp04/prog9.html
ここの練習9−4がわかりません。
レポートでだせるよう答え全部書いてもらえると助かります。
まったくわかりません。

542 :デフォルトの名無しさん:05/01/17 19:55:33 ,
integerをintに変えるときintValue()を使うそうですが、どういう風
に書けばいいのでしょうか

543 :デフォルトの名無しさん:05/01/17 19:57:48 ,
>>542
Integer i = new Integer( 10 );
i.intValue();


544 :デフォルトの名無しさん:05/01/17 19:57:58 ,
次のプログラムは、ファイルに格納された行を逆順に表示する
プログラムです。間違いを修正しましょう。 ちょっとわからない
のでよろしくお願いします。

import java.io.*;
import java.util.Vector;
public class Reverse {
public static void main(String[] args) {
try {
FileReader fr=new FileReader(args[0]);
BufferedReader br=new BufferedReader(fr);
Vector words=new Vector();
while (true) {
String line=br.readLine();
if (line==null) break;
words.add(line);
}
br.close();
for (int i=words.size() ; i>=0 ;i--) {
System.out.println(words.get(i));
}
} catch(IOException e) {
}
}
}

545 :デフォルトの名無しさん:05/01/17 20:09:46
お願いいたします。
次のプログラムは、ファイルに格納された行を辞書順に並び替えて
出力します。このプログラム、正しく動作するのですが、非常に
無駄なことをやっています。無駄を取り除いてみましょう。

import java.io.*;
import java.util.*;
public class Sort {
public static void main(String[] args) {
try {
FileReader fr=new FileReader(args[0]);
BufferedReader br=new BufferedReader(fr);
Vector words=new Vector();
while (true) {
String line=br.readLine();
if (line==null) break;
StringTokenizer st=new StringTokenizer(line);
while (st.hasMoreTokens()) {
words.add(st.nextToken());
Collections.sort(words);
}
}
br.close();
for (int i=0 ; i<words.size() ;i++) {
System.out.println(words.get(i));
}
} catch (IOException e) {
}
}
}

546 :デフォルトの名無しさん:05/01/17 20:23:55
>>544-545
・インデントする
・お願いするんだから態度を改める

出直して来い

547 :答える側の人です:05/01/17 21:01:14
>>546
インデントを2chで表現しようとすると全角スペースを使わなければならず
そうするとEclipseに貼り付けたときに置換するのがメンドイ。
個人的には>>544-545のままでいいです。

>>544-545に限らずほとんどの人がインデントしてないように見えるけど、
Janeで見ればちゃんとインデントしたソースをコピペできる。

548 :デフォルトの名無しさん:05/01/17 21:08:21
自演もどうかと思う

549 :デフォルトの名無しさん:05/01/17 21:44:30
>>528
// ElectricResistance.java
public class ElectricResistance {
public static void main(String[] args) {
double d = Double.parseDouble(args[0]);
// 振り分け
if( d > 10 ) {
largerThanOne( (long)d );
} else {
smallerThanOne( d );
}
}
private static void largerThanOne( long num ) {
int count = 0;
while( num < 10 || num > 99 ) {
num /= 10;
count++;
}
if( count > 9 ) throw new IllegalArgumentException();
int[] nums = new int[] { (int)(num/10), (int)(num%10), };
for( int i=0; i<nums.length; i++ ) printRegularColor( nums[i] );
printRegularColor(count);
}
private static void smallerThanOne( double num ) {
int count=0;
while( num < 10 || num > 99 ) {
num *= 10;
count++;
}
if( count > 2 ) throw new IllegalArgumentException();
int[] nums = new int[] { (int)(num/10), (int)(num%10), };
for( int i=0; i<nums.length; i++ ) printRegularColor( nums[i] );

550 :549:05/01/17 21:45:10
>>528
つづき
printGoldenColor(count);
}
private static void printRegularColor( int i ) {
switch( i ) {
case 0: System.out.print("黒"); break;
case 1: System.out.print("茶"); break;
case 2: System.out.print("赤"); break;
case 3: System.out.print("橙"); break;
case 4: System.out.print("黄"); break;
case 5: System.out.print("緑"); break;
case 6: System.out.print("青"); break;
case 7: System.out.print("紫"); break;
case 8: System.out.print("灰"); break;
case 9: System.out.print("白"); break;
default: throw new IllegalArgumentException();
}
}
private static void printGoldenColor( int i ) {
switch( i ) {
case 1: System.out.print("金"); break;
case 2: System.out.print("銀"); break;
default: throw new IllegalArgumentException();
}
}
}

バグってるかも。。

551 :デフォルトの名無しさん:05/01/17 22:00:48
コマンドプロンプトでjavaファイルをコンパイルするときに、下のような
メッセージが現れたのですが、これは何なのでしょうか?

システムリソースが不足しています。
詳細は次のスタックトレースで調査してください。
java.lang.OutOfMemoryError

552 :デフォルトの名無しさん:05/01/17 22:01:47
>>551
そのまんまの通り。
エラーメッセージで検索くらい汁

553 :デフォルトの名無しさん:05/01/17 22:01:50
>>550
コンパイルはできるんですが、実行ができません。
Exception in thread "main".java.lang.ArrayIndexOutOfBoundsException: 0
at ElectricResistance.main(ElectricResistance.java:4)

とエラーが出ます

554 :デフォルトの名無しさん:05/01/17 22:02:31
>>544-545どなたか教えていただけないでしょうか。。。
みなさん忙しいでしょうけどお願いします。。。

555 :デフォルトの名無しさん:05/01/17 22:05:05
java.lang.OutOfMemoryError のメモリの不足という意味はわかるのですが、
どう対処すればいいのでしょうか?そもそもなぜこんなメッセージが出たの
でしょうか?

556 :>>544.1:05/01/17 22:05:26
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.util.regex.*;
public class Reverse{
  public static void main(String[] args)throws IOException{
    File f = new File(args[0]);
    FileChannel fc = new FileInputStream(args[0]).getChannel();
    ByteBuffer bb = ByteBuffer.allocate((int)f.length());
    fc.read(bb);
    fc.close();
    bb.clear();
    byte[] b = new byte[bb.capacity()];
    bb.get(b);
    String[] lines = Pattern.compile("\n").split(new String(b));
    for(int i=lines.length-1; i>=0; i--) System.out.println(lines[i]);
  }
}

557 :>>545.1:05/01/17 22:06:35
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.util.*;
import java.util.regex.*;
public class Sort0{
  public static void main(String[] args)throws IOException{
    File f = new File(args[0]);
    FileChannel fc = new FileInputStream(args[0]).getChannel();
    ByteBuffer bb = ByteBuffer.allocate((int)f.length());
    fc.read(bb);
    fc.close();
    bb.clear();
    byte[] b = new byte[bb.capacity()];
    bb.get(b);
    String[] lines = Pattern.compile("\n").split(new String(b));
    Arrays.sort(lines);
    for(String s : lines) System.out.println(s);
  }
}

求められているものとは違う気がしてならないですが、参考までに。

558 :>>528.1:05/01/17 22:07:21
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
public class Ccode
{
  private final Color[] COLOR_CODE = {
    new Color(0x00, 0x00, 0x00), new Color(0x99, 0x00, 0x00), new Color(0xff, 0x00, 0x00), new Color(0xff, 0x80, 0x00),
    new Color(0xff, 0xff, 0x00), new Color(0x00, 0x99, 0x00), new Color(0x00, 0x00, 0xff), new Color(0x99, 0x00, 0x99),
    new Color(0x99, 0x99, 0x99), new Color(0xff, 0xff, 0xff), new Color(0xec, 0xd2, 0x6c), new Color(0xc4, 0xc7, 0xdf),
    new Color(0xff, 0xff, 0xff)};
  private final String[] NAME_CODE = {"黒", "茶", "赤", "橙", "黄", "緑", "青", "紫", "灰", "白", "金", "銀", "無着色"};
  private class Code{
    Color color;
    String name;
    Code(Color color, String name){
      this.color = color;
      this.name = name;
    }
  }
  private Code[] gcc(int n, int d){
    String s = String.valueOf(n);
    if(s.length() == 1) s = "0"+s;
    Code[] ca = new Code[4];
    for(int i=0; i<2; i++){
      int c = Integer.parseInt(s.substring(i, i+1));
      ca[i] = new Code(COLOR_CODE[c], NAME_CODE[c]);
    }

559 :デフォルトの名無しさん:05/01/17 22:07:28
>>541
第9回の講義資料で与えられている配列データ
って何ですか?

560 :>>528.2:05/01/17 22:10:11
    ca[2] = new Code(COLOR_CODE[s.length()-1], NAME_CODE[s.length()-1]);
    Code c = null;
    if(d <= 0);
    else if(d == 1) c = new Code(COLOR_CODE[1], NAME_CODE[1]);
    else if(d == 2) c = new Code(COLOR_CODE[2], NAME_CODE[2]);
    else if(d <= 5) c = new Code(COLOR_CODE[10], NAME_CODE[10]);
    else if(d <= 10) c = new Code(COLOR_CODE[11], NAME_CODE[11]);
    else if(d <= 20) c = new Code(COLOR_CODE[12], NAME_CODE[12]);
    ca[3] = c;
    return ca;}
  private class LPanel extends JPanel{
    private BufferedImage image;
    private Code[] ca;
    void setCode(Code[] ca){this.ca = ca;repaint();}
    BufferedImage getImage(){return image;}
    public void paint(Graphics g){
      int width = getWidth();
      int height = getHeight();
      image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
      Graphics2D g2d = (Graphics2D)image.getGraphics();
      g2d.setColor(Color.WHITE);
      g2d.fillRect(0, 0, width, height);
      if(ca != null){
        int x = 0;
        int y = 20;
        for(Code c : ca){
          g2d.setColor(c.color);
          g2d.fillRect(x+=20, y, 10, 50);
          g2d.drawString(c.name, x, y+70);
          g2d.setColor(Color.BLACK);
          g2d.drawRect(x, y, 10, 50);}}
      g.drawImage(image, 0, 0, null);}}

561 :>>528.3:05/01/17 22:10:43
  public Ccode(){
    final LPanel p = new LPanel();

    final JTextField tf = new JTextField();
    final JTextField dtf = new JTextField();
    JButton b = new JButton("paint");
    b.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        p.setCode(gcc(Integer.parseInt(tf.getText()), Integer.parseInt(dtf.getText())));
      }
    });
    JButton s = new JButton("save");
    s.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        JFileChooser fc = new JFileChooser(".");
        if(fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION){
          File f = fc.getSelectedFile();
          String n = f.getName();
          try{
            ImageIO.write(p.getImage(), n.substring(n.lastIndexOf(".")+1, n.length()), f);
          }
          catch(IOException ex){
            ex.printStackTrace();
          }
        }
      }
    });

562 :>>528.4:05/01/17 22:12:05
    JToolBar tb = new JToolBar();
    tb.setFloatable(false);
    tb.add(tf);
    tb.add(dtf);
    tb.add(b);
    tb.add(s);

    JFrame f = new JFrame();

    Container c = f.getContentPane();
    c.setLayout(new BorderLayout());
    c.add(tb, BorderLayout.NORTH);
    c.add(p, BorderLayout.CENTER);

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setTitle("Ccode");
    f.setSize(300, 200);
    f.setVisible(true);
  }
  public static void main(String[] args){
    new Ccode();
  }
}

Swingバージョンです。インデントは適当に置換してからコンパイルしてください。
幾つか重大な問題がありますが、適当に直してください。

563 :デフォルトの名無しさん:05/01/17 22:17:41
>>555
プログラムのどこかにエラーがあるものと思われます。
そうでないなら、実行時に、使用するメモリの最大値を変更しましょう。
java -Xmx128m Appみたいな感じで。

564 :デフォルトの名無しさん:05/01/17 22:17:49
>>538
// Kamoku.java
public class Kamoku {
public static void main(String[] args) {
int sum = 0;
String[][] scores;
if (args.length == 0) {
System.out.println("Usage: java Kamoku 科目1 点数1 科目2 点数2 科目3 点数3 ...");
System.exit(0);
}
if ((args.length % 2) != 0) {
System.out.println("引数の数が合わないぞ(;Д;)ウワァーン");
System.exit(0);
}
scores = new String[args.length/2][2];
for (int i = 0; i < args.length; i++) {
scores[i/2][0] = args[i];
System.out.println(args[i] + "\t: " + args[++i]);
scores[i/2][1] = args[i];
sum += Integer.parseInt(args[i]);
}
String tmpSubject;
String tmpScore;
for( int j=0; j<args.length/2 - 1; j++ ) {
for( int k=0; k<args.length/2 - (1+j); k++ ) {
if( Integer.parseInt(scores[k][1]) < Integer.parseInt(scores[k+1][1]) ) {
tmpSubject = scores[k][0];
tmpScore = scores[k][1];
scores[k][0] = scores[k+1][0];
scores[k][1] = scores[k+1][1];
scores[k+1][0] = tmpSubject;
scores[k+1][1] = tmpScore;

565 :デフォルトの名無しさん:05/01/17 22:19:12
>>538
つづき
}
}
}
System.out.println( "---\nソート結果" );
for( int l=0; l<args.length/2; l++ ) {
System.out.println(scores[l][0] + "\t: " + scores[l][1]);
}
System.out.println("平均\t: " + sum / (args.length / 2));
}
}

ソートは苦手です。。

>>553
java ElectricResistance 1000
みたいな感じで実行してください。。。

566 :デフォルトの名無しさん:05/01/17 22:20:54
全角でなくとも&nbsp;って打てばいいのでは?

567 :デフォルトの名無しさん:05/01/17 22:22:56
 こんな感じ?

568 :デフォルトの名無しさん:05/01/17 22:23:44
    

569 :デフォルトの名無しさん:05/01/17 22:25:00
    いいかもしれない。
タブとかはできないのかな。

570 :デフォルトの名無しさん:05/01/17 22:27:48
>>569
やめてくれー。
Eclipseにコピペしたらこうなる。

---
&#160;&#160;&#160;&#160;いいかもしれない。
タブとかはできないのかな。
---

これじゃ置換ウザイよ。

571 :デフォルトの名無しさん:05/01/17 22:35:08
痴漢は確かにウザイな。

572 :デフォルトの名無しさん:05/01/17 23:32:11
Triangleクラスを修正して、TriangleTestクラスが正しく動くようにしましょう。
どの辺を修正すればよいのかわかりません。よろしくお願いします。

図-1 出力結果
15.2
9.100000000000001
プログラム-9
public class TriangleTest {
public static void main(String []a) {
Triangle t1=new Triangle(7.6, 5.2, 10);
Triangle t2=new Triangle(3, 4.2 , 4.9 );
t1.print();
t2.print();
}
}
プログラム-10
public class Triangle {
double ab,bc,ca;
public Triangle(double ac,double bc,double ca) {
this.ab=ab;
this.bc=bc;
this.ca=ca;
}
public void print(){
System.out.println(t1.ab+t1.bc+t1.ca);
System.out.println(t2.ab+t2.bc+t2.ca);
}
}

573 :デフォルトの名無しさん:05/01/17 23:33:14
>>524さん
>>527です。
すごく恥ずかしいのですが、
javaには便利なメソッドあるんですね。
しらんかった。
しかも、間違っても、誰からも突っ込み入らないので、
補数--2進数の場合--ビット反転してから、+1する
上記が定義らしいです。
証明する、意味不明なので、勝手に書きましたが、
まちがいですよね。
class Hosuu{
public static void main(String args[]){
int i = 0;
int ii = 0;
for(int j = 0;j<31;j++){
i = i+(int)Math.pow(2,j);
ii = ii + (~((int)Math.pow(2,j))) + 1;
System.out.println("負"+ii);
System.out.println("正"+i);
}}}
上記かきなおしました。

574 :デフォルトの名無しさん:05/01/18 00:36:22
>>572
もしやこうだったりして。
public class Triangle {
double ab,bc,ca;
public Triangle(double ab,double bc,double ca) {
this.ab=ab;      ↑
this.bc=bc;
this.ca=ca;
}

575 :デフォルトの名無しさん:05/01/18 00:58:58
>>574ご指摘のところを直してみましたが、エラーが出てしまいます。
どこが間違っているのでしょうか?

576 :デフォルトの名無しさん:05/01/18 01:07:02
>>575
public class Triangle {
double ab,bc,ca;
public Triangle(double ab,double bc,double ca) {
this.ab=ab;
this.bc=bc;
this.ca=ca;
}
public void print(){
System.out.println(ab+bc+ca);←
}
}

577 :デフォルトの名無しさん:05/01/18 01:23:38
な、なんだってー!足し算だったのかー!(AA略

578 :デフォルトの名無しさん:05/01/18 10:03:25
整数型データのためのstack型をjavaのclassを用いて書く問題です。
メンバー関数(メソッド)として、以下のものを用意すること。コンストラクタも書くこと。
public void push(int i) iの値をスタックに格納する。
public int pop()    スタックからデータを取り出すと同時に stack からそのデータは消す
お願いします。

579 :>>578.:05/01/18 12:43:43
import java.util.*;

public class Stack1
{
  private ArrayList<Integer> list = new ArrayList<Integer>();
  public void push(int i){
    list.add(0, new Integer(i));
  }
  public int pop(){
    int i = list.get(0).intValue();
    list.remove(0);
    return i;
  }
}

LinkedListの方がいいかもしれないです。

580 :>>578.:05/01/18 12:48:05
コンストラクタ付けました。。
import java.util.*;

public class Stack1
{
  private ArrayList<Integer> list;
  public void push(int i){
    list.add(0, new Integer(i));
  }
  public int pop(){
    int i = list.get(0).intValue();
    list.remove(0);
    return i;
  }
  public Stack1(){
    list = new ArrayList<Integer>();
  }
}

581 :デフォルトの名無しさん:05/01/18 13:05:25
テキストボックス(以下TB)1とTB2に数字を入力しボタンを押すと、
TB1とTB2を足した答えがTB3に出力されるプログラムを作りなさい。

よろしくお願いします。

582 :デフォルトの名無しさん:05/01/18 13:17:34
>>581
もっと情報が欲しいです、せめてAWTかSwingかアプレットかぐらいは知りたい
テキストボックスが何を指してるかわからんので計算の部分だけ
try{
int i = Integer.parseInt(TB1.getText());
int j = Integer.parseInt(TB2.getText());
TB3.setText(Integer.toString(i + j));
}catch(NumberFormatException e){
TB3.setText("NumberFormatExceptionが発生しました\n");
TB3.append("数値以外は入力しないでください");
}

583 :>>581.:05/01/18 13:18:54
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TT extends JFrame{
public TT(){
final JTextField tf0 = new JTextField();
final JTextField tf1 = new JTextField();
final JTextField tf2 = new JTextField();
JButton b = new JButton("click me");
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
tf2.setText(String.valueOf(Integer.parseInt(tf0.getText())+Integer.parseInt(tf1.getText())));
}
});
Container c = getContentPane();
c.setLayout(new GridLayout(1, 4));
c.add(tf0);
c.add(tf1);
c.add(tf2);
c.add(b);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 70);
setVisible(true);
}
public static void main(String[] args){
new TT();
}
}

584 :デフォルトの名無しさん:05/01/18 13:43:04
>>582-583
動きました。
ありがとうございました。

585 :539:05/01/18 17:03:00
どなたか>>539,540お願いします。

586 :デフォルトの名無しさん:05/01/18 17:12:32
>>539
じゃあ、やってみまーす。

587 :デフォルトの名無しさん:05/01/18 17:20:56
JTextでEnterキーを押したら入力の妥当性チェックをして
OKなら次のJTextをフォーカスする、エラーなら元のJTextを
フォーカスするのはどうしたら良いですか?


588 :デフォルトの名無しさん:05/01/18 17:27:30
>>587
if(妥当性チェック)
textField2.requestFocusInWindow();
else
textField1.requestFocusInWindow();

589 :>>539.1:05/01/18 18:06:35
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
public class If extends JFrame{
  private BufferedImage filter(BufferedImage image, Color c, int d){
    int[] ic = {c.getRed(), c.getGreen(), c.getBlue()};
    for(int x=0; x<image.getWidth(); x++){
      for(int y=0; y<image.getHeight(); y++){
        Color cc = new Color(image.getRGB(x, y));
        int[] rc = {cc.getRed(), cc.getGreen(), cc.getBlue()};
        for(int i=0; i<3; i++){
          if(rc[i] >= ic[i]) rc[i]+=d;
          else rc[i]-=d;
          if(rc[i] < 0) rc[i]=0;
          else if(rc[i] > 255) rc[i]=255;
        }
        image.setRGB(x, y, new Color(rc[0], rc[1], rc[2]).getRGB());
      }
    }
    return image;
  }
  public If(){
    final JLabel l = new JLabel();
    final JTextField tf = new JTextField("5");
    JButton b = new JButton("load");

590 :>>539.2:05/01/18 18:07:06
    b.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        File f;
        JFileChooser fc = new JFileChooser("/");
        if(fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) f = fc.getSelectedFile();
        else return;
        Color c = JColorChooser.showDialog(null, "色を指定してください。", Color.BLACK);
        try{
          l.setIcon(new ImageIcon(filter(ImageIO.read(f), c, Integer.parseInt(tf.getText()))));
        }
        catch(IOException ex){
        }
      }
    });
    JPanel p = new JPanel();
    p.setLayout(new GridLayout(1, 2));
    p.add(tf);
    p.add(b);
    Container c = getContentPane();
    c.setLayout(new BorderLayout());
    c.add(new JScrollPane(l), BorderLayout.CENTER);
    c.add(p, BorderLayout.SOUTH);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(400, 400);
    setVisible(true);
  }
  public static void main(String[] args){
    new If();
  }
}

591 :デフォルトの名無しさん:05/01/18 18:09:25
>>539
アプレットじゃ読めないのでプログラムにしました。
また、RGB値を指定する方法もはっきりしないのでJColorChooserを使うことにしました。

592 :539:05/01/18 18:19:38
>>589->>591
ありがとうございます!
曖昧ですみません。RGB値を指定する方法は
<param name ="rr" value = "120">
<param name ="gg" value = "120">
<param name ="bb" value = "120">
という感じで指定したいのですが、それもお願いできないでしょうか?
書き換える部分だけで構いませんので。

593 :デフォルトの名無しさん:05/01/18 19:00:40
>>592
たぶん>>539>>592で与えてくれた情報で要件がはっきりしたと思うけど
念のためhtml部分のコードを全部載っけてくれるとありがたい。

594 :539:05/01/18 19:05:08
>>591
>アプレットじゃ読めないのでプログラムにしました。

とは、アプレットで>>592のように読み込んだ値を
使うことが出来ないということですか?

595 :539:05/01/18 19:10:05
連投すみません。
>>593
>>589,590を使用する場合、こんな感じです。
<html><head></head><body>
<applet code = "If.class">
<param name ="rr" value = "120">
<param name ="gg" value = "120">
<param name ="bb" value = "120">
</applet></body></html>

596 :デフォルトの名無しさん:05/01/18 20:39:55
>>594
そのままだとSecurityExceptionが発生してディスクアクセスできないんですが、
アプレットにしましょうか。

597 :デフォルトの名無しさん:05/01/18 20:43:29
以下のインターフェース figure
を継承して「ひし形を」表すdiamond
クラスを定義する問題です。
ただし、コンストラクタは、必ず定義すること。なお、ひし形
は、中心の座標(x,y)、高さ(v)、幅(h)であたえること。直線
を描く Graphics クラスのメソッドは、drawLine(x1,y1,x2,y2)
である。これは、(x1,y2)から(x2,y2)に直線を描く。
interface figure {
  public void move(int dx, int dy);
  public void moveTo(int newX, int newY);
  public void draw(Graphics g);
}

インターフェース figure とインターフェース colorable を
継承して、色を指定できるひし形を表す ColoredDiamond クラ
スを定義せする問題です。

interface colorable {
  public void setColor(Color c);
  public color getColor();
}
二問ともお願いします

598 :デフォルトの名無しさん:05/01/18 21:01:23
>>597
// diamond.java
import java.awt.Graphics;
public class diamond implements figure {
int x, y, v, h;
public diamond( int x, int y, int v, int h ) {
this.x = x;
this.y = y;
this.v = v;
this.h = h;
}
public void move(int dx, int dy) {
x += dx;
y += dy;
}
public void moveTo(int newX, int newY) {
x = newX;
y = newY;
}
public void draw(Graphics g) {
g.drawLine( x, y-v/2, x+h/2, y );
g.drawLine( x+h/2, y , x, y+v/2);
g.drawLine( x, y+v/2, x-h/2, y );
g.drawLine( x-h/2, y, x, y-v/2 );
}
}

599 :539:05/01/18 21:02:36
>>596
お願いします。

600 :デフォルトの名無しさん:05/01/18 21:02:40
>>597
// ColoredDiamond.java
import java.awt.*;
public class ColoredDiamond implements figure, colorable {
int x, y, v, h;
Color c;
public ColoredDiamond( int x, int y, int v, int h, Color c ) {
this.x = x;
this.y = y;
this.v = v;
this.h = h;
}
public void move(int dx, int dy) {
x += dx;
y += dy;
}
public void moveTo(int newX, int newY) {
x = newX;
y = newY;
}
public void draw(Graphics g) {
g.drawLine( x, y-v/2, x+h/2, y );
g.drawLine( x+h/2, y , x, y+v/2);
g.drawLine( x, y+v/2, x-h/2, y );
g.drawLine( x-h/2, y, x, y-v/2 );
}
public void setColor(Color c) { this.c = c; }
public Color getColor() { return c; }
}

仕様がアヤシイところあるし実装を継承とか言ってるけど大丈夫なのか?

601 :>>539.1:05/01/18 21:17:47
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
public class If extends JApplet{
  private BufferedImage filter(BufferedImage image, Color c, int d){
    int[] ic = {c.getRed(), c.getGreen(), c.getBlue()};
    for(int x=0; x<image.getWidth(); x++){
      for(int y=0; y<image.getHeight(); y++){
        Color cc = new Color(image.getRGB(x, y));
        int[] rc = {cc.getRed(), cc.getGreen(), cc.getBlue()};
        for(int i=0; i<3; i++){
          if(rc[i] >= ic[i]) rc[i]+=d;
          else rc[i]-=d;
          if(rc[i] < 0) rc[i]=0;
          else if(rc[i] > 255) rc[i]=255;
        }
        image.setRGB(x, y, new Color(rc[0], rc[1], rc[2]).getRGB());
      }
    }
    return image;
  }

602 :>>539.2:05/01/18 21:18:23
  public init(){
    final Color c = new Color(Integer.parseInt(getParamater("rr")), Integer.parseInt(getParameter("gg")), Integer.parseInt(getParameter("bb")));
    final JLabel l = new JLabel();
    final JTextField tf = new JTextField("5");
    JButton b = new JButton("load");
    b.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        File f;
        JFileChooser fc = new JFileChooser("/");
        if(fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) f = fc.getSelectedFile();
        else return;
        try{
          l.setIcon(new ImageIcon(filter(ImageIO.read(f), c, Integer.parseInt(tf.getText()))));
        }
        catch(IOException ex){
        }
      }
    });
    JPanel p = new JPanel();
    p.setLayout(new GridLayout(1, 2));
    p.add(tf);
    p.add(b);
    setLayout(new BorderLayout());
    add(new JScrollPane(l), BorderLayout.CENTER);
    add(p, BorderLayout.SOUTH);
  }
}
動作確認はしてません。

603 :デフォルトの名無しさん:05/01/18 21:20:32
>>602
init()に戻り値なくない?
×public init(){
○public void init(){
でしょう。

604 :デフォルトの名無しさん:05/01/18 21:37:10
>>603
コンストラクタを書き換えたので..orz

605 :539:05/01/18 21:59:27
>>601-604
ありがとうございます!
voidを入れてコンパイルはできたのですが、実行すると
start:アプレットは初期化されていません
と表示され。終了すると
java.lang.Error: Do not use If.setLayout() use If.getContentPane().setLayout() instead
at javax.swing.JApplet.createRootPaneException(JApplet.java:203)
at javax.swing.JApplet.setLayout(JApplet.java:264)
at If.init(If.java:47)
at sun.applet.AppletPanel.run(AppletPanel.java:353)
at java.lang.Thread.run(Thread.java:534)
java.lang.Error: Do not use If.setLayout() use If.getContentPane().setLayout() instead
at javax.swing.JApplet.createRootPaneException(JApplet.java:203)
at javax.swing.JApplet.setLayout(JApplet.java:264)
at If.init(If.java:47)
at sun.applet.AppletPanel.run(AppletPanel.java:353)
at java.lang.Thread.run(Thread.java:534)
と表示されます。使ったhtmlは以下の通りです
<html><head></head><body>
<applet code = "If.class"width = 800height = 600>
<param name ="rr" value = "120">
<param name ="gg" value = "120">
<param name ="bb" value = "120">
</applet></body></html>
どうしたらいいのでしょうか。

606 :デフォルトの名無しさん:05/01/18 22:42:32
>>605
VMのバージョンが古いのかもしれません。
以下のように書き換えてください。
setLayout(new BorderLayout());
add(new JScrollPane(l), BorderLayout.CENTER);
add(p, BorderLayout.SOUTH);

Container c = getContentPane();
c.setLayout(new BorderLayout());
c.add(new JScrollPane(l), BorderLayout.CENTER);
c.add(p, BorderLayout.SOUTH);

607 :デフォルトの名無しさん:05/01/18 22:43:50
コンパイラか。

608 :デフォルトの名無しさん:05/01/18 22:49:36
いや、ライブラリか。
こういう時はJREと言うべきなのか。

609 :デフォルトの名無しさん:05/01/19 03:49:23
まずソケットの接続を6000番で待ち受けをする。
クライアントが接続してきたら、squidのログファイルを読み取る。
読み取り後、ログファイルが更新される都度、更新された部分を読み取り、
IPアドレスの部分だけ(カンマは不要)をクライアントに送信する。
送信の際、IPアドレスの数字を一字ずつ送信する。
接続はクライアント側が切断するまで切らなくてよい。

というものです。とにかくプロキシサーバーのアクセスログ(IPアドレスのみ)を
更新される度にリアルタイムにクライアントに送信できればよいみたいです。
丸投げですが、断片的なものでも構いませんのでよろしくお願いします。

610 :デフォルトの名無しさん:05/01/19 10:01:07
バグだらけとはいえ、お礼も動作報告もないやつばかりだな。

611 :デフォルトの名無しさん:05/01/19 11:29:40
問題をやってもらえれば、もう用済みだからね。
200行以上の回答プログラムが来ても
そのまま音沙汰無しってケースは幾らでもある。
このスレの回答者には馬車馬の如く働いてもらいたい。
その間に俺たちは他の勉強をしてるから。

612 :デフォルトの名無しさん:05/01/19 11:38:33
×その間に俺たちは他の勉強をしてるから。
○その間に俺たちは飲みながら麻雀やってるから。

613 :539:05/01/19 11:55:30
>>606
cがinitで定義されていると言われたのでctとしたら動きましたが
loadボタンを押すと次のようなエラーが表示されました。
java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:269)
at java.security.AccessController.checkPermission(AccessController.java:401)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:524)
at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1276)
at java.lang.System.getProperty(System.java:573)
at java.io.Win32FileSystem.getUserPath(Win32FileSystem.java:272)
at java.io.Win32FileSystem.resolve(Win32FileSystem.java:288)
at java.io.File.getAbsolutePath(File.java:459)


614 :539:05/01/19 11:56:25
at sun.awt.shell.Win32ShellFolder2.<init>(Win32ShellFolder2.java:191)
at sun.awt.shell.Win32ShellFolder2.listFiles(Win32ShellFolder2.java:504)
at sun.awt.shell.ShellFolder.listFiles(ShellFolder.java:115)
at sun.awt.shell.Win32ShellFolderManager2.get(Win32ShellFolderManager2.java:194)
at sun.awt.shell.ShellFolder.get(ShellFolder.java:245)
at javax.swing.plaf.metal.MetalFileChooserUI.updateUseShellFolder(MetalFileChooserUI.java:414)
at javax.swing.plaf.metal.MetalFileChooserUI.installComponents(MetalFileChooserUI.java:304)
at javax.swing.plaf.basic.BasicFileChooserUI.installUI(BasicFileChooserUI.java:130)
at javax.swing.plaf.metal.MetalFileChooserUI.installUI(MetalFileChooserUI.java:152)
at javax.swing.JComponent.setUI(JComponent.java:449)
at javax.swing.JFileChooser.updateUI(JFileChooser.java:1701)
at javax.swing.JFileChooser.setup(JFileChooser.java:345)
at javax.swing.JFileChooser.<init>(JFileChooser.java:329)
at javax.swing.JFileChooser.<init>(JFileChooser.java:288)
at If$1.actionPerformed(If.java:34)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)

615 :539:05/01/19 11:57:38
at java.awt.Component.processMouseEvent(Component.java:5100)
at java.awt.Component.processEvent(Component.java:4897)
at java.awt.Container.processEvent(Container.java:1569)
at java.awt.Component.dispatchEventImpl(Component.java:3615)
at java.awt.Container.dispatchEventImpl(Container.java:1627)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
at java.awt.Container.dispatchEventImpl(Container.java:1613)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)

616 :デフォルトの名無しさん:05/01/19 12:56:16
>>539
>>596

617 :デフォルトの名無しさん:05/01/19 13:02:48
>>611-612
これからは致命的なバグを織りまぜることにするのじゃば。

618 :539:05/01/19 15:36:42
>>616
このことだったんですね。
色々と教えていただき皆さんありがとうございました。

619 :>>609.1:05/01/19 18:23:50
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.regex.*;
public class Logc extends Thread{
  private File log = new File("/var/log/squid/access.log");
  private int lastIndex = 0;
  private int port = 6000;
  private int update = 1000;
  private String read(File f, int i){
    try{
      RandomAccessFile raf = new RandomAccessFile(f, "r");
      raf.seek(i);
      byte[] b = new byte[(int)f.length()-i];
      raf.read(b);
      raf.close();
      return new String(b);
    }
    catch(IOException ex){ ex.printStackTrace(); return null;}
  }
  private int[] cip(){
    if(log.length() <= lastIndex) lastIndex = 0;
    Matcher m = Pattern.compile("([0-2]?[0-9]{1,2}\\.){3}[0-2]?[0-9]{1,2}").matcher(read(log, lastIndex));
    lastIndex = (int)log.length();
    Pattern p = Pattern.compile("\\.");
    ArrayList<Integer> list = new ArrayList<Integer>();
    while(m.find()){ String[] s = p.split(m.group()); for(int i=0; i<4; i++) list.add(Integer.valueOf(s[i]));}
    int[] ip = new int[list.size()];
    for(int i=0; i<list.size(); i++) ip[i] = list.get(i).intValue();
    return ip;
  }

620 :>>609.2:05/01/19 18:24:54
  private static boolean fin = true;
  public void run(){
    try{
      ServerSocket ss = new ServerSocket(port);
      Socket client = ss.accept();
      BufferedOutputStream bos = new BufferedOutputStream(client.getOutputStream());
      while(fin && !client.isClosed()){
        int[] ip = cip();
        for(int i=0; i<ip.length; i++) bos.write(ip[i]);
        bos.flush();
        long cl = log.lastModified();
        while(fin && cl==log.lastModified()){
          try{
            Thread.sleep(update);
          }
          catch(InterruptedException ex){
          }
        }
      }
      client.close();
      ss.close();
    }
    catch(IOException ex){
      ex.printStackTrace();
    }
  }
  public static void main(String[] args)throws IOException{
    new Logc().start();
    System.in.read();
    fin = false;
  }
}

621 :デフォルトの名無しさん:05/01/19 18:34:00
>>617
ではないけどまともに動かなそうな気がする。。

622 :609:05/01/19 22:10:12
>>619
ありがとうございます。すごい早いですね。本当に助かります。
まだうまくコンパイルできないですが、なんとかやってみます。

623 :デフォルトの名無しさん:05/01/19 22:29:32
>>609
インデントが全角スペースで入ってるからかな。

624 :デフォルトの名無しさん:05/01/19 22:53:26
すいません、丸投げです
ちょっと長くなったので別にページ作りました
よろしくお願いします

http://f29.aaa.livedoor.jp/~tindalos/txt.html


625 :デフォルトの名無しさん:05/01/19 23:18:59
問題
点数に応じた成績を表示するプログラムを作成する
for文を用いて0点から順に10ずつ増分しながら,
if文中で点数に対応する表示。
使用変数
score 点数の合計
i ループカウンタ

90点以上 優
90点未満 良
70点未満 可
50点未満 不可


よろしくお願いします

626 :609:05/01/19 23:24:56
>>623
正にそれでエラーが100個くらいでましたorz
それはすぐに直したんですが、26行目の
ArrayList<Integer> list = new ArrayList<Integer>();
でエラーが出てしまって苦戦中です。
macのXcodeでやってるんですが、それによると
「'('または'{がありません。」って出てしまいます。'

627 :デフォルトの名無しさん:05/01/19 23:34:52
丸投げですいませんが、よろしくお願いします
問題は電卓アプレットで条件が以下のとおりです
入力の為に2つのテキストフィールドがあること。
出力のために1つのテキストフィールドがあること。
加減乗除のそれぞれに対応する4個のボタンがあること。
起動時には、入力用のテキストフィールドの片方に自分の名前、 もう一つに学籍番号が表示されていること
どうかよろしくお願いしますorz

628 :デフォルトの名無しさん:05/01/19 23:46:56
>>625
意味がわからぬ。
>>626
JDKのバージョンが1.4.xでGenericsに対応してないとか。

629 :デフォルトの名無しさん:05/01/19 23:55:35
eclipseか?

630 :デフォルトの名無しさん:05/01/20 00:08:52
どの導火線を切りますか?
1.赤
2.青
3.白
番号を入力してください:

入力した数字のレス
1.タイマーは早くなった
2.タイマーは青くなった
3.タイマーは止まった

1,2,3以外ではそこでストップ、質問は一回で終る

お願いします

631 :デフォルトの名無しさん:05/01/20 00:35:48
問題

点数に応じた成績を表示するプログラムを作成する
for文を用いて0点から順に10ずつ増分しながら,
if文中で点数に対応する表示。

使用変数

score 点数の合計
i ループカウンタ

90点以上 優
90点未満 良
70点未満 可
50点未満 不可

実行例

score:10 不可
score:20 不可
score:30 不可
score:40 不可
score:50 可
score:60 可
score:70 良
score:80 良
score:90 優
score:100 優

お願いします

632 :609:05/01/20 00:43:48
>>628
Java 1.4.2 Plugin Settingsっていうファイルがあったのでバージョン.1.42でした。
java1.5をインストールする必要なんでしょうか。
実際にjavaを動かす環境はLinuxだと思うんですが、サーバーの一部を間借りして
動かすのでjavaのバージョンをあげてもらう事ができなそうです。
どうにかjava1.4xで動かしたいのですが何とかならないでしょうか?
お願いばかりしてすいません。よろしくお願いします。


633 :609:05/01/20 00:59:52
(誤)java1.5をインストールする必要なんでしょうか。
(正)java1.5のインストールが必要なんでしょうか。

とりあえずjava1.5インストールしようと思ったらMacOSXは未対応でしたorz

634 :デフォルトの名無しさん:05/01/20 03:27:47
ソースを1.4用に書き直せばいいじゃん

635 :デフォルトの名無しさん:05/01/20 03:32:54
ゴメン、できないから聞いてるんだよな

636 :609:05/01/20 04:09:17
エェ.....スイマセン
なんとか自己解決しようと思ってやってるんですが、いまだに・・・

637 :デフォルトの名無しさん:05/01/20 05:30:12
>>631 ほい。
class Score {
public static void main(String args[]) {
int score=10;

for(int i=0; i<10; i++) {
if(score <50) System.out.println("score :"+ score + ":不可");
else if(score <70) System.out.println("score :" +score + ":可");
else if(score <90) System.out.println("score :" +score + ":良");
else System.out.println("score :" +score + ":優");

score += 10;
}
}
}


638 :デフォルトの名無しさん:05/01/20 05:44:55
>>630 ほい
import java.io.*;
class Dokasen {
public static void main(String args[]) {
int number=0;
System.out.println("どの導火線を切りますか?");
System.out.println("1.赤2.青3.白");
System.out.println("番号を入力してください:");
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
number = Integer.parseInt(br.readLine());
} catch(IOException e){
System.out.println("ドカーン");
System.exit(1);
}

if(number == 1) System.out.println("1.タイマーは早くなった");
else if(number == 2) System.out.println("2.タイマーは青くなった");
else if(number == 3) System.out.println("3.タイマーは止まった");
else System.out.println("ドカーン");
}
}


639 :デフォルトの名無しさん:05/01/20 06:33:20
>>625
点数はどこから読み込むの?

640 :デフォルトの名無しさん:05/01/20 06:57:49
>>624 問題1
import java.io.*;

public class Grep{
  public static void main(String args[]){
    int length = args.length;
    if(length < 2){
      System.out.println("引数が少なすぎます");
      System.exit(0);
    }

    String find = args[0];
    String line;
    File file;
    BufferedReader br = null;

    for(int i = 1; i < length; i++){
      file = new File(args[i]);
      if(!file.exists()){
        System.out.print(file.getAbsolutePath());
        System.out.println("が見つかりません");
        continue;
      }

      if(!file.canRead()){
        System.out.print(file.getAbsolutePath());
        System.out.println("を読み込めません");
        continue;
      }

      try{
        br = new BufferedReader(new FileReader(file));

641 :デフォルトの名無しさん:05/01/20 06:59:10
>>624 問題1続き

        while((line = br.readLine()) != null)
          if(line.indexOf(find) > -1)
            System.out.println(args[i] + ":" + line);

        br.close();
      }catch(IOException ioe){
        System.out.print(args[i]);
        System.out.println("の読み込み中にIOExceptionが発生しました");

        try{
          if(br != null) br.close();
        }catch(IOException ie){
          ie.printStackTrace();
        }
      }

      System.out.println();
    }
  }
}

642 :640:05/01/20 07:01:13
>>624
学校に行く時間になってしまったから問題1だけです

643 :624:05/01/20 08:09:17
>>640-641
ありがとう
凄く助かります

644 :デフォルトの名無しさん:05/01/20 08:33:18
>>624 ほい、問題2
import java.io.*;
class Sort {
public static void main(String args[]) {
int array[] = new int[args.length];
for(int i=0; i<array.length; i++)
array[i] = Integer.parseInt(args[i]);
int tmp;
for(int i=0; i<array.length; i++)
for(int j=i+1; j<array.length; j++)
if(array[i] > array[j]) {
tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
for(int i=0; i<array.length; i++) System.out.println(array[i]);
}
}

645 :デフォルトの名無しさん:05/01/20 09:43:54
>>624
問題3
public class sort2{
public static void main(String args[]){
String array[] = args;
int sort[] = new int[args.length];

for(int i = 0; i < array.length; i++){
sort[i] = array[i].length();
}

for(int i = 0; i < array.length; i++){
for(int j = 0; j < array.length; j++){
if(sort[i] < sort[j]){
int temp = sort[i];
sort[i] = sort[j];
sort[j] = temp;
String str = array[i];
array[i] = array[j];
array[j] = str;
}
}
}

for(int i = 0; i < array.length; i++)
System.out.println(array[i]);
}
}

646 :609:05/01/20 10:43:26
java1.4xでも動かせるように619-620を書き換えてもらえませんか。
今の私にはどうにも解決できなそうです。よろしくお願いします。

647 :デフォルトの名無しさん:05/01/20 11:17:31
>>632
本当に宿題なのか?
>>646
26行目から29行目を以下のように書き換え。
    ArrayList list = new ArrayList();
    while(m.find()){
      String[] s = p.split(m.group());
      for(int i=0; i<4; i++) list.add(Integer.valueOf(s[i]));
    }
    int[] ip = new int[list.size()];
    for(int i=0; i<list.size(); i++) ip[i] = ((Integer)list.get(i)).intValue();

648 :609:05/01/20 11:44:14
>>647
無事コンパイルできました。
宿題というか自分だけの追加課題みたいな.....救済措置です。
本当に助かりました。ありがとうございました。

649 :デフォルトの名無しさん:05/01/20 11:50:49
>>648
動くかどうかは知らないよ。

650 :デフォルトの名無しさん:05/01/20 11:53:11
>>644のimport java.io.*;は今まで答えてきた問題の残骸か?

651 :デフォルトの名無しさん:05/01/20 13:22:57
>>638
ありがとうござい

652 :デフォルトの名無しさん:05/01/20 14:06:50
JTextFieldで入力文字数の制限と入力文字種の制限(数字のみ、英数字のみ、半角カナのみ)を
するにはどうするのでしょうか?


653 :デフォルトの名無しさん:05/01/20 14:41:10
宿題が出されました。期限は23日までで、さっぱりわかりません。
誰か助けてください。

「チャットシステム」
以下の要件を満たすことを条件とする。
・クライアント、サーバシステムで構築する。
・クライアントは以下の機能を備える。
・標準入力から入力を読み込む
・標準入力に"ハンドルネーム メッセージ"の形式で入力
 された文字列を読み、それぞれの情報を受け取る。
・何も入力せずに"Enter"だけを入力された場合には、
             チャットログ(チャットの様子)の表示(更新)要求と
             判断する。
(サーバと通信してチャットログを入手する必要がある。)
・クライアント起動時に最新のチャットログを表示する。
・サーバは、クライアントからの要求にしたがい、送られたメッ
 セージを「ログファイル」に追加したり、「ログファイル」から
 読み込んだチャットログをクライアントに送り返したりする。
・クライアント、サーバのメインクラス名は"ChatClient",
"ChatServer"とする。
・コメントに後述の「プログラム提出方法」に記された事項を記す


654 :653:05/01/20 14:41:57
04/01/10の週のBBSに、サーバのプログラム(ChatServer.java)を掲載した。
これをダウンロード・コンパイルして利用し、これとあわせて動作するク
ライアントを開発すること。
このサーバプログラムは以下の要領で動作する。
・ソケットを使ってクライアントとのデータ送受信を行う。
・入力ストリーム、出力ストリームの両方を用いる。
・クライアントからメッセージを読み込む。メッセージの形式は、
 「メッセージタイプ,ハンドルネーム,メッセージ(チャット
  のメッセージ),」の形になっており、これを解析して、
 メッセージタイプの内容によって処理を変える。
・メッセージタイプが"append"である時、ログファイルに
 「ハンドルネーム,メッセージ(チャットのメッセージ),」を
 追加する。
・ログファイルを読み込んでその内容をクライアントに送る。
・ログファイルの名前は"chat.log"とする。

655 :653:05/01/20 14:44:07
import java.net.*;
import java.io.*;
import java.util.*;

public class ChatServer {
public static void main(String args[]){
BufferedReader br;
BufferedWriter bw;
String logFileName = "chat.log";
ServerSocket ss = null;
Socket s;
InputStream sin;
DataInputStream dis;
OutputStream sout;
DataOutputStream dos;

//Make connection with client.
try{
ss = new ServerSocket(5432);
}catch(IOException e){
}


656 :653:05/01/20 14:45:15
while(true){
try{
s = ss.accept();
sin = s.getInputStream();
dis = new DataInputStream(sin);
sout = s.getOutputStream();
dos = new DataOutputStream(sout);
          //Read message from client.
String mes = new String(dis.readUTF());
System.out.println(mes);
StringTokenizer st = new StringTokenizer(mes,",");
String mes_type = st.nextToken();
if(mes_type.equals("append")){
String handle = st.nextToken();
String message = st.nextToken();
String new_message = handle + " : " + message + "\n";
try{
bw = new BufferedWriter (new FileWriter(logFileName,true));
bw.write(new_message);
bw.close();
}catch (FileNotFoundException e){
System.out.println("Error: open file:");
System.out.println(e);
e.printStackTrace();
System.exit(1);
}catch (IOException e){
System.out.println("Error: writing file:");
System.out.println(e);
e.printStackTrace();
System.exit(1);
}
}

657 :653:05/01/20 14:47:14
//Open log file, read log and send to client.
try{
String log = "";
br = new BufferedReader(new FileReader(logFileName));
String line;
while((line = br.readLine()) != null){
log += line + "\n";
}
br.close();
dos.writeUTF(log);
}catch (FileNotFoundException e){
System.out.println("Error: open file:");
System.out.println(e);
e.printStackTrace();
System.exit(1);
}catch (IOException e){
System.out.println("Error: reading file:");
System.out.println(e);
e.printStackTrace();
System.exit(1);
}

658 :653:05/01/20 14:47:59
dos.flush();
dos.close();
sout.close();
dis.close();
sin.close();
s.close();
}catch(IOException e){
System.out.println("Error: cannot read message:");
System.out.println(e);
e.printStackTrace();
System.exit(1);
}
}
}
}
よろしくお願いします。

659 :653:05/01/20 14:49:25
追加で

以下をコメントとして記述
・実行方法… コンパイル後の実行方法を簡潔に記すこと。
・プログラムの特徴 … プログラム開発上工夫したことがあれば
記すこと。
・使用上の注意 … 何か注意を促すべきことがあれば記すこと。


660 :デフォルトの名無しさん:05/01/20 16:33:06
問題
クライアントからサーバに対して最初にファイル名を送信すると、
サーバからクライアントに対してそのファイル名が送られるように拡張する。
動画関係なのですが、送受信のところは問題ありません。

丸投げになってしまいますがこの問題をお願いします
プログラムの枠組みは以下に。


// AnimClient.java
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;

class AnimClient{
public static void main(String[] args){
AppFrame3 f = new AppFrame3(args[0]);
f.setSize(640,480);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}});
f.show();
}
}


661 :660:05/01/20 16:33:53
class AppFrame3 extends Frame {
ImageSocket imgsock;
AppFrame3(String hostname){
imgsock = new ImageSocket(hostname);
}
public void update(Graphics g){
paint(g);
}
public void paint(Graphics g){
Image img = imgsock.loadNextFrame();
if(img != null){
g.drawImage(img, 10, 50, 480, 360, this);
repaint(1);
}
}
}

class ImageSocket{
BufferedInputStream biStream;
BufferedImage bImage;
byte buf[];
int port = 8000;
ImageSocket(String hostname){
buf = new byte[160*120];
bImage = new BufferedImage(160, 120, BufferedImage.TYPE_BYTE_GRAY);
try{
Socket s = new Socket(hostname, port);
InputStream is = s.getInputStream();
biStream = new BufferedInputStream(is);
}


662 :660:05/01/20 16:34:52
catch(Exception e){
System.err.println("Exception : " + e);
}
}
Image loadNextFrame(){
try{
int b = 0;
while(b < 160*120){
b += biStream.read(buf, b, 160*120 - b);
System.out.println("b = " +b);
}
int x, y, pixel;
for(y = 0; y < 120; y++){
for(x = 0; x < 160; x++){
pixel = (int)buf[y * 160 + x] *2 ;
if(pixel < 0){
biStream.close();
System.out.println("Done.");
return null;
}
pixel = new Color(pixel,pixel,pixel).getRGB();
bImage.setRGB(x, y, pixel);
}
}
}
catch(Exception e){
System.err.println("Exception : " + e);
}
return bImage;
}
}


663 :660:05/01/20 16:36:13
//AnimServer.java

import java.io.*;
import java.net.*;
import java.util.*;

public class AnimServer {
public static void main(String[] args){
try{
byte buf[] = new byte[160*120];
int i;
BufferedInputStream biStream;
int port = 8000; // ポートは8000
// サーバソケットの作成
ServerSocket ss = new ServerSocket(port);
System.out.println("Running...");

while(true){
String log;
Socket s = ss.accept();
biStream=new BufferedInputStream(
new FileInputStream("hoge.raw"));
DataOutputStream dos=new DataOutputStream(s.getOutputStream());




664 :660:05/01/20 16:37:25
while(true){
biStream.read(buf, 0, 160*120);
dos.write(buf, 0, 160*120);
if(buf[0] < 0) break;
}
s.close();
}
}
catch(Exception e){
System.out.println("Exception : " + e);
}
}
}



>>660-662がクライアント部で
>>663-664がサーバ部です
どうかお願いします

665 :624:05/01/20 18:55:32
>>644-645
ありがとうございました
これで提出できそうです

666 :>>653 その1:05/01/20 20:13:09
import java.io.*;
import java.net.*;
public class ChatClient {
public static void main(String[] args) {
Socket sc = null;
try {
sc = new Socket(InetAddress.getByName("localhost"), 5432);
DataInputStream in = new DataInputStream(sc.getInputStream());
DataOutputStream out = new DataOutputStream(sc.getOutputStream());
out.writeUTF("read");
String text = in.readUTF();
System.out.println("チャットログ\n" + text);
in.close(); out.close(); sc.close();
loop: while (true) {
sc = new Socket(InetAddress.getByName("localhost"), 5455);
in = new DataInputStream(sc.getInputStream());
out = new DataOutputStream(sc.getOutputStream());
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
String msg;

667 ::>>653 その2:05/01/20 20:15:53
while (true) {
System.out.print("メッセージの入力:");
msg = r.readLine();
if (msg.length() == 0) {
msg = "read";
break;
}
if (msg.equalsIgnoreCase("exit"))
break loop;
String[] token = msg.split(" ", 2);
if (token.length == 2) {
msg = "append," + token[0] + "," + token[1];
break;
}
System.out.println("「name message」の形式になってません");
}
out.writeUTF(msg);
text = in.readUTF();
System.out.println("チャットログ\n" + text);
in.close(); out.close(); sc.close();
}
} catch (Exception e) {
System.out.println("エラー発生 終了");
} finally {
try {
sc.close();
} catch (IOException e1) { }
}
System.out.println("終了");
}
}


668 :>>627 その1:05/01/20 20:51:11
import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class HW67 extends JApplet {
static final String NAME = "田中";
static final String NUMBER = "12345";
JTextField tfd1 = new JTextField(10), tfd2 = new JTextField(10),
tfd3 = new JTextField(10);
JButton btn1 = new JButton("+"), btn2 = new JButton("−"),
btn3 = new JButton("×"), btn4 = new JButton("÷"),
btn5 = new JButton("クリア");
ActionListener action = new ActionListener() {
public void actionPerformed(ActionEvent e) {
int num1 = 0, num2 = 0;
try {
num1 = Integer.parseInt(tfd1.getText());
num2 = Integer.parseInt(tfd2.getText());
} catch (NumberFormatException e1) {
tfd3.setText("数値が不正");
return;
}
switch (((JButton) e.getSource()).getText().charAt(0)) {
case '+':
tfd3.setText("" + (num1 + num2)); break;
case '−':
tfd3.setText("" + (num1 - num2)); break;
case '×':
tfd3.setText("" + (num1 * num2)); break;
case '÷':
tfd3.setText("" + (num1 / num2)); break;
}
}
};

669 ::>>627 その2:05/01/20 20:51:40
public void init() {
tfd1.setText(NAME);
tfd2.setText(NUMBER);
tfd3.setEditable(false);
btn1.addActionListener(action);
btn2.addActionListener(action);
btn3.addActionListener(action);
btn4.addActionListener(action);
btn5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tfd1.setText("");
tfd2.setText("");
tfd3.setText("");
}
});
JPanel pal1 = new JPanel(), pal2 = new JPanel();
pal1.add(tfd1); pal1.add(tfd2); pal1.add(tfd3);
pal2.add(btn1); pal2.add(btn2); pal2.add(btn3); pal2.add(btn4); pal2.add(btn5);
getContentPane().setLayout(new GridLayout(2, 1));
getContentPane().add(pal1);
getContentPane().add(pal2);
}
}


670 :デフォルトの名無しさん:05/01/20 21:48:09
n個の数字を入力し、大きい順に並べるプログラムを作りたいです。
よろしくお願いします。

import java.io.*;
import java.lang.*;

class sample
{
public static void main(String args[])
{
BufferedReader kbd = new BufferedReader(new InputStreamReader(System.in));

int n;

try
{
System.out.println(" n = ? " );
n = Integer.parseInt(kbd.readLine());

for(int i = 1 ; i <= n ; i++)
{
System.out.println("No."+i+" ? ");

671 :デフォルトの名無しさん:05/01/20 23:43:57
年(西暦)と月を入力して、そのつきのカレンダーを表示するプログラムを作成しなさい。
また、年(西暦)と月と日を入力してその日の曜日を表示するプログラムを作成しなさい。
変数名:year,month,week,weeks,day,days,space,i

672 :デフォルトの名無しさん:05/01/21 00:27:53
以下の問題を解きなさい。
数値を入力し、その数値の平方根をニュートン法で求めるプログラムを
書きなさい。小数点以下100桁まで表示できるようにしなさい。
不正な入力文の時はエラーメッセージを出すようにしなさい。
提出期限は22日まで。それまでに出しなさい。

673 :デフォルトの名無しさん:05/01/21 00:31:29
何故、命令されねばならんのか・・・

674 :>>670.:05/01/21 01:46:05
import java.io.*;
import java.util.*;
public class Sort{
  public static void main(String[] args)throws IOException{
    ArrayList<Integer> list = new ArrayList<Integer>();
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String s;
    while((s=br.readLine()).length() > 0) list.add(Integer.valueOf(s));
    Collections.sort(list);
    Collections.reverse(list);
    for(Integer i : list) System.out.println(i);
  }
}
API使って楽すればいいじゃないバージョン。

675 :>>672.:05/01/21 01:50:09
import java.util.*;
public class Cp{
  private static void printCalendar(Calendar c){
    Calendar c0 = new GregorianCalendar(c.get(Calendar.YEAR), c.get(Calendar.MONTH), 1);
    StringBuffer sb = new StringBuffer();
    int f = c0.get(Calendar.DAY_OF_WEEK)-1;
    for(int i=0; i<f; i++) sb.append(" ");
    Calendar c1 = (Calendar)c0.clone();
    c1.roll(Calendar.MONTH, 1);
    int length = c1.get(Calendar.DAY_OF_YEAR) - c0.get(Calendar.DAY_OF_YEAR);
    for(int d=1; d<=length; d++){
      String s = String.valueOf(d);
      if(s.length()==1) s=" "+s;
      sb.append(s+" ");
      if((f+d)%7 == 0) sb.append("\n");
    }
    System.out.println(sb);
  }
  private static void printDay(Calendar c){
    int d = c.get(Calendar.DAY_OF_WEEK);
    String s = null;
    switch(d){ case 1: s="日曜日"; break; case 2: s="月曜日"; break; case 3: s="火曜日"; break; case 4: s="水曜日"; break;
      case 5: s="木曜日"; break; case 6: s="金曜日"; break; case 7: s="土曜日"; break;}
    System.out.println(s);
  }
  public static void main(String[] args){
    if(args.length == 2)
  printCalendar(new GregorianCalendar(Integer.parseInt(args[0]), Integer.parseInt(args[1])-1, 1));
    else if(args.length == 3)
  printDay(new GregorianCalendar(Integer.parseInt(args[0]), Integer.parseInt(args[1])-1, Integer.parseInt(args[2])));
  }
}

676 :デフォルトの名無しさん:05/01/21 01:58:14
>>675
>>671
訂正。

677 :デフォルトの名無しさん:05/01/21 13:15:52
内容表示ボタンの右にクリアボタンを置く。
クリアボタンを押すと、ファイル名と内容表示の
双方に空文字列をセットする、という機能を↓に追加する。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;

class JFrame1 extends JFrame {
JTextField tf1;
JTextArea ta;

public JFrame1() {
setSize(500, 300);
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
);
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
contentPane.add(new JLabel("ファイル名"));
tf1 = new JTextField(30);
contentPane.add(tf1);
JButton bt1 = new JButton("ボタン");
bt1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String path = tf1.getText();

678 :デフォルトの名無しさん:05/01/21 13:16:48
677続き
System.out.println( path );
try {
BufferedReader br = new BufferedReader( new FileReader(path) );
String line;
StringBuffer buffer = new StringBuffer();

while( (line=br.readLine()) != null ) {
buffer.append(line + "\n");
}
ta.setText( buffer.toString() );
} catch( IOException ioe ) {
ta.setText(ioe.getMessage());
}
}
});
contentPane.add(bt1);
contentPane.add(new JLabel("結果"));
ta = new JTextArea(5, 40);
contentPane.add(ta);
}
}
public class JavaJFm3 {
public static void main(String args[]) {
JFrame app = new JFrame1();
app.show();
}
}


679 :デフォルトの名無しさん:05/01/21 13:31:32
1)3秒ごとに "***" を表示することを10回行うメソッド ThreadA3 と、
5秒ごとに "=====" を表示することを10回行うメソッド ThreadE5 を
定義し、各々を同時に起動するクラス Thread1 を Thread クラスの
拡張クラスとして作成する。

2)Runnable インターフェースを使って、同様の処理を行うクラス
Thread2 を作成する。

3)Thread3.java は Job というクラスのオブジェクトを10個作って
work というメソッドを呼び続けるシングルスレッドのプログラム
である。これをもとにマルチスレッドに書き直した プログラム
Thread4.java を作成する。
(末尾の Job クラスの定義は変更せずそのまま使うこと。)
// このプログラムは Single Thread です。
class Thread3 {
Job [ ] jobs;
public Thread3(int jobcount) {
jobs = new Job[jobcount];
for (int i = 0; i < jobcount; i++) {
jobs[i] = new Job(i);
}
}
public void workAllJobs( ) {
for (int i = 0; i < jobs.length; i++) {
jobs[i].work( );
}
}
public static void main(String[ ] args) {
Thread3 self = new Thread3(10);
while (true) {
self.workAllJobs( ); } } }


680 :デフォルトの名無しさん:05/01/21 13:32:27
679続き

class Job {
int num;
public Job(int n) {
num = n;
}
public void work( ) {
System.out.println(this + " is working.");
try {
int n = (int) (Math.random( ) * 10000);
Thread.sleep(n);
} catch (InterruptedException e) {
}
}
public String toString( ) {
return "[Job " + num + "]";
}
}


681 :デフォルトの名無しさん:05/01/21 17:20:07
CSVファイルをデータベースにして、顧客管理プログラムを作りたいんです。
画面まわりは作成したのでファイルIOのところをお願いします。

必要な機能は以下のとおりです。

1.登録、修正、削除ができること
2.検索ができること
 ・画面に表示されているレコードの1つ前のレコード取得
 ・画面に表示されているレコードの1つ後のレコード取得
 ・先頭のレコード取得
 ・最後のレコード取得
 ・指定した値のレコードを取得

CSVファイル自体は顧客コードでソートされていてもされていなくてもかまいません。
CSVファイルの項目は「顧客コード」、「名前」、「電話番号」くらいでよいです。



682 :デフォルトの名無しさん:05/01/21 19:26:54
次のプログラムを実行すると、コマンドライン引数の与え方によって例外が発生する。
ア)発生する冷害のクラスと、その場合のコマンドライン引数の条件とを三組列挙せよ。
イ)アであげたうちの特定の一つの例外クラスについて、try-catch-finally構文を
 用いて例外処理(適切なエラーメッセージの出力)を行うようソースを修正せよ。
※「第○行『○○』に修正」「○行と○行の間に『○○』を挿入」のように記述すること。

1  class ExceptionTest_1{
2  public static void main(String args[]){
3  int r = -1;
4  int i = Integer.parseInt(args[0]);
5  int test[] = {3,2,1,0};
6  r = i/test[i];
7  System.out.println(r);
8  }
9  }

よろしければお願いします。

683 :デフォルトの名無しさん:05/01/21 22:21:05
>>679-680
(1) 問題文の「メソッドThreadA3」と「メソッドThreadE5」はなんか変なので
それぞれ「スレッドThreadA3」と「スレッドThreadE5」に置き換えた。
// ThreadA3.java
public class ThreadA3 extends Thread {
public void run() {
for( int i=0; i<10; i++ ) {
System.out.print("***");
try {
Thread.sleep(3000);
} catch( InterruptedException ie ) {
ie.printStackTrace();
}}}}
// ThreadE5.java
public class ThreadE5 extends Thread {
public void run() {
for( int i=0; i<10; i++ ) {
System.out.print("=====");
try {
Thread.sleep(5000);
} catch( InterruptedException ie ) {
ie.printStackTrace();
}}}}
// Thread1.java
public class Thread1 extends Thread {
public void run() {
new ThreadA3().start();
new ThreadE5().start();
}
public static void main(String[] args) {
new Thread1().start();
}}

684 :683:05/01/21 22:23:11
>>679-680
(2) ThreadA3.javaとThreadE5.javaは(1)のソースを流用すること。
// Thread2.java
public class Thread2 implements Runnable {
public void run() {
new ThreadA3().start();
new ThreadE5().start();
}
public static void main(String[] args) {
Thread2 self = new Thread2();
new Thread(self).start();
}}

(3)
// Thread4.java
public class Thread4 implements Runnable {
Job[] jobs;
public Thread4( int jobCount ) {
jobs = new Job[jobCount];
for( int i=0; i<jobCount; i++ ) {
jobs[i] = new Job(i);
}}
public void run() {
for( int i=0; i<jobs.length; i++ ) {
jobs[i].work();
}}
public static void main(String[] args) {
Thread4 self = new Thread4(10);
while(true) {
new Thread(self).start();
}}}

685 :デフォルトの名無しさん:05/01/21 22:29:21
>>682
実行せずにコメント。
(ア)
ArrayIndexOutOfBoundsException:コマンドライン引数を与えない場合
NumberFormatException:コマンドライン引数に「abc」を与える。
ArithmeticException:コマンドライン引数に「3」を与える。
(イ)
2行と3行の間に
if( args.length == 0 ) System.exit(1);
を挿入。

686 :685:05/01/21 22:33:57
>>682のイ
try-catchなのね。。orz...
1. 3行と4行の間に
try {
を挿入。
2. 7行と8行の間
} catch (ArrayIndexOutOfBoundsException aioobe) {
System.err.println( "コマンドライン引数が与えられていません。" );
} finally {
// いらないけどつけとく。
}
を挿入。

687 :デフォルトの名無しさん:05/01/22 00:55:10
>>681
作った画面のソース提供して。
>>681の書き込みだけだと回答者は画面も作らなきゃならん。

688 :デフォルトの名無しさん:05/01/22 05:43:44
>>685>>686
ありがとうございます!
助かりました。


689 :>>681データベース  その1:05/01/22 06:48:47
>>681
全部で13レスあります。


import java.io.*;
import java.util.*;
import java.util.regex.*;
import java.lang.reflect.*;
public class Statement {
static final String[] column = { "id", "name", "tel" };
String[][] keyword, tablekeyword;
static List rowList = new ArrayList();
Map updateMap = new TreeMap();
String tablename, ordername, updatekeyname;
boolean outputFlag, deleteFlag, updateFlag;
Matcher mat;
Iterator insertIt;

690 :>>681 その2:05/01/22 06:49:46
ResultSet executeQuery(String query) throws Exception {
mat = Pattern.compile("[\\S&&[^\\(\\),;]]+|[\\(\\),;]{1}").matcher(query);
String[][] mykeyword = {
{ "select", "select" }, { "insert", "insert" },
{ "update", "update" }, { "delete", "delete" }
};
keyword = mykeyword;
loop: while(mat.find()) {
String token = mat.group();
if (token.matches(",|\\(|\\)"))
continue;
if (token.equals(";"))
break;
for (int i = 0; i < keyword.length; i++) {
if (token.matches(keyword[i][0])) {
getClass().getDeclaredMethod(keyword[i][1], new Class[0])
.invoke(this, new Object[0]);
continue loop;
}
}
throw new Exception();
}
if (outputFlag) {
outputDatabase();
return null;
} else {
return new ResultSet(rowList);
}
}

691 ::>>681 その3:05/01/22 06:50:25
void select() {
keyword = new String[][] { { "\\*", "asta" } };
}
void asta() {
keyword = new String[][] { { "from", "from" } };
}
void from() {
tablekeyword = new String[][] { { "where", "where" }, { "order", "order" } };
keyword = new String[][] { { "\\S+", "table" } };
}
void insert() {
outputFlag = true;
keyword = new String[][] { { "into", "into" } };;
}
void into() {
tablekeyword = new String[][] { { "values", "values" } };
keyword = new String[][] { { "\\S+", "table" } };
}
void values() {
Map map = new TreeMap();
for (int i = 0; i < column.length; i++)
map.put(column[i], "");
rowList.add(map);
insertIt = map.entrySet().iterator();
keyword = new String[][] { { "\\S+", "param" } };
}
void param() {
Map.Entry ent = (Map.Entry) insertIt.next();
ent.setValue(mat.group());
keyword = new String[][] { { "\\S+", "param" } };
}

692 :>>681 その4:05/01/22 06:51:14
void delete() {
outputFlag = true;
deleteFlag = true;
keyword = new String[][] { { "from", "delfrom" } };
}
void delfrom() {
tablekeyword = new String[][] { { "where", "where" } };
keyword = new String[][] { { "\\S+", "table" } };
}
void update() {
tablekeyword = new String[][] { { "set", "set" } };
outputFlag = true;
updateFlag = true;
keyword = new String[][] { { "\\S+", "table" } };
}
void set() {
keyword = new String[][] { { "\\S+", "key" } };
}
void key() {
updateMap.put(mat.group(), "");
updatekeyname = mat.group();
keyword = new String[][] { { "=", "assign" } };
}
void assign() {
keyword = new String[][] { { "\\S+", "value" } };
}
void value() {
updateMap.put(updatekeyname, mat.group());
keyword = new String[][] { { "where", "where" }, { "\\S+", "key" } };
}

693 :>>681 その5:05/01/22 06:52:02
void outputDatabase() throws Exception {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < rowList.size(); i++) {
Map map = (Map) rowList.get(i);
for (int k = 0; k < column.length; k++)
sb.append(map.get(column[k]) + ",");
}
sb.delete(sb.length() - 1, sb.length());
FileWriter w = new FileWriter(tablename);
w.write(sb.toString());
w.close();
}
void table() throws Exception {
tablename = mat.group();
BufferedReader r = new BufferedReader(new InputStreamReader(
new FileInputStream(mat.group())));
StringBuffer sb = new StringBuffer();
String line;
while ((line = r.readLine()) != null)
sb.append(line);
String[] data = sb.toString().split(",");
for (int i = 0; i + column.length <= data.length;) {
Map map = new TreeMap();
for (int k = 0; k < column.length; k++, i++)
map.put(column[k], data[i].trim());
rowList.add(map);
}
keyword = tablekeyword;
}

694 :>>681 その6:05/01/22 06:54:03
void where() throws Exception {
boolean endByOrder = false;
ExpressionParser ep = new ExpressionParser(mat);
endByOrder = ep.parse();
Expression ex = ep.getExpression();
for (int i = 0; i < rowList.size(); ) {
boolean flag = ex.toBoolean((Map) rowList.get(i));
flag ^= deleteFlag;
if (!updateFlag) {
if (!flag) rowList.remove(i);
else ++i;
} else {
if (flag) {
Iterator it = updateMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry ent = (Map.Entry) it.next();
Map map = (Map) rowList.get(i);
if (map.containsKey(ent.getKey()))
map.put(ent.getKey(), ent.getValue());
}
}
++i;
}
}
if (endByOrder) {
order();
keyword = new String[][] { { "by", "by" } };
} else {
keyword = new String[][] { { "order", "order" } };
}
}

695 :>>681 その7:05/01/22 06:54:44
void order() {
keyword = new String[][] { { "by", "by" } };
}
void by() {
keyword = new String[][] { { "\\S+", "orderclm" } };
}
void orderclm() {
ordername = mat.group();
Collections.sort(rowList, new Comparator() {
public int compare(Object arg0,Object arg1) {
return ((String) ((Map) arg0).get(ordername)).compareTo(
(String) ((Map) arg1).get(ordername));
}
});
keyword = new String[][] { { "desc", "desc" } };
}
void desc() {
Collections.sort(rowList, new Comparator() {
public int compare(Object arg0,Object arg1) {
return -(((String) ((Map) arg0).get(ordername)).compareTo(
(String) ((Map) arg1).get(ordername)));
}
});
keyword = new String[0][];
}
}

696 ::>>681 その8:05/01/22 06:56:29
class ExpressionParser {
Matcher mat;
LinkedList valueStack = new LinkedList(), exprStack = new LinkedList();
Expression expression;
ExpressionParser(Matcher mat) {
this.mat = mat;
}
boolean parse() throws Exception {
boolean endByOrder = false;
while (mat.find()) {
String token = mat.group();
if (token.matches("=|<>|>=|<=|>|<")) {
exprStack.addLast(token);
} else if (token.matches("and|or")) {
ValueExpression expr = new ValueExpression((String) valueStack.removeLast(),
(String) valueStack.removeLast(), (String) exprStack.removeLast());
valueStack.addLast(expr);
exprStack.addLast(token);
} else if (token.matches("order|;")){
endByOrder = true;
break;
} else {
valueStack.addLast(token);
}
}

697 :>>681 その9:05/01/22 06:57:12
while (!exprStack.isEmpty()) {
String token = (String) exprStack.removeLast();
if (token.matches("=|<>|>=|<=|>|<")) {
ValueExpression expr = new ValueExpression((String) valueStack.removeLast(),
(String) valueStack.removeLast(), token);
valueStack.addLast(expr);
} else {
LogicExpression expr = new LogicExpression((Expression) valueStack.removeLast(),
(Expression) valueStack.removeLast(), token);
valueStack.addLast(expr);
}
}
if (!exprStack.isEmpty() || valueStack.size() != 1)
throw new Exception();
expression = (Expression) valueStack.removeLast();
return endByOrder;
}
Expression getExpression() {
return expression;
}
}

698 :>>681 その10:05/01/22 06:59:11
interface Expression {
boolean toBoolean(Map row);
}
class LogicExpression implements Expression {
Expression val1, val2;
String expr;
LogicExpression(Expression val2, Expression val1, String expr) {
this.val1 = val1; this.val2 = val2; this.expr = expr;
}
public boolean toBoolean(Map row) {
if (expr.equals("and"))
return val1.toBoolean(row) && val2.toBoolean(row);
else
return val1.toBoolean(row) || val2.toBoolean(row);
}
}
class ValueExpression implements Expression {
String val1, val2, expr;
ValueExpression(String val2, String val1, String expr) {
this.val1 = val1; this.val2 = val2; this.expr = expr;
}
public boolean toBoolean(Map row) {
int ans = ((String) row.get(val1)).compareTo(val2);
if (expr.equals("=")) return ans == 0;
else if (expr.equals("<")) return ans == -1;
else if (expr.equals(">")) return ans == 1;
else if (expr.equals("=<")) return ans == 0 || ans == -1;
else return ans == 0 || ans == 1;
}
}

699 :>>681 その11:05/01/22 07:01:56
class ResultSet {
List rowList;
int index = 0;
ResultSet(List rowList) {
this.rowList = rowList;
}
String get(String name) {
if (rowList.isEmpty()) return null;
Map map = (Map) rowList.get(index);
return (String) map.get(name);
}
boolean next() {
if (index < rowList.size() - 1) { ++index; return true; }
else { return false; }
}
boolean previous() {
if (index > 0) { ++index; return true; }
else { return false; }
}
boolean first() {
if (!rowList.isEmpty()) { index = 0; return true; }
else { return false; }
}
boolean last() {
if (!rowList.isEmpty()) { index = rowList.size() - 1; return true; }
else { return false; }
}
}


700 :>>681データベースその1の訂正:05/01/22 07:08:17
>>681
失礼。
>>689はこっちにしてください。

import java.io.*;
import java.util.*;
import java.util.regex.*;
import java.lang.reflect.*;
public class Statement {
static final String[] column = { "id", "name", "tel" };
String[][] keyword, tablekeyword;
List rowList = new ArrayList(); //← ここのstatic指定を外す
Map updateMap = new TreeMap();
String tablename, ordername, updatekeyname;
boolean outputFlag, deleteFlag, updateFlag;
Matcher mat;
Iterator insertIt;


701 :>>681データベースの使用法 その1:05/01/22 07:49:36
上の、その1〜その11のコードを一字一句逃さずに全部コピペしてコンパイルしてください。

ここでは顧客CSVファイルの名前を database とします(拡張子なし)
コードその1のクラス変数columnに、データベースのカラムの種類が記述されてます。
(ここでは id name tel の3種類) カラムのデータ型は全て Sting 型です。
CSVファイルにはこの順番でデータを記述してます。(例 0010,suzuki,333-555-7777,・・・)

CSVファイルデータベースへのアクセスはこうします。

String query = "任意の擬似SQL文";
Statement st = new Statement();
ResultSet rs = st.executeQuery(query);
if (rs.first()) {
do {
String id = rs.get("id");
String name = rs.get("name");
String tel = rs.get("tel");
} while(rs.next());
}
擬似SQL文を書いたString変数 query をStatement#executeQuery()の引数に渡して
アクセスします。ResultSetのメソッドは first、last、next、previous、get です。
ただこのResultSetは、初めから行0(最初の行)を指しています。


702 ::>>681データベースの使用法 その2:05/01/22 07:50:24
擬似SQL文はSQL文と大体同じです。かなり構文を削ってますが。
select、insert、update、delete が使えます。以下に例を示します。

select * from database order by id desc; CSVファイルの行を全部取得してIDで逆順に並べる。
select * from database where name = tanaka; 名前がtanakaの行を取得する。
select * from database where name = suzuki order by id;
insert into database values ( 0022, satou, 999-888-7777 ); 行を挿入する。
update database set tel = 111-222-3333 where name = katou; 名前がkatouの電話番号を変える。
delete from database where id = 0033; IDが0033の行を削除する。

予約語は、select from where order by desc insert into values update set delete * です。
予約語は必ず小文字で書いてください。あとselectの次には * だけしか指定できません。
普通のSQLみたいにselectの次にカラム名は指定できません。あとorder by でdescは使えますが
ascは使えません。
テーブルの指定はCSVファイルと全く同じ名前を指定してください。(CSVファイルがdatabaseなら
テーブル指定もdatabaseとする)


703 :デフォルトの名無しさん:05/01/22 08:08:24
select * from database where name = tanaka and id = 0555;
名前がtanakaでIDが0555の行を取得する。
予約語は、
select from where order by desc insert into values update set delete *
= < > <= >= and or
でした。

704 :デフォルトの名無しさん:05/01/22 19:51:48
お願いします。

テキストファイルA(元データ)には単語の組み合わせが

aaa,bbb
ccc,bbbs
ddd,aaaff
efg,gggf
fds,fdsa

テキストファイルB(辞書)には

aaa
bbb
ccc
ddd

と入ってます。

ここでAのフィールド1とBが一致する組み合わせをAから抽出したいです。
上の例だと
aaa,bbb
ccc,bbbs
ddd,aaaff
がAから抽出されます。



705 :デフォルトの名無しさん:05/01/22 20:05:44
>>704
こんな感じでいいかな?
import java.io.*;
import java.util.*;

public class Test{
public static void main(String args[]){
BufferedReader br;
String line, tmp, data[];
HashMap map = new HashMap();

try{
br = new BufferedReader(new FileReader("テキストファイルA"));
while((line = br.readLine()) != null){
data = line.split(",");
map.put(data[0], data[1]);
}
br.close();

br = new BufferedReader(new FileReader("テキストファイルB"));
while((line = br.readLine()) != null){
tmp = (String)map.get(line);
if(tmp != null)
System.out.println(line + "," + tmp);
}
}catch(Exception e){
e.printStackTrace();
}
}
}

706 :704:05/01/22 20:17:44
>>705
ちゃんと動きました。
こんなに短い行数でできるのですね。
hashmapクラスを知らないので勉強します。
すばやい回答ありがとうございました。

707 :デフォルトの名無しさん:05/01/23 18:36:20
>>706
> hashmapクラスを知らないので勉強します。

○HashMap

大文字小文字を正確に書くくせをつけましょう。

708 :デフォルトの名無しさん:05/01/23 19:09:34
ついでに。

×HashTable
○Hashtable

なんでだろね。

709 :宿題:05/01/23 20:02:14
import java.awt.*;
import java.applet.*;

public class grp extends Applet{
public void paint(graphics gc){
gc.drawString("初期Fで線を描く",50,50);
gc.drawLine(20,50,100,100);

gc.setColor(Color.red);
gc.drawString("色を赤に変えて線を描く",350,50);

gc.setColor(Color.black);
gc.drawString("色を黒に変えて四角を描く",350,150);
gc.drawRect(350,170,80,40);

gc.crawString("最短の線を描く",350,280);
gc.drawLine(400,300,400,300);

Image gazo=getImage(getCodeBase(),"neo.gif"); //イメージオブジェクトgazouに画像データを読み込む
gc.drawString("画像ファイルを読み込み表示する",100,280);
gc.drawImage(gazou,100,300,this); //読み込んだ画像を表示
}
}

以上を参考に
・縦10,横10の正方形の中に×印を描いたものを縦に10個、横に10個の正方形型に配置。
(繰り返し処理を利用して)

・点から始めてそれを中心に同心円状に10間隔で円を10個描く。
(同じく繰り返しを利用)

710 :デフォルトの名無しさん:05/01/23 21:04:01
>>709
正方形だけ。
// SquareApplet.java
import java.applet.Applet;
import java.awt.Graphics;
public class SquareApplet extends Applet {
/** 始点x座標 */
public static final int X = 5;
/** 始点y座標 */
public static final int Y = 5;
/** 正方形の長さ */
public static final int L = 30;
/** ×印の長さの割合 */
public static final int CROSS = 3;
/** ループ回数 */
public static final int LOOP = 10;
public void paint(Graphics g) {
// Appletのサイズ設定
setSize( X*2+L*LOOP, Y*2+L*LOOP );
for( int i=0; i<LOOP; i++ ) {
for( int j=0; j<LOOP; j++ ) {
// 正方形描画
g.drawRect( X+L*i, Y+L*j, L, L );
// ×印描画
g.drawLine( X+L*i+L/2-CROSS, Y+L*j+L/2-CROSS, X+L*i+L/2+CROSS, Y+L*j+L/2+CROSS );
g.drawLine( X+L*i+L/2+CROSS, Y+L*j+L/2-CROSS, X+L*i+L/2-CROSS, Y+L*j+L/2+CROSS );
}
}
}
}

711 :デフォルトの名無しさん:05/01/23 21:30:54
円だけ
int width = 10, x = 200, y = 200;
for ( int i = 1;i<=10;i++){
g.drawOval(x-(width/2*i),y-(width/2*i),width*i,width*i);
}

712 :デフォルトの名無しさん:05/01/23 22:14:14
プログラム名 Kuku01.java

for文を二つ使用して九九表を表示させる。
左右の間隔はエスケープシーケンス\tえお使用する。
カウンタ変数はi,jとする。(無限ループに注意)

実行例

1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81

このプログラムを作成願います。
よろしくお願いします。

713 :M.B.:05/01/23 22:19:22
>>728
過去ログ見れ。しつこいくらいに書いてある。

714 :デフォルトの名無しさん:05/01/23 22:20:00
お取り込み中失礼します。

1
string pass = "ab";
if(ae.getActionCommand().equals(pass))
2
string pass = "ab";
if(ae.getActionCommand == pass)

は同じ意味ではないのでしょうか?
今プログラム作成中で、1でやると上手くいくのですが、
2に直すと、if文ではなく、elseのほうにいってしまいます。


715 :デフォルトの名無しさん:05/01/23 22:20:46
>>712
// Kuku01.java
public class Kuku01 {
public static void main(String[] args) {
for( int i=1; i<10; i++ ) {
for( int j=1; j<10; j++ ) {
System.out.print(i*j + "\t");
}
System.out.println();
}
}
}

716 :デフォルトの名無しさん:05/01/23 22:22:49
>>714
1は値比較で2はオブジェクト比較です。
今回のケースでは
「ab」という文字列かどうかを調べたい場合は1番、
passというオブジェクトかどうかを調べたい場合は2番を使います。

717 :デフォルトの名無しさん:05/01/23 22:27:23
>>716
言われてみればそういうことだったんですね。
判りやすいご回答のほう、どうもありがとうございました。
これで先に進むことができます。


718 :デフォルトの名無しさん:05/01/23 22:46:56
>>714
なんども質問すいません。
ふと疑問に思ったのですが、

2
string pass = "ab";
if(ae.getActionCommand == pass)

という部分を、

string pass = "ab";
if(ae.getActionCommand == "ab")

に訂正したら、1と同じ意味にはならないのでしょうか?
ae.getActionCommandの戻り値の型は、Stringで、
"ab"もStringなので、==で比較して、ae.getActionCommand
の内容が、"ab"ならif文には進まないのでしょうか?


719 :デフォルトの名無しさん:05/01/23 23:03:29
String クラスの場合は、特別なのでしょうね。
"aa"これですでに、ひとつのオブジェクトができているということです。
よって、aeとは違うオブジェクトですね。


720 :デフォルトの名無しさん:05/01/23 23:09:27
>>719
Stringクラスで生成されたオブジェクトの中身の文字や値は、
==で比較せずに、Stringクラスの、equals()で比較しなければ
ならないということで納得しました。オブジェクト指向は本当に
難しいですねぇ。
いろいろご指導ありがとうございました。

721 :デフォルトの名無しさん:05/01/23 23:12:08
Cのポインターが分かれば、理解も進むかと

722 :デフォルトの名無しさん:05/01/23 23:56:25
同じオブジェクトかどうか(==)と、同じ値か(equals)の違いだけなんだけど。
違うオブジェクトでも同じ値ってことはあるよね。

723 :デフォルトの名無しさん:05/01/24 00:32:54
n個の数字を入力し、大きい順に並べるプログラムを作りたいです。
よろしくお願いします。
if文と
double x[]=new double [n]を使って下さい。

import java.io.*;
import java.lang.*;

class sample
{
public static void main(String args[])
{
BufferedReader kbd = new BufferedReader(new InputStreamReader(System.in));

int n;

try
{
System.out.println(" n = ? " );
n = Integer.parseInt(kbd.readLine());

for(int i = 1 ; i <= n ; i++)
{
System.out.println("No."+i+" ? ");


724 :デフォルトの名無しさん:05/01/24 00:36:47
データベースとかいう香具師の10レス以上のコード(おそらく300行以上)
書いて、結局何の音沙汰も無いって哀れな展開に禿しくワラタ


725 :デフォルトの名無しさん:05/01/24 00:53:37
恐縮ですが、お尋ねしたいことがあります。下のプログラムを実行
すると次のような結果になるのですが、なぜ出力二行目の結果が
9.1ではなく9.100000000000001になるのでしょうか?理由がわから
ないので教えてください。
出力:15.2
   9.100000000000001
プログラム:public class TriangleTest {
public static void main(String []args) {
Triangle t1=new Triangle(7.6, 5.2, 10 );
Triangle t2=new Triangle(3, 4.2 , 4.9 );
t1.print();
t2.print();
}
}
public class Triangle {
double ab,bc,ca;
public Triangle(double ac,double bc,double ca) {
this.ab=ab;
this.bc=bc;
this.ca=ca;
}
public void print(){
System.out.println(ab+bc+ca);
}
}

726 :デフォルトの名無しさん:05/01/24 02:02:35
>>725
丸め誤差

あとTriangleのコンストラクタのローカル変数acが使われてないけど意味あんの?
abの間違いじゃない?

727 :デフォルトの名無しさん:05/01/24 10:43:13
>>725
とか
http://pc5.2ch.net/test/read.cgi/tech/1105691367/608n
とか見ると
宿題スレと質問スレがごっちゃになってるように思えてならない。

>>725
こっちは質問スレじゃないぞ…。

728 :デフォルトの名無しさん:05/01/24 10:47:09
今、A〜Fまでの6つのチェックポイントが与えられています。
各チェックポイント間の重み(距離みたいなものです)は以下の通りです。
例えば、AからDまでの距離は9です。DからAまでの距離が3なのは、AからDの間には高低差があり、
そのため移動のための労力に差が生じたからです。
2つのチェックポイントの値を入力し、重みを出力できるプログラムを作成しましょう。

  A B C D E F 
A - 7 6 9 6 7 
B 5 - 8 3 5 8 
C 4 3 - 9 2 6 
D 3 7 5 - 4 5 
E 8 5 9 4 - 7 
F 6 2 4 5 3 - 

【動作例】

各チェックポイントと入力の値との対応
A:1 B:2 C:3 D:4 E:5 F:6

出発地点を答えておくれ
1 [Enter]
Aですね!

到着地点を答えておくれ
4 [Enter]
Dですね!

========================
AからDまでの重みは9です!
========================

729 :681:05/01/24 12:28:07
681です。

>>689さん
CSVファイルのデータベースについて解答いただいた689さんありがとうございます。
返事遅れてすいません。

>>724さん
自宅から書き込めないため、返事遅れてたんです。すいません。

使用していて不具合っぽいものがありました。ソースが自分の力を超えすぎていて
どのように修正したらよいかわからないのでご教授願います。

一つはinsert文をクラス変数columnの順番に書くと結果がバラバラになって
CSVファイルにおちました。
  column = {"id","name","kana","adr","tel","mailadr"};
にして、insert文を
  insert into values(0033, 田中, タナカ, 青森県, 111-2222, hoge@hoge.com );
にしたら、CSVファイル上ではadrのところに0033が、idのところに青森県という
ような感じでカラム順番が不定になりました。

二つ目はupdateで値を空にして更新できません。
  update set name = hoge, kana = , adr = hogehoge where id = 0033;
のように値を空にするとエラーになります。(例ではkanaが空)




730 :681:05/01/24 12:29:48
続き

あと要望ですが、CSVファイルを
  id, name, ....[改行]
  id, name, ....[改行]
  [EOF]
の形に対応していただきたいのと、
クエリで値は
  update set name = 'hoge', kana = '', adr = 'hogehoge' where id = '0033';
のようにシングルクォーテーションでくくれるようにしていただきたいです。

無理言ってすいません。おねがいします。


731 :デフォルトの名無しさん:05/01/24 13:14:28
>>728
この問題って何か意味あるの?
何に応用出来るの?

732 :デフォルトの名無しさん:05/01/24 13:33:42
>>728 2次元配列使えばすむハナシだなあ。

733 :デフォルトの名無しさん:05/01/24 18:28:41
>>728

import java.io.*;
public class ahoka {
public static void main(String[] args) throws Exception{
int i[][] = {
{0, 7, 6, 9, 6, 7},
{5, 0, 8, 3, 5, 8},
{4, 3, 0, 9, 2, 6},
{3, 7, 5, 0, 4, 5},
{8, 5, 9, 4, 0, 7},
{6, 2, 4, 5, 3, 0}
};
int startPoint, endPoint;
char c[] = {'A', 'B', 'C', 'D', 'E', 'F'};
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
System.out.println("各チェックポイントと入力の値との対応");
System.out.println("A:1 B:2 C:3 D:4 E:5 F:6");
System.out.println();
System.out.println("出発地点を答えておくれ");
startPoint = Integer.parseInt(bfr.readLine()) - 1;
System.out.println(c[startPoint] + "ですね!");
System.out.println();
System.out.println("到達地点を答えておくれ");
endPoint = Integer.parseInt(bfr.readLine()) - 1;
System.out.println(c[endPoint] + "ですね!");
System.out.println();
System.out.println("======================== ");
System.out.println(c[startPoint] + "から" + c[endPoint] + "までの重みは"+i[startPoint][endPoint]+"です!");
System.out.println("======================== ");
}
}

734 :デフォルトの名無しさん:05/01/24 19:57:17
>>728
BからDなら重みは何ぼだ

735 :デフォルトの名無しさん:05/01/24 20:15:18
アプレットからサーブレットにして、オブジェクトを出きる限り少なくする
ためには、JAVAの規約に則って、try〜catchしてほしい。

736 :>>729データベース その1:05/01/24 22:09:06
import java.io.*;
import java.util.*;
import java.util.regex.*;
import java.lang.reflect.*;
public class Statement {
List column;
String[][] keyword, tablekeyword;
List rowList = new ArrayList();
Map updateMap = new LinkedHashMap();
String tablename, ordername, updatekeyname;
boolean outputFlag, deleteFlag, updateFlag, alldelFlag;
Matcher mat;
String token;
Iterator insertIt;

737 :>>729データベース その2:05/01/24 22:09:40
ResultSet executeQuery(String query) throws Exception {
mat = Pattern.compile("'([^'\\n\\r]*)'|[\\S&&[^\\(\\),;]]+|[\\(\\),;]{1}").matcher(query);
String[][] mykeyword = {
{ "select", "select" }, { "insert", "insert" },
{ "update", "update" }, { "delete", "delete" }, { "create", "create" }
};
keyword = mykeyword;
loop: while(mat.find()) {
token = mat.group();
if (token.equals(";"))
break;
if (mat.group(1) != null)
token = mat.group(1);
for (int i = 0; i < keyword.length; i++) {
if (token.matches(keyword[i][0])) {
getClass().getDeclaredMethod(keyword[i][1], new Class[0])
.invoke(this, new Object[0]);
continue loop;
}
}
throw new Exception();
}
if (outputFlag) {
outputDatabase();
return null;
} else {
return new ResultSet(rowList);
}
}

738 :>>729データベース その3:05/01/24 22:10:14
void outputDatabase() throws Exception {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < column.size(); i++)
sb.append(column.get(i) + ",");
sb.replace(sb.length() - 1, sb.length(), "\r\n");
if (alldelFlag)
rowList.clear();
for (int i = 0; i < rowList.size(); i++) {
Map map = (Map) rowList.get(i);
for (int k = 0; k < column.size(); k++)
sb.append(map.get(column.get(k)) + ",");
sb.replace(sb.length() - 1, sb.length(), "\r\n");
}
FileWriter w = new FileWriter(tablename);
w.write(sb.toString());
w.close();
}

739 :>>729データベース その4:05/01/24 22:10:54
void create() {
outputFlag = true;
keyword = new String[][] { { "table", "tablekw" } };
}
void tablekw() {
keyword = new String[][] { { ".+", "maketable" } };
}
void maketable() {
tablename = token;
keyword = new String[][] { { "\\(", "makebeginP" } };
}
void makebeginP() {
column = new ArrayList();
keyword = new String[][] { { ".*", "makeparam" } };
}
void makeparam() {
column.add(token);
keyword = new String[][] { { ",", "makeconma" }, { "\\)", "makeendP" } };
}
void makeconma() {
keyword = new String[][] { { ".*", "makeparam" }, { "\\)", "makeendP" } };
}
void makeendP() {
keyword = new String[0][];
}

740 :>>729データベース その5:05/01/24 22:11:31
void select() {
keyword = new String[][] { { "\\*", "asta" } };
}
void asta() {
keyword = new String[][] { { "from", "from" } };
}
void from() {
tablekeyword = new String[][] { { "where", "where" }, { "order", "order" } };
keyword = new String[][] { { ".+", "table" } };
}
void insert() {
outputFlag = true;
keyword = new String[][] { { "into", "into" } };;
}
void into() {
tablekeyword = new String[][] { { "values", "values" } };
keyword = new String[][] { { ".+", "table" } };
}
void values() {
Map map = new LinkedHashMap();
for (int i = 0; i < column.size(); i++)
map.put(column.get(i), "");
rowList.add(map);
insertIt = map.entrySet().iterator();
keyword = new String[][] { { "\\(", "beginP" } };
}
void beginP() {
keyword = new String[][] { { ".*", "param" } };
}

741 :>>729データベース その6:05/01/24 22:12:17
void param() {
Map.Entry ent = (Map.Entry) insertIt.next();
ent.setValue(token);
keyword = new String[][] { { ",", "conma1" }, { "\\)", "endP" } };
}
void conma1() {
keyword = new String[][] { { ".*", "param" }, { "\\)", "endP" } };
}
void endP() {
keyword = new String[0][];
}
void delete() {
outputFlag = true;
deleteFlag = true;
alldelFlag = true;
keyword = new String[][] { { "from", "delfrom" } };
}
void delfrom() {
tablekeyword = new String[][] { { "where", "where" } };
keyword = new String[][] { { ".+", "table" } };
}
void update() {
tablekeyword = new String[][] { { "set", "set" } };
outputFlag = true;
updateFlag = true;
keyword = new String[][] { { ".+", "table" } };
}

742 :>>729データベース その7:05/01/24 22:13:08
void set() {
keyword = new String[][] { { ".+", "key" } };
}
void key() {
updateMap.put(token, "");
updatekeyname = token;
keyword = new String[][] { { "=", "assign" } };
}
void assign() {
keyword = new String[][] { { ".*", "value" } };
}
void value() {
updateMap.put(updatekeyname, token);
keyword = new String[][] { { "where", "where" }, { ",", "conma2" } };
}
void conma2() {
keyword = new String[][] { { "where", "where" }, { ".+", "key" } };
}

743 :>>729データベース その8:05/01/24 22:13:44
void table() throws Exception {
keyword = tablekeyword;
tablename = token;
BufferedReader r = new BufferedReader(new InputStreamReader(
new FileInputStream(token)));
String line;
line = r.readLine();
if (line == null)
throw new Exception();
column = new ArrayList(Arrays.asList(line.split(",")));
StringBuffer sb = new StringBuffer();
while ((line = r.readLine()) != null)
sb.append(line + ",");
if (sb.length() == 0)
return;
String[] data = sb.toString().split(",");
for (int i = 0; i + column.size() <= data.length;) {
Map map = new LinkedHashMap();
for (int k = 0; k < column.size() && i < data.length; k++, i++)
map.put(column.get(k), data[i].trim());
rowList.add(map);
}
}

744 :>>729データベース その9:05/01/24 22:16:22
void where() throws Exception {
boolean endByOrder = false; alldelFlag = false;
ExpressionParser ep = new ExpressionParser(mat);
endByOrder = ep.parse();
Expression ex = ep.getExpression();
for (int i = 0; i < rowList.size(); ) {
boolean flag = ex.toBoolean((Map) rowList.get(i));
flag ^= deleteFlag;
if (!updateFlag) {
if (!flag) rowList.remove(i);
else ++i;
} else {
if (flag) {
Iterator it = updateMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry ent = (Map.Entry) it.next(); Map map = (Map) rowList.get(i);
if (map.containsKey(ent.getKey())) map.put(ent.getKey(), ent.getValue());
}
}
++i;
}
}
if (endByOrder) {
order(); keyword = new String[][] { { "by", "by" } };
} else {
keyword = new String[][] { { "order", "order" } };
}
}


745 :>>729データベース その10:05/01/24 22:18:03
void order() {
keyword = new String[][] { { "by", "by" } };
}
void by() {
keyword = new String[][] { { ".+", "orderclm" } };
}
void orderclm() {
ordername = token;
Collections.sort(rowList, new Comparator() {
public int compare(Object arg0,Object arg1) {
return compareColumn((String) ((Map) arg0).get(ordername), (String) ((Map) arg1).get(ordername));
}
});
keyword = new String[][] { { "desc", "desc" } };
}
void desc() {
Collections.sort(rowList, new Comparator() {
public int compare(Object arg0,Object arg1) {
return -compareColumn((String) ((Map) arg0).get(ordername), (String) ((Map) arg1).get(ordername));
}
});
keyword = new String[0][];
}
int compareColumn(String s1, String s2) {
try {
return Integer.valueOf(s1).compareTo(Integer.valueOf(s2));
} catch (Exception e) {
return s1.compareTo(s2);
}
}
}

746 :>>729データベース その11:05/01/24 22:18:44
class ResultSet {
List rowList;
int index = -1;
ResultSet(List rowList) {
this.rowList = rowList;
}
String get(String name) {
Map map = (Map) rowList.get(index);
return (String) map.get(name);
}
int getInt(String name) {
Map map = (Map) rowList.get(index);
return Integer.parseInt((String) map.get(name));
}
boolean next() {
if (rowList.isEmpty())
return false;
if (index < rowList.size() - 1) {
++index;
return true;
} else {
return false;
}
}

747 :>>729データベース その12:05/01/24 22:19:41
boolean previous() {
if (rowList.isEmpty())
return false;
if (index > 0) {
--index;
return true;
} else {
return false;
}
}
boolean first() {
if (!rowList.isEmpty()) {
index = 0;
return true;
} else {
return false;
}
}
boolean last() {
if (!rowList.isEmpty()) {
index = rowList.size() - 1;
return true;
} else {
return false;
}
}
}

748 :>>729データベース その13:05/01/24 22:20:48
class ExpressionParser {
Matcher mat;
LinkedList valueStack = new LinkedList(), exprStack = new LinkedList();
Expression expression;
ExpressionParser(Matcher mat) {
this.mat = mat;
}
boolean parse() throws Exception {
boolean endByOrder = false;
while (mat.find()) {
String token = mat.group();
if (mat.group(1) != null)
token = mat.group(1);
if (token.matches("=|<>|>=|<=|>|<")) {
exprStack.addLast(token);
} else if (token.matches("and|or")) {
ValueExpression expr = new ValueExpression((String) valueStack.removeLast(),
(String) valueStack.removeLast(), (String) exprStack.removeLast());
valueStack.addLast(expr);
exprStack.addLast(token);
} else if (token.matches("order|;")){
endByOrder = true;
break;
} else {
valueStack.addLast(token);
}
}

749 :>>729データベース その14:05/01/24 22:22:00
while (!exprStack.isEmpty()) {
String token = (String) exprStack.removeLast();
if (token.matches("=|<>|>=|<=|>|<")) {
ValueExpression expr = new ValueExpression((String) valueStack.removeLast(),
(String) valueStack.removeLast(), token);
valueStack.addLast(expr);
} else {
LogicExpression expr = new LogicExpression((Expression) valueStack.removeLast(),
(Expression) valueStack.removeLast(), token);
valueStack.addLast(expr);
}
}
if (!exprStack.isEmpty() || valueStack.size() != 1)
throw new Exception();
expression = (Expression) valueStack.removeLast();
return endByOrder;
}
Expression getExpression() {
return expression;
}
}

750 :>>729データベース その15:05/01/24 22:22:38
interface Expression {
boolean toBoolean(Map row) throws Exception ;
}
class LogicExpression implements Expression {
Expression val1, val2;
String expr;
LogicExpression(Expression val2, Expression val1, String expr) {
this.val1 = val1;
this.val2 = val2;
this.expr = expr;
}
public boolean toBoolean(Map row) throws Exception {
if (expr.equals("and"))
return val1.toBoolean(row) && val2.toBoolean(row);
else
return val1.toBoolean(row) || val2.toBoolean(row);
}
}

751 :>>729データベース その16:05/01/24 22:23:39
class ValueExpression implements Expression {
String val1, val2, expr;
ValueExpression(String val2, String val1, String expr) {
this.val1 = val1; this.val2 = val2; this.expr = expr;
}
public boolean toBoolean(Map row) throws Exception {
if (expr.equals("=")) {
int ans = ((String) row.get(val1)).compareTo(val2);
return ans == 0;
} else if (expr.equals("<>")) {
int ans = ((String) row.get(val1)).compareTo(val2);
return ans != 0;
} else if (expr.equals("<")) {
int ans = Integer.valueOf((String) row.get(val1)).compareTo(
Integer.valueOf(val2));
return ans == -1;
} else if (expr.equals(">")) {
int ans = Integer.valueOf((String) row.get(val1)).compareTo(
Integer.valueOf(val2));
return ans == 1;
} else if (expr.equals("<=")) {
int ans = Integer.valueOf((String) row.get(val1)).compareTo(
Integer.valueOf(val2));
return ans == 0 || ans == -1;
} else if (expr.equals(">=")) {
int ans = Integer.valueOf((String) row.get(val1)).compareTo(
Integer.valueOf(val2));
return ans == 0 || ans == 1;
}
throw new Exception();
}
}

752 :デフォルトの名無しさん:05/01/24 22:57:43
>>736-751
Wikiに貼ってくれ…。
http://www.wikiroom.com/java/?%a5%bd%a1%bc%a5%b9%c5%bd%c9%d5%a4%b1

753 :>>729データベース使用法 その1:05/01/24 23:20:28
上の、16のコードを一字一句逃さずに全部コピペしてコンパイルしてください。

注文と幾つかのバグを修正しました。
Statementの仕様を幾つか変えました。ResultSetも少し変えました。

使用法はこんな感じです。
String query = "select * from data.txt;";
Statement st = new Statement();
ResultSet rs = st.executeQuery(query);
while (rs.next()) {
  int id = rs.getInt("id");
  String name = rs.get("name");
  String tel = rs.get("tel");
}

754 :>>729データベース使用法 その2:05/01/24 23:22:30
上記のString変数・queryに代入する擬似SQL文について

*create文によるテーブルの作成
  create table data.txt ( id, name, kana, adr, tel, mailadr ); 
  で、data.txtの名のcsvファイルが作成され、それがテーブルになります。
  指定されたカラムを持ちます。カラムの型は全部String型です。
  しかし一部の構文で、それをint数値として扱う事もできます。詳細は後で述べます。
*create、select、insert、update、delete の5つの文が使えます。
*空の値を代入する時は '' としてください。(例:update data.txt set name = '';)
*where句の式で、< > >= <= の大小比較式を使う時は、そのカラムデータが数字だけで構成 
  されてないとエラーになります。 id >= 5 はOKだが、name >= '田中' はエラーになる。
*select の次には * だけを指定してください。カラム名指定はできません。
*予約語は小文字だけで書いてください。大文字だと認識されません。
*テーブルの指定はCSVファイル名そのままにしてください。
*SQL文に構文エラーがあると、例外が発生します。
*Statement#executeQuery() でselect文を引数にするとResultSetインスタンスが
  返ってきますが、それ以外の更新文では常にnullが返ってきます。

SQL文の例
create table data.txt ( id, name, kana, adr, tel, mailadr );
insert into data.txt values ( 5, '田中', 'タナカ', '横浜', '333-444', 'aaa@yahoo' );
insert into data.txt values ( 6, '鈴木', 'タナカ', '', '666-777', 'bbb@yahoo' );
select * from data.txt where id >= 3 and id <= 5 order by id;
select * from data.txt where id = 1 or id = 2;
select * from data.txt order by id desc;
update data.txt set name = '佐藤', mailadr = '' where id = 5;
delete from data.txt where id <> 3;
delete from data.txt;

755 :>>729データベース使用法 その3:05/01/24 23:23:22
esultSetについて

*Statement#executeQuery()から返ってくるResultSetインスタンスは、初めはどこの行も
  指してません(変更しました)。必ず初めにnext()かfirst()をしてからget()してください。
*get(String name)、getInt(String name)、next()、previous()、first()、last()
  が使えます。
*next() previous() first() last() は、その行が存在するとtrue、存在しないとfalseが
  返ってきます。行が存在しない状態でget()を使うと例外が発生します。
*get()ではStringが、getInt()ではint数値が得られます。ただ数字だけで構成されてない
  カラムに対してgetInt()を使うと例外が発生します。


756 :デフォルトの名無しさん:05/01/24 23:26:32
>752
Wikiの使い方が分からないんです・・・ (;_;)
どのページをクリックすればいいのかさっぱり・・・(>_<)


757 :デフォルトの名無しさん:05/01/24 23:27:43
>>752
すいません。
Wikiの使い方が分からないんです・・・ (;_;)
どのページをクリックすればいいのかさっぱり・・・(>_<)


758 :デフォルトの名無しさん:05/01/24 23:41:42
>>756
簡単に。
1. 画面下「新規」ボタンクリック。
2. 「ページ新規作成:」に適当な名前を入れて「編集」ボタンクリック。
3. 「-- 雛形とするページ --」は「ソース貼り付け」を選択して「読込」ボタンクリック。
4. 画面下テキストエリアに載せたい作ったソースを書く(雛形を参考に)。
5. 「プレビュー」ボタンクリック。
6. イケてないと思ったら修正して「再度プレビュー」。
  イケてると思ったら「ページの更新」。
ちなみに俺>>526。Wiki初めて使ったけど出来た。
あなたに出来ないはずがない。

759 :ベニテス:05/01/25 02:03:29
四則演算の計算機アプレットを教えてください。

760 :デフォルトの名無しさん:05/01/25 02:06:04
それは宿題なのか?

761 :デフォルトの名無しさん:05/01/25 02:35:30
お願いします。
カウントダウンタイマーのJavaウィンドウアプリケーションを作る
数字の表示には画像ファイルを利用
カウントダウンは最低100msec単位で表示
スレッド、JFrameを用いる

762 :729:05/01/25 09:09:14
729(681)です。

>>736さん
データベースの改善ありがとうございました。
バッチリ動作しました。ほんとに助かりました。
これからソースが理解できるように頑張ります。

ちなみに
  *where句の式で、< > >= <= の大小比較式を使う時は、そのカラムデータが数字だけで構成 
    されてないとエラーになります。 id >= 5 はOKだが、name >= '田中' はエラーになる。
にしたのは特別な理由があるのですか?
特に問題はなかったのですが気になったもので...


763 :お願いします:05/01/25 09:46:39
この問題お願いします。
画像を線形変換、三角波変換、区分変換するための
式をjavaで書くとどうなりますか?
今日の午前11時までにお願いします。m(__)m

764 :デフォルトの名無しさん:05/01/25 11:06:01
>>763
java.image.*
パッケージなどを使ってみては?

765 :デフォルトの名無しさん:05/01/25 11:22:07
もう11時過ぎてしまったのですが・・・
一応、あと30分猶予がありますので(つまり正午まで)
30分以内に上記の回答プログラムをここに掲載してください。
お早めにお願いします。

766 :デフォルトの名無しさん:05/01/25 14:32:26
>>765
あ〜あかわいそうに。ってかなんだその態度は

767 :デフォルトの名無しさん:05/01/25 17:31:31
夕方になっても式の回答が来てないなんて、なんだこのスレわ

768 :デフォルトの名無しさん:05/01/25 18:27:04
明日が期限なのですがまったくわかりません。
丸投げで申し訳ないのですが、どなたか教えていただけませんでしょうか。

課題
 HTTPクライアントとサーバをjavaで作る。
 URLクラスは使ってはならない
 マルチスレッドにする
 http://www.lab7.kuis.kyoto-u.ac.jp/~nuka/le2/H16/index.html#BROWSE
 上の仕様に従ってクラスをつくる。

 詳しくはこちらの総合デモのところをご覧ください
 http://www.lab7.kuis.kyoto-u.ac.jp/~nuka/le2/H16/index.html

あとc言語のクライアントとサーバは既に作ってあります。


769 :M.B.:05/01/25 20:07:09
>>762
SQL のスレへ逝け

770 :デフォルトの名無しさん:05/01/25 21:22:07
>>768
CでつくれるくらいならJavaなら余裕では?
>>769
(JLispに期待。)

771 :デフォルトの名無しさん:05/01/25 22:14:28
>>768
何だかゴテゴテ書いてあって、仕様が分からないからムリ。
せめて、ここにまとめて書いてくれ。

772 :デフォルトの名無しさん:05/01/25 22:21:23
>>770
何分Javaは初めてなもんで、どこから手をつけていいかわからないんです。

773 :sasa:05/01/25 22:24:34
Jビルダーを使っているのですが、JPanelに画像を張るやり方が
わかりません。これができたら宿題は終わります。
ちなみに画像ファイルはJPGです。お願いします。

774 :デフォルトの名無しさん:05/01/25 22:42:06
>>768
ていうかお主は京大生なのな、いいな。うらやましいな。

775 :768:05/01/25 22:51:14
では自分なりにまとめて書きます。

課題 JavaによるHTTPクライアントとサーバ

仕様

クライアントの動作

起動後、標準入力からURLを入力し、サーバにコンテンツの転送要求をする。
そして結果を画面に表示する。
結果を出力した後、以下のように選択肢を表示し、そのURL内のリンクをたどれるようにする。
1 http;//www....
2 http://www....
3 http;//www....

1を入力すれば1のURLのhtmlを表示し、また選択肢を表示し、ていう具合です。

サーバの動作

起動後、クライアントからのコネクション待ちにはいる。
クライアントのコネクション確立後、クライアントからのコンテンツ転送要求に応じてコンテンツを転送する。
コネクション待ちの状態に戻る。

マルチスレッドを用いて複数クライアントに対応する。

クライアント、サーバともURLクラスを使わないよう指定されています。
基本的にhtmlだけ表示できればいいです。(cgiとかには対応する必要はありません)

776 :771:05/01/25 23:02:09
>>775
数時間待っててくださいませ。

777 :デフォルトの名無しさん:05/01/25 23:49:41
>>773
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(new JLabel(new ImageIcon(StringのファイルパスまたはURLまたはImageなど)), BorderLayout.CENTER);

引数の例
"image.jpg"
new URL("http://www.google.co.jp/intl/ja_jp/images/logo.gif")

BorderLayout.CENTERは省略可能。

778 :デフォルトの名無しさん:05/01/25 23:53:03
>>776
これから書くのか。
密かに応援するよ。

779 :>>775クライアント その1:05/01/26 02:07:24
import java.io.*;
import java.util.*;
import java.util.regex.*;
import java.nio.channels.*;
import javax.swing.text.html.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class HW69 {
static JFrame frm = new JFrame();
static JTextField tfd = new JTextField();
static JComboBox cbx = new JComboBox();
static JTextArea tpane = new JTextArea();
static JButton btn = new JButton("移動");
static String baseurl, content;
static java.util.List links;
public static void main(String[] args) {
JFrame frm = new JFrame();
JScrollPane scr = new JScrollPane(tpane);
Box box = Box.createHorizontalBox();
box.add(tfd);
box.add(btn);
JPanel pal = new JPanel(new BorderLayout());
pal.add(cbx, BorderLayout.NORTH);
pal.add(scr);
cbx.setBackground(new Color(255,245,255));
cbx.setFont(new Font("Dialog", 0, 13));
tpane.setBackground(new Color(245, 245, 255));

780 ::>>775クライアント その2:05/01/26 02:08:08
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
requestURL(tfd.getText());
parseContent();
} catch (Exception e1) {
tpane.setText(e1.getMessage()); return;
}
tpane.setText(content);
DefaultComboBoxModel model = new DefaultComboBoxModel(links.toArray());
cbx.setModel(model);
}
});
cbx.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String url = (String) cbx.getSelectedItem();
if (url.length() == 0)
return;
try {
requestURL(url);
parseContent();
} catch (Exception e1) {
tpane.setText(e1.getMessage()); return;
}
tpane.setText(content);
DefaultComboBoxModel model = new DefaultComboBoxModel(links.toArray());
cbx.setModel(model);
tfd.setText(url);
}
});

781 :>>775クライアント その3:05/01/26 02:08:47
frm.getContentPane().add(pal);
frm.getContentPane().add(box, BorderLayout.NORTH);
frm.setSize(800, 600);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
static void requestURL(String requrl) throws Exception {
String pat = "(http://([^/:]+):?(\\d*))(/.*)";
Matcher mat = Pattern.compile(pat).matcher(requrl);
if (!mat.find())
throw new Exception("URLが不正です");
baseurl = mat.group(1);

SocketChannel ch;
try {
int port = 80;
if (mat.group(3).length() > 0)
port = Integer.parseInt(mat.group(3));
ch = SocketChannel.open(new java.net.InetSocketAddress(
mat.group(2), port));

782 ::>>775クライアント その4:05/01/26 02:09:50
StringBuffer sb = new StringBuffer();
sb.append("GET " + mat.group(4) + " HTTP/1.1\r\n");
sb.append("HOST: " + mat.group(2) + "\r\n");
sb.append("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)\r\n");
sb.append("Accept: */*\r\n");
sb.append("Accept-Language: ja\r\n\r\n");
ch.write(java.nio.ByteBuffer.wrap(sb.toString().getBytes("ISO-8859-1")));
} catch (Exception e1) {
throw new Exception("接続でエラー発生");
}
String ctype = "";
int length = -1;
DataInputStream in;
try {
in = new DataInputStream(Channels.newInputStream(ch));
String line = in.readLine();
while ((line = in.readLine()).length() > 0) {
String type = line.split(":")[0].trim();
if (type.equalsIgnoreCase("content-type"))
ctype = line.split("[:;]")[1].trim();
else if (type.equalsIgnoreCase("content-length"))
length = Integer.parseInt(line.split(":")[1].trim());
}
} catch (IOException e) {
throw new Exception("ヘッダ読み込みでエラー発生");
}

783 :>>775クライアント その5:05/01/26 02:10:25
if (!ctype.equalsIgnoreCase("text/html")) {
content = new String("htmlファイルではないので表示不可");
} else {
try {
ByteArrayOutputStream btout = new ByteArrayOutputStream();
int size;
byte[] buf = new byte[8000];
while ((size = in.read(buf)) != -1) {
btout.write(buf, 0, size);
if (length != -1) {
length -= size;
if (length <= 0)
break;
}
}
content = new String(btout.toByteArray(), "Shift_JIS");
} catch (Exception e2) {
throw new Exception("コンテンツ読み込みでエラー発生");
}
}
ch.close();
}

784 ::>>775クライアント その6:05/01/26 02:11:07
static void parseContent() throws Exception {
HTMLEditorKit kit = new HTMLEditorKit();
HTMLDocument doc = new HTMLDocument();
try {
kit.read(new StringReader(content), doc, 0);
} catch (Exception e) {
throw new Exception("HTMLファイル解析エラー");
}
HTMLDocument.Iterator it = doc.getIterator(HTML.Tag.BASE);
it.next();
if (it.isValid())
baseurl = (String) it.getAttributes().getAttribute("href");
links = new ArrayList();
it = doc.getIterator(HTML.Tag.A);
it.next();
while (it.isValid()) {
Enumeration em = it.getAttributes().getAttributeNames();
while (em.hasMoreElements()) {
Object key = em.nextElement();
if (key.toString().equalsIgnoreCase("href")) {
String url = (String) it.getAttributes().getAttribute(key);
try {
links.add(new java.net.URL(new java.net.URL(baseurl), url)
.toString());
} catch (Exception e1) { }
}
}
it.next();
}
}
}


785 :デフォルトの名無しさん:05/01/26 02:16:12
>>775
遅れてスイマセン。
全部コピペしてコンパイルしてください。
一番上のテキストフィールドにURLを書いて(ctrl+c でコピペできる)
移動ボタンを押すと、そこのHTMLファイルをそのまま表示します。
リンク先はその下のコンボボックスに表示されます。(ページ内に存在した場合)
どれかをクリックするとそのリンク先に飛びます。


786 :デフォルトの名無しさん:05/01/26 02:31:33
>>775
一箇所、URLクラスを使ってますが、それは接続の為でなく
HTML文書内のリンク先が相対URLで書かれてる事がよくあるので
ベースURLと相対URLを合成して絶対URLを求める為だけに
使いました。
接続と送受信、はHttpプロトコルに従ったソケットで行ってます。

787 :デフォルトの名無しさん:05/01/26 02:37:34
神キタ━━━━━━(゚∀゚)━━━━━━!!
いつも見てるけどすごいですね。

788 :デフォルトの名無しさん:05/01/26 03:19:57
>>775
あと
>>784その6の

if (it.isValid())
baseurl = (String) it.getAttributes().getAttribute("href");

この2行を削除してください。


789 :>>775サーバー その1:05/01/26 03:21:04
import java.net.*;
import java.io.*;
public class HW70 {
static StringBuffer content = new StringBuffer();
static boolean endFlag;
public static void main(String[] args) {
try {
BufferedReader file = new BufferedReader(
new InputStreamReader(new FileInputStream(args[0])));
String line;
while ((line = file.readLine()) != null)
content.append(line + "\r\n");
file.close();
} catch (Exception e2) {
System.out.println("コンテンツファイルが指定されてないか不正です");
System.exit(0);
}
ServerSocket ss = null;
try {
ss = new ServerSocket(80);
} catch (Exception e1) {
System.out.println("エラー終了");
System.exit(0);
}


790 :>>775サーバー その2:05/01/26 03:21:42
while (!endFlag) {
try {
Socket sc = ss.accept();
new HttpIO(sc).start();
} catch (IOException e) {
}
}
try {
ss.close();
} catch (IOException e) {
}
System.out.println("終了");
}
static class HttpIO extends Thread {
Socket sc;
HttpIO(Socket sc) {
this.sc = sc;
}
public void run() {
try {
io();
} catch (Exception e) {
} finally {
try {
sc.close();
} catch (IOException e1) {
}
}
}


791 :>>775サーバー その3:05/01/26 03:22:43
void io() throws Exception {
DataInputStream in = new DataInputStream(sc.getInputStream());
String line = in.readLine();
if (!line.split(" ")[0].equalsIgnoreCase("GET"))
return;
if (line.split(" ")[1].equalsIgnoreCase("/end")) {
while (in.readLine().length() > 0);
OutputStream out = sc.getOutputStream();
StringBuffer sb = new StringBuffer();
sb.append("HTTP/1.1 200 OK\r\n");
sb.append("Content-Type: text/html\r\n\r\n");
sb.append("サーバーを終了しました");
out.write(sb.toString().getBytes());
in.close();
out.close();
endFlag = true;
return;
}
while (in.readLine().length() > 0);
OutputStream out = sc.getOutputStream();
StringBuffer sb = new StringBuffer();
sb.append("HTTP/1.1 200 OK\r\n");
sb.append("Content-Type: text/html\r\n\r\n");
sb.append(content);
out.write(sb.toString().getBytes());
in.close();
out.close();
}
}
}


792 :デフォルトの名無しさん:05/01/26 03:27:47
>>775
そのサーバーがコンテンツとする任意のHTMLファイル名を引数にして実行ください。
(無いとエラーになる)
ポート80にバインドされます。
ブラウザで、http://localhost:80 と移動すると先のコンテンツが表示されます。
パスに/endを指定すると(例:http://localhost:80/end
サーバーが終了します。


793 :デフォルトの名無しさん:05/01/26 03:59:58
丸投げですいませんがよろしくお願いします
四則演算のボタンがあり入力フィールドが2つと出力フィールドがあり入力フィールドにはそれぞれ起動時に「ここに数字を入力します」と表示させる
電卓アプレットをお願いします
以下のソースを参考に作れと言われたのですが、よくわかりませんでした・・・
明日までにどうかお願いします・・・
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
  public class dentaku extends Applet {
       Button btnCulc;
TextField txtA, txtB, txtAnswer;
Label lblPlus;
public void init() {
btnCulc = new Button("=");
btnCulc.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
int intAnswer = Integer.parseInt(txtA.getText()) + Integer.parseInt(txtB.getText());
txtAnswer.setText(Integer.toString(intAnswer));
}});
              txtA = new TextField("0", 3);
txtB = new TextField("0", 3);
lblPlus = new Label(" + ");
txtAnswer = new TextField("0", 5);
              add(txtA);
add(lblPlus);
add(txtB);
add(btnCulc);
add(txtAnswer);}}

794 :793:05/01/26 04:47:25
やはりなんとか自分でやてみます
板汚しすいませんでした(_ _)

795 :デフォルトの名無しさん:05/01/26 05:55:38
>>771
これぐらいやる気のある人とプロジェクトくみたい

796 :デフォルトの名無しさん:05/01/26 09:29:12
//↓javaファイル
import java.applet.Applet;
import java.awt.Graphics;

public class ap1 extends Applet
{
public void paint(Graphics g)
       {
g.drawString("ようこそjavaアプレットへ!",10,10);
}
}
//↓HTMLファイル。
<HTML>
<BODY>
<APPLET CODE = "ap1.class" WIDTH = 200 height = 100>
</APPLET>
</BODY>
</HTML>

javaの入門書にあったコードなのですが、アプレットではきちんと表示されるのですが、
ブラウザで開くと灰色の背景だけで文字が表示されません。
ブラウザのせいでしょうか?IE6使用。

797 :768:05/01/26 09:40:55
771さん、ありがとうございました。

798 :名前は開発中のものです。:05/01/26 11:50:08
失礼だけどコンパイルした?

799 :デフォルトの名無しさん:05/01/26 19:57:51
ttp://www.math.cs.musashi-tech.ac.jp/~arimoto/java2004/
の課題6、
ttp://www.math.cs.musashi-tech.ac.jp/~arimoto/java2004/0113/index.html

をお願い致します。

800 :デフォルトの名無しさん:05/01/26 20:34:31
丸投げですみませんが3つほどお願いします。
課題1
 次の仕様に従って,任意の数値列を読み込み,その平均値,最頻値,中央値,分散,標準偏差,ヒストグラムを表示するプログラムを作成せよ.提出にあたっては,提出用データを用い,階級の幅(ヒストグラムを作成する際の,棒の幅)を10とすること.

・入力
ユーザはプログラムに対し,数値列の入った「データファイル名」と「階級の幅(ヒストグラムを作成する際の,棒の幅)」を入力するものとする.
入力は,起動時のコマンドライン入力,プログラム内でのユーザ入力,のどちらでもよいものとする.

・出力
最頻値,中央値は整数で,平均値,分散,標準偏差は,小数点第3位を四捨五入したものを表示するものとする.
ヒストグラムは,区間と階級を軸に表示するものとする(テキスト,グラフィックのどちらで表示してもよい).

・数値列データおよびデータファイル
数値を,スペースまたはリターンで区切ったテキストファイルとする.
数値は0以上100以内の整数で,個数は100個以内とする.

・提出用データ 20 22 84 56 32 65 96 2 4 100
5 68 55 89 23 45 45 23 32 75
23 65 98 12 45 3 8 50 78 25
33 64 73 46 82 16 34 91 97 41


801 :デフォルトの名無しさん:05/01/26 20:36:51
課題2
 次の仕様に従って,任意の数値列を読み込み,その数値列の,(1)95%信頼区間(最小値と最大値),
そこに含まれるデータ個数,含まれるデータの一覧.(2)99%信頼区間(最小値と最大値),そこに含ま
れるデータ個数,含まれるデータの一覧,これら両方を表示するプログラムを作成せよ.提出にあたっては,
提出用データを用いること.
・入力
ユーザはプログラムに対し,数値列の入った「データファイル名」を入力するものとする.
入力は,起動時のコマンドライン入力,プログラム内でのユーザ入力,のどちらでもよいものとする.
・出力
信頼区間の最小値と最大値は,小数点第1位を四捨五入した整数で表示するものとする.
・数値列データおよびデータファイル
数値を,スペースまたはリターンで区切ったテキストファイルとする.
数値は0以上100以内の整数で,個数は100個以内とする.
数値列は,正規分布に従っていると仮定するものとする.
・提出用データ 20 61 68 54 79 90
43 70 56 71 35 58
77 34 88 63 72 49
92 75 61 69 85 82
70 67 82 59 71 66


802 :デフォルトの名無しさん:05/01/26 20:37:28
課題3
 次の仕様に従って,2種類の数値系列を読込み,それぞれの平均点,標準偏差と2種類の系列間の相関積和,相関係数を計算するプログラムを作成せよ.提出にあたっては,提出用データを用いること.

・入力
ユーザはプログラムに対し,それぞれの数値列の入った「データファイル名」を2つ入力するものとする.
入力は,起動時のコマンドライン入力,プログラム内でのユーザ入力,のどちらでもよいものとする.

・出力
それぞれの平均点,標準偏差と2種類の系列間の相関積和,相関係数は,小数点第3位を四捨五入したものを表示するものとする.

・数値列データおよびデータファイル
数値を,スペースまたはリターンで区切ったテキストファイルとする.
数値は0以上100以内の整数で,個数は100個以内とする.

次の表はある学生の試験の点数一覧である.
提出用データはこの国語と英語の点数を用いよ.
学生番号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
国語 72 48 55 82 70 32 45 100 76 44 66 84 70 30 91
英語 67 52 68 95 63 58 34 88 67 51 77 66 70 43 88


803 :デフォルトの名無しさん:05/01/26 21:51:29
期末だから難しい課題が多いな。

804 :デフォルトの名無しさん:05/01/26 23:50:31
プログラムの問題とはなんか違う気がする

805 :>>799 その1:05/01/27 10:03:13
ib.jsp その1
<%@page contentType="text/html; charset=Shift_JIS" pageEncoding="Shift_JIS" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<c:if test="${applicationScope.datasrc == null}">
<sql:setDataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/test"
user="${initParam.username}" password="${initParam.password}" var="datasrc" scope="application" />
</c:if>
<c:set var="tableFlag" value="false" />
<sql:query dataSource="${datasrc}" var="tables" sql="show tables;" />
<c:forEach var="row" items="${tables.rows}">
<c:if test="${row.Tables_in_test == 'image'}">
<c:set var="tableFlag" value="true" />
</c:if>
</c:forEach>
<c:if test="${tableFlag != true}">
<sql:update dataSource="${datasrc}">
create table image (image varchar(255) primary key, thumb varchar(255),
name blob, title blob, comment blob, time timestamp);
</sql:update>
</c:if>
<c:if test="${param.post == true}">
<jsp:useBean id="formParser" class="ib.FormParser">
<jsp:setProperty name="formParser" property="in" value="${pageContext.request.inputStream}" />
<jsp:setProperty name="formParser" property="bound" value="<%= request.getHeader("Content-Type") %>" />
<jsp:setProperty name="formParser" property="context" value="${pageContext.servletContext}" />
<c:set var="formData" value="${formParser.formData}" />
<c:if test="${formData.error != null}">
<c:redirect url="/?error=${formData.error}" />
</c:if>

806 :>>799 その2:05/01/27 10:04:18
ib.jsp その2
<sql:update dataSource="${datasrc}">
insert into image values (?, ?, ?, ?, ?, ?);
<sql:param value="${formData.image}" /> <sql:param value="${formData.thumb}" />
<sql:param value="${formData.name}" /> <sql:param value="${formData.title}" />
<sql:param value="${formData.comment}" /> <sql:param value="${formData.time}" />
</sql:update>
</jsp:useBean>
<c:redirect url="/" />
</c:if>
<sql:query var="rowList" dataSource="${datasrc}" sql="select count(*) as cnt from image;" />
<c:set var="imageCount" value="${rowList.rows[0].cnt}" />
<c:set var="pageno" value="${0}" />
<c:if test="${param.page != null}">
<c:set var="pageno" value="${param.page}" />
</c:if>
<sql:query var="rowList" dataSource="${datasrc}">
select * from image order by time desc limit ${pageno * 5},${pageno * 5 + 5};
</sql:query>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=Shift_JIS">
<meta http-equiv="content-style-type" content="text/css">
<meta http-equiv="pragma" content="no-cache">

807 :>>799 その3:05/01/27 10:05:41
ib.jsp その3
<style type="text/css"><!--
.caption { font: bold medium fantasy; background-color: rgb(180,180,240); text-align: center;
position: relative; left: 20%; width: 60%; padding: 16px 0px; filter: alpha(style=2); white-space: nowrap; }
.form { border: dashed rgb(180,240,180) 2px; background-color: rgb(245,255,245); }
.imgframe { border: dashed rgb(180,180,240) 2px; width: 600px; }
td { font: 12px monospace; white-space: nowrap; }
.image { vertical-align: top; float: left; }
.label { width: 33%; color: rgb(0,0,120); background-color: rgb(245,245,255); }
.bg { height: 160px; vertical-align: center; }
.error { font: medium monospace; color: red; }
--></style>
</head>
<body>
<div class="caption"> 画像掲示板 </div><br>
<form action="/ib/ib.jsp?post=true" method="POST" enctype="multipart/form-data">
<table align="center" class="form">
<tr><td colspan="2" style="text-align: center;"> 画像投稿フォーム </td></tr>
<tr><td> 送信画像 </td> <td> <input type="file" name="file" size="70"> </td></tr>
<tr><td> 名前 </td> <td> <input type="text" name="name" size="80" maxlength="20"> </td></tr>
<tr><td> タイトル </td> <td> <input type="text" name="title" size="80" maxlength="20"> </td></tr>
<tr><td> コメント </td> <td> <textarea name="comment" rows="6" cols="55"> </textarea> </td></tr>
<tr><td colspan="2" style="text-align: right;"> *画像ファイル以外は省略可
<input type="submit" value="送信する"> </td></tr>
</table>
<div align="center" class="error"> <c:out value="${param.error}" /> </div>
</form>

808 :>>799 その4:05/01/27 10:06:38
ib.jsp その4
<div align="center">
<c:choose>
<c:when test="${pageno <= 0}"> 前のページ   </c:when>
<c:otherwise> <a href="/ib?page=${pageno - 1}"> 前のページ </a>   </c:otherwise>
</c:choose>
<c:choose>
<c:when test="${imageCount - (pageno + 1) * 5 <= 0}"> 次のページ   </c:when>
<c:otherwise> <a href="/ib?page=${pageno + 1}"> 次のページ </a>   </c:otherwise>
</c:choose>
</div><br>
<c:forEach var="row" items="${rowList.rows}">
<table align="center" class="imgframe">
<tr>
<td class="label"> タイトル  
<%= new String((byte[]) ((java.util.Map) pageContext.getAttribute("row")).get("title"), "Shift_JIS") %>
</td>
<td class="label"> 投稿者  
<%= new String((byte[]) ((java.util.Map) pageContext.getAttribute("row")).get("name"), "Shift_JIS") %>
</td>
<td class="label"> 投稿日時   ${row.time} </td>
</tr>
<tr><td colspan="2" class="bg">
<a href="/ib/${row.image}" target="_blank"> <img src="/ib/${row.thumb}" class="image"> </a>
コメント <br><br>
<%= new String((byte[]) ((java.util.Map) pageContext.getAttribute("row")).get("comment"), "Shift_JIS") %>
</td></tr>
</table><br>
</c:forEach>
</body>
</html>

809 :>>799 その5:05/01/27 10:08:22
ib.FormParser その1
package ib;
import javax.servlet.*; import java.io.*;
import java.util.*; import java.util.regex.*;
import java.nio.*; import java.awt.image.*; import javax.imageio.*;
public class FormParser {
private ServletInputStream in;
private String bound;
private Map formData = new TreeMap();
private ServletContext context;
synchronized private long issueID() {
try {
Thread.sleep(1);
} catch (InterruptedException e) { }
return System.currentTimeMillis();
}
public void setContext(ServletContext context) {
this.context = context;
}
public void setIn(ServletInputStream in) {
this.in = in;
}
public void setBound(String bound) {
Matcher mat = Pattern.compile("boundary=(.+)").matcher(bound);
if (mat.find())
this.bound = mat.group(1);
}

810 :>>799 その6:05/01/27 10:09:30
ib.FormParser その2
public Map getFormData() {
boolean more = true;
try {
while (more)
more = extract();
} catch (Exception e) {
formData.put("error", e.getMessage());
return formData;
}
return formData;
}
private boolean extract() throws Exception {
boolean more;
byte[] buffer = new byte[8000];
byte[] bHead = (byte[]) ("--" + bound + "\r\n").getBytes("ISO-8859-1");
byte[] bTail = (byte[]) ("--" + bound + "--\r\n").getBytes("ISO-8859-1");
int size = 0;
StringBuffer sb = new StringBuffer();
while (true) {
size = in.readLine(buffer, 0, buffer.length);
if (size == -1)
throw new Exception("Data stream error");
if (ByteBuffer.wrap(buffer, 0, size).equals(ByteBuffer.wrap(bHead)))
continue;
if (ByteBuffer.wrap(buffer, 0, size).equals(ByteBuffer.wrap(bTail)))
return false;
String line = new String(buffer, 0, size, "Shift_JIS");
sb.append(line);
if (line.equals("\r\n"))
break;
}

811 :>>799 その7:05/01/27 10:10:39
ib.FormParser その3
Map map = new TreeMap();
Scanner sc = new Scanner(sb.toString());
Pattern pat1 = Pattern.compile("([\\w\\-]+):([^;,\r\n]+)(;|,|\r\n)");
Pattern pat2 = Pattern.compile("([\\w\\-]+)= *\"(.*?)\" *(;|,|\r\n)");
Matcher mat = pat1.matcher(sb.toString());
boolean flag = false;
int idx = 0;
while (true) {
if (!flag)
mat.usePattern(pat1);
else
mat.usePattern(pat2);
if (!mat.find(idx))
break;
map.put(mat.group(1).trim(), mat.group(2).trim());
if (mat.group(3).equals("\r\n"))
flag = false;
else
flag = true;
idx = mat.end();
}
int offset = 0;
ByteArrayOutputStream btOut = new ByteArrayOutputStream();

812 :>>799 その8:05/01/27 10:11:38
ib.FormParser その4
while (true) {
size = in.readLine(buffer, offset, buffer.length - offset);
if (size == -1)
throw new Exception("Data stream error");
if (offset + size == buffer.length) {
if (buffer[buffer.length - 2] != 0x0d || buffer[buffer.length - 1] != 0x0a) {
btOut.write(buffer, offset, size);
System.arraycopy(buffer, buffer.length - bTail.length, buffer, 0, bTail.length);
offset = bTail.length;
continue;
}
}
if (size >= bTail.length) {
ByteBuffer view = ByteBuffer.wrap(buffer, size - bTail.length, bTail.length);
if (view.equals(ByteBuffer.wrap(bTail))) {
btOut.write(buffer, 0, size - bTail.length);
more = false;
break;
}
}
if (size >= bHead.length) {
ByteBuffer view = ByteBuffer.wrap(buffer, size - bHead.length, bHead.length);
if (view.equals(ByteBuffer.wrap(bHead))) {
btOut.write(buffer, 0, size - bHead.length);
more = true;
break;
}
}
btOut.write(buffer, offset, size);
offset = 0;
}

813 :>>799 その9:05/01/27 10:12:39
ib.FormParser その5
ByteArrayOutputStream newb = new ByteArrayOutputStream();
newb.write(btOut.toByteArray(), 0, btOut.size() - 2);
btOut.reset();
if (!map.get("name").equals("file")) {
formData.put(map.get("name"), newb.toByteArray());
return more;
}
if (newb.size() == 0)
throw new Exception("No image error, You must choose image file");
BufferedImage img = null;
try {
img = ImageIO.read(new ByteArrayInputStream(newb.toByteArray()));
} catch (IOException e) {
throw new Exception("File format error, ImageFile is invalid");
}
long id = issueID();
formData.put("time", new java.sql.Timestamp(id));
String ids = String.valueOf(id);
String ext = "";
mat = Pattern.compile("\\..+$").matcher((String) map.get("filename"));
if (mat.find())
ext = mat.group();
File filename = new File(context.getRealPath(ids + ext));
BufferedOutputStream file = new BufferedOutputStream(new FileOutputStream(filename));
file.write(newb.toByteArray());
file.close();
formData.put("image", filename.getName());

814 :>>799 その10:05/01/27 10:13:56
ib.FormParser その6
filename = new File(context.getRealPath(ids + "_s" + ext));
file = new BufferedOutputStream(new FileOutputStream(filename));
int iw = img.getWidth();
int ih = img.getHeight();
if(iw > 160 || ih > 160) {
BufferedImage img2=null;
double num = (double) Math.min(iw, ih) / Math.max(iw, ih);
double w = (iw >= ih) ? (double) 160 / iw : (double) 160 * num / iw;
double h = (ih >= iw) ? (double) 160 / ih : (double) 160 * num / ih;
AffineTransformOp affine=new AffineTransformOp(
java.awt.geom.AffineTransform.getScaleInstance(w,h),
AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
img2 = affine.filter(img, null);
ImageIO.write(img2, "jpeg", file);
} else {
ImageIO.write(img, "jpeg", file);
}
file.close();
formData.put("thumb", filename.getName());
return more;
}
}

815 :>>799 その11:05/01/27 10:16:29
web.xml その1

<?xml version="1.0" encoding="Shift_JIS" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2e"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4" >
<context-param>
<param-name> username </param-name>
<param-value> root </param-value>
</context-param>
<context-param>
<param-name> password </param-name>
<param-value> root </param-value>
</context-param>
<welcome-file-list>
<welcome-file> /ib.jsp </welcome-file>
</welcome-file-list>
</web-app>


816 :デフォルトの名無しさん:05/01/27 11:48:32
ツールバーについての質問です。

ツールバーをコンテナに追加したいのですが、
その際、BorderLayoutで配置させる必要があると調べました。
しかし、コンテナのsetLayoutをnullにしてあるので、
BorderLayoutでの配置ができません。
この場合、どうしたらよいのでしょうか?

817 :デフォルトの名無しさん:05/01/27 13:15:11
>>816
BorderLayoutのCENTERの部分のレイアウトをNULLにする

818 :デフォルトの名無しさん:05/01/27 13:44:36
>>817

ご回答ありがとうございます。
もう少し詳しく教えていただけないでしょうか?

819 :デフォルトの名無しさん:05/01/27 13:50:53
>>818
こっちは宿題を答えるスレなのでJava質問・相談スレッドの方に行ってくれ

820 :デフォルトの名無しさん:05/01/27 14:04:09
>>819
すいません。そうします。

821 :デフォルトの名無しさん:05/01/27 19:11:03
>>800-802
を何とぞお願い致します・・・・M(_ _)m

822 :デフォルトの名無しさん:05/01/27 22:19:01
JavaとJavaScriptの違いについて簡単に述べなさい

お願いorz

823 :おながいします。:05/01/27 22:54:45
引数であるディレクトリの絶対パスを渡し、その中からA.txtというファイルを取得する。
A.txtがない場合、引数のディレクトリの下位ディレクトリから探す。
A.txtを取得したら、その中の"aaa"という文字列を"bbb"に書き換える。

よろしくおながいします。漏れには無理です……。

824 :デフォルトの名無しさん:05/01/27 23:57:51
>>823
public static void main(String[] args) throws Exception {
String fileName = searchFile(args[0], "A.txt");
if (fileName == null) {
System.out.println("見つかりません");
System.exit(1);
}
BufferedReader br = new BufferedReader(new FileReader(
new File(fileName)));
String str = "";
while (br.ready()) {
str += br.readLine() + "\n";
}
br.close();
str = str.replaceAll("aaa", "bbb");

FileOutputStream fos = new FileOutputStream(new File(fileName));
OutputStreamWriter osw = new OutputStreamWriter(fos);
BufferedWriter out = new BufferedWriter(osw);

out.write(str);
out.flush();

fos.close();
osw.close();
out.close();
System.out.println("変えました。");
}

825 :デフォルトの名無しさん:05/01/27 23:58:43
private static String searchFile(String path, String fileName) {
File file = new File(path);
File[] listFiles = file.listFiles();
for (int i = 0; i < listFiles.length; i++) {
if (listFiles[i].isDirectory()) {
String goal = searchFile(listFiles[i].getAbsolutePath(),
fileName);
if (goal != null) {
return goal;
}
} else {
if (listFiles[i].getName().equals(fileName)) {
return listFiles[i].getAbsolutePath();
}
}
}
return null;
}

826 :tatata:05/01/28 15:38:54
ネット上での オセロ大会を 開こうと思っています。
今考えているのは 64人のトーナメント制です。
つきましては 魅力的なオセロゲームのプログラムと、スムーズに
進行できるような インターフェースを考えてくれませんか?


827 :デフォルトの名無しさん:05/01/28 17:45:51
感動的な丸投げだ。

828 :虚数を配列を使って表現する:05/01/28 21:24:44
初心者です。よろしくお願いいたします。

現在学校で取り組んでるプロジェクトの中で出てくるプログラム「
虚数クラス」で、配列を利用して虚数を表現(a + bi の型)するのですが、
toString関数 http://java.sun.com/j2se/1.3/docs/api/
この虚数をStringで返すtoString関数の使い方がいまいちわかりません。
API読みましたが、シンタックスのレベルでの使い方がいまいちです。

よろしくお願いします。

829 :デフォルトの名無しさん:05/01/28 22:08:53
>>828
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Object.html#toString()

toString()はそのクラスオブジェクトの文字列表現を返すメソッドです。
虚数クラスだったらa+biの形の文字列を帰せばいいのでは?

830 :デフォルトの名無しさん:05/01/28 23:02:53
さっそくのご返答ありがとうございます。APIにもありました、

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

はどういう意味なのでしょうか?

831 :デフォルトの名無しさん:05/01/28 23:22:49
>>830
getClass().getName() + '@' + Integer.toHexString(hashCode())
このオブジェクトのクラスを取得し名前をStringで取得。
charの@を付加。
このオブジェクトのハッシュコードの16進表現Stringを付加。

虚数をint[2]の配列で表現しているのなら
public String toString(){
return Integer.toString(i[0])+"+"+i[1]+"i";
}
みたいな感じでいいんでないでしょか。

832 :デフォルトの名無しさん:05/01/28 23:41:15
素早いご返事ありがとうございます。ダイレクトな説明、感動しました。

すると、getClass().getName() + '@' + Integer.toHexString(hashCode()) の
Integer.toHexString(hashCode()) の部分が return される部分ということですね。
ハッシュコードの16進表現String、というのはこの場合、数値(double)の、表示上
は数値のString化という理解の仕方でよろしいのでしょうか?

833 :デフォルトの名無しさん:05/01/28 23:49:34
>>832
全体がreturnされます。
また、ハッシュコードはintの整数値であり、
この場合、これを16進表現したStringが連結されます。


834 :デフォルトの名無しさん:05/01/29 00:05:45
ご返答ありがとうございます。なるほど、わかりました。
また調べて何かわからないことがあったら質問させてください。

どうも有り難うございました。

835 :デフォルトの名無しさん:05/01/29 01:28:01
>>828-834
質問スレ行って。
http://pc5.2ch.net/test/read.cgi/tech/1105691367/

836 :デフォルトの名無しさん:05/01/29 20:00:08
(1)学籍番号、国語、数学、英語の各教科の点数を標準入力で入力し、生徒ごとの全科目の総得点
と科目ごとおよび総得点の平均点を出力するプログラム。

1234567 83 78 82
1234568 79 82 73
1234569 76 80 71
:
:
1234590 72 78 80

<結果の表示例>
学籍番号 国語 数学 英語 合計
--------------------------------
1234567   83   78 82 243
1234568 79 82 73 234
1234569 76 80 71 237
:
:
1234590 72 78 80 230
-------------------------------
平均 73.2 75.4 77.8 225.4

read_student:学籍番号、得点を格納
print_student:氏名と得点を出力
calc_total_of_student:生徒一人について総得点を計算
add_student_to_sum:生徒一人分の得点を合計点に積算
(2)(1)に継承を用いて、成績を国語、数学、英語の3教科から理科、社会を加えた5教科に拡
張せよ。
(3)(1)(2)それぞれファイル入力にし、生徒ごとの全科目の総得点と科目ごとおよび総得
点の平均点を追加したファイルを出力するプログラム。

837 :デフォルトの名無しさん:05/01/29 22:38:44
>>836
できた。今から貼ります。

838 :837:05/01/29 23:04:28
>>836
http://www.wikiroom.com/java/?%A5%BD%A1%BC%A5%B9%C5%BD%A4%EA%C9%D5%A4%B13

839 :デフォルトの名無しさん:05/01/30 00:07:32
ナップザック問題がNPに属すること、即ちそのnodeterministicなアルゴリズムを記述せよ

・ナップザック問題:それぞれ異なる大きさと価格が割り当てられているn個の荷物と、制限された容量を持つナップザックが与えられた時、
価格の和が最大となるようにナップザックに詰めこめる荷物を選べ。

教えていただけませんか、よろしくお願いします

840 :デフォルトの名無しさん:05/01/30 01:08:16
>>826
一つ聞きたいのだが、それは本気で依頼をしてるのですか?
返答次第では作成してもいいのだが・・・


841 :デフォルトの名無しさん:05/01/30 08:55:27
>>838ありがとうございました。
実行できる環境にいないので実行して問題があれば
またお願いします

842 :デフォルトの名無しさん:05/01/30 15:23:05
>>838のソースに詳しいコメント付けてください。。。
お願いします。

843 :837:05/01/30 15:57:39
>>842は質問者ですか?
もしそうならやるけど、違ってたら無駄足だしなー。。

844 :デフォルトの名無しさん:05/01/30 16:01:46
>>838じゃないけど、
これ以上詳しくしたら一行ごとにコメント書くことになりそうな予感。

845 :837:05/01/30 16:09:21
>>844
かもね。。
まーでもリファクタリングしたいところもあるし
ちょっとやってみますわー。

846 :デフォルトの名無しさん:05/01/30 16:19:54
>>843質問者です

847 :tatata:05/01/30 17:42:09
はい。もちろん本気です。返事が遅れてすいません。
学校が休みに入り なにか楽しい事がやりたいと思い 考えましたが
なにぶん 知識を 技術もほとんど無く、困っていた時にここを知りました。
どうにか お願いできないでしょうか。

848 :デフォルトの名無しさん:05/01/30 18:08:30
>>847
既にあるからリサーチから始めなさい

849 :tatata:05/01/30 18:17:22
ネット上や 何かの本に 似たようなのが あるという事ですか?
ありがとう ございました。 探してみます。


850 :837:05/01/30 18:19:29
>>836
コメント書いた。これ以上詳しく書けと言われたらたぶんキレます。
http://www.wikiroom.com/java/?%A5%BD%A1%BC%A5%B9%C5%BD%A4%EA%C9%D5%A4%B13

851 :kkk:05/01/30 18:24:18
JAVA script で表示されている画像をどうにかして保存することはできないものでしょうか…


852 :デフォルトの名無しさん:05/01/30 18:24:32
>>850ありがとうございました。
(1)は実行できたのですが(2)はエラーがでて
実行できませんでした。どこがだめなんでしょう?

853 :837:05/01/30 18:29:18
>>852
5教科入れてないんじゃないの?

854 :デフォルトの名無しさん:05/01/30 18:29:30
といってエラーメッセージすら書かない奴が多いのはいい加減何とかならんのか。

855 :デフォルトの名無しさん:05/01/30 18:35:04
"30 1 180\n"
"23 0 165\n"


こういうデータがそれぞれ1行の配列として与えられたとき、
int Age[50000];
int Sex[50000];
int Height[50000];
この3つの変数に順に代入していくにはどういう文を書けばいいんですか?

てか Java には scanf みたいな機能って付いてないんですか?

856 :デフォルトの名無しさん:05/01/30 18:37:06
>>855
質問スレに池

857 :デフォルトの名無しさん:05/01/30 18:37:44
【Java宿題スレッド基本ルール 五箇条のご誓文】

@ 問題文は自己省略せずに、直接全部貼り付けてください。
   宿題&課題をそのまま丸投げするのが、一番好ましい提示法です。

A 数学問題は何々法でせよだけでなく、その解を出す為の数式を
   具体的に詳細に説明してください。
  ただ、数学問題の回答率は低いです・・・。

B 宿題&課題とその回答プログラムに対する質問はOKですが、
   それ以外の質問はここではしないでください。

C JavaScriptなど、他言語の課題はやめてください。

D もし自分の提示課題への回答プログラムが返って来たら、
  動いた動かなかった位の返レスをお願いします。

E コードをwikiに張ることは禁止です。


858 :デフォルトの名無しさん:05/01/30 18:39:40
>>857
六箇条じゃん

859 :デフォルトの名無しさん:05/01/30 18:40:04
>>854継承やったことないんで。。。
ScoreEx.java:76 'class'または'interface'がありません
import java.io.BufferedReader;
^
ScoreEx.java:77 'class'または'interface'がありません
import java.io.IOException;
^
ScoreEx.java:78 'class'または'interface'がありません
import java.io.InputStreamReader;
^
ScoreEx.java:79 'class'または'interface'がありません
import java.util.ArrayList;
^
ScoreEx.java:80 'class'または'interface'がありません
import java.util.Iterator;
^
ScoreEx.java:81 'class'または'interface'がありません
import java.util.StringTokenizer;
^


860 :837:05/01/30 18:41:27
837です。
>>859のフォロー頼む。。
もう疲れた。。

861 :デフォルトの名無しさん:05/01/30 19:30:47
>>847
Javaを実行できる環境を持っているのなら、簡単なサーバープログラムを
作りますが・・・

862 :デフォルトの名無しさん:05/01/30 19:33:41
>>847
Javaを実行&コンパイルできる環境を持っているのなら、
簡単なサーバープログラムを 作りますが・・・



863 :デフォルトの名無しさん:05/01/30 19:46:25
任意のURLにアクセスして、HTMLのソースを拾ってくるプログラムを作りたいのですが
URLConnectionとgetHeaderFieldをつかってヘッダ情報を取得するまでは出来ました。
そこから先、ドキュメント部分の情報を取得したいのですが、どうすればいいかわかりません。

864 :デフォルトの名無しさん:05/01/30 19:54:10
getOutputStream()を使いませう。

865 :デフォルトの名無しさん:05/01/30 19:56:53
>>864
URLConnectionとgetOutputStreamでgoogleったらそれらしきページが見つかりました
ありがとうございますm(  )m

866 :デフォルトの名無しさん:05/01/30 19:57:54
情報を入力してファイルに出力する処理を作成する。
レイアウトは下記の通りとし、情報の登録が1つ終わった
時点でプログラム終了させる。

入力画面:

情報を入力してください。

番号:

名前:

情報を登録しました。

出力ファイルレイアウト:
――――――――――――
番号:1
名前:aaa

番号:2
名前:bbb

番号:3
名前:ccc
――――――――――――

という課題です。どうかよろしくおねがいします。

867 :デフォルトの名無しさん:05/01/30 20:24:44
>>859お願いします

868 :デフォルトの名無しさん:05/01/30 21:14:22
>>867
ScoreEx.javaの76行より前には何が書いてあるの?
コピペミスじゃないの?
ScoreEx.javaというファイルを作ってWikiからそのままコピペすれば
そんなことにはならない。

869 :デフォルトの名無しさん:05/01/30 21:16:50
>>866
import java.io.*;
public class Q866 {
private static final File FILE = new File("file866.txt");
private static final String LINE_STRING = "――――――――――――";
StringBuffer buf = new StringBuffer();
String id;
String name;
public static void main(String[] args) {
Q866 self = new Q866();
try {
self.open(FILE);
self.start();
self.write(FILE);
} catch( IOException ioe ) {
ioe.printStackTrace();
}
}
private void open(File file) throws IOException {
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while( (line=br.readLine())!=null ) {
if( !line.equals(LINE_STRING) ) buf.append(line + "\n");
}
} catch( FileNotFoundException fnfe ) {
System.out.println( FILE.getName() + "がないので作成します。" );
if(file.createNewFile()) open(file);
}
}

870 :デフォルトの名無しさん:05/01/30 21:17:32
>>866
つづき
private void start() throws IOException {
System.out.println("情報を入力してください。");
System.out.print("番号:");
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
id = br1.readLine();
System.out.print("名前:");
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
name = br2.readLine();
}
private void write(File file) throws IOException {
buf.append("番号:" + id + "\n");
buf.append("名前:" + name + "\n\n");
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(file));
bw.write(LINE_STRING + "\n");
bw.write(buf.toString());
// bw.write("\b" + LINE_STRING + "\n");
bw.write(LINE_STRING + "\n");
} catch( IOException ioe ) {
ioe.printStackTrace();
} finally {
if( bw != null ) bw.close();
}
}
}

\bのバックスペースがうまくきかない。。

871 :デフォルトの名無しさん:05/01/30 21:49:47
>869
ありがとうございました。
やっと寝れそうです・・・


872 :デフォルトの名無しさん:05/01/30 21:57:16
>>868(2)だけコピペすればいいんですか?

873 :デフォルトの名無しさん:05/01/30 21:57:43
>>859
わざわざWikiに、(1)(2)(3)とファイルごとに項目を分けて書いてくれて、
各ファイルの名前までコメントに書いてくれた親切な回答を受け取っておきながら、
なんですべて一つのファイルにまとめるんだよ。

ScoreEx.javaは72行しかないのにどうやって76行目でエラー出すんだよ。魔法か?
念力か?

(1)(2)(3)それぞれ別ファイルに分けろや。

874 :デフォルトの名無しさん:05/01/30 22:17:31
>>873(2)だけ貼り付けてコンパイルすると
C:\java>javac ScoreEx.java
ScoreEx.java:4: シンボルを解決できません。
シンボル: クラス Score
場所 : ScoreEx の クラス
public class ScoreEx extends Score {
^
ScoreEx.java:16: シンボルを解決できません。
シンボル: メソッド getClass ()
場所 : ScoreEx の クラス
System.out.println( self.getClass().getName() );
^
ScoreEx.java:18: シンボルを解決できません。
シンボル: メソッド read_student ()
場所 : ScoreEx の クラス
self.read_student();
^
ScoreEx.java:32: シンボルを解決できません。
シンボル: 変数 super
場所 : ScoreEx の クラス
super.print_student_loop();
^
ScoreEx.java:34: シンボルを解決できません。
シンボル: メソッド getAllList ()
場所 : ScoreEx の クラス
int count = getAllList().size();
システムリソースが不足しています。
詳細は次のスタックトレースで調査してください。
java.lang.OutOfMemoryError


875 :デフォルトの名無しさん:05/01/30 22:25:10
おいおい、継承の問題なんだろうが。ちゃんと授業聞いているのか?

ScoreExはScoreを継承しているのだから、コンパイルするにも実行するにも
Score.classがクラスパスに必要。

クラスパスって何?とか言うつもりなら、とりあえずScore.javaもScoreEx.javaも
同じフォルダに置いて、先にScore.javaをコンパイルしてから、ScoreEx.javaを
コンパイルしろ。

876 :デフォルトの名無しさん:05/01/30 22:28:37
文字列を全てコピーするのってどうやるの?
String OTZ = 何か入ってる , orz = 何か入ってる;
OTZ = orz;
じゃだめでつか?

877 :デフォルトの名無しさん:05/01/30 22:31:11
>>875
C:\java>javac Score.java

C:\java>javac ScoreEx.java
ScoreEx.java:4: シンボルを解決できません。
シンボル: クラス Score
場所 : ScoreEx の クラス
public class ScoreEx extends Score {
^
ScoreEx.java:16: シンボルを解決できません。
シンボル: メソッド getClass ()
場所 : ScoreEx の クラス
System.out.println( self.getClass().getName() );
^
ScoreEx.java:18: シンボルを解決できません。
シンボル: メソッド read_student ()
場所 : ScoreEx の クラス
self.read_student();

878 :デフォルトの名無しさん:05/01/30 22:35:31
>>877
コマンドブロンプトで
set classpath
と打った結果を表示してくれ

879 :デフォルトの名無しさん:05/01/30 22:36:27
>>878
CLASSPATH=C:\Program Files\pcdNavi\bin\pcdnavi.zip;

880 :デフォルトの名無しさん:05/01/30 22:37:27
>>876
質問スレ行って。

881 :デフォルトの名無しさん:05/01/30 22:39:05
>>879
set classpath=%classpath%;.
と入力してからやってくれ

882 :881:05/01/30 22:39:45
あ〜
最後のドットを見落とさないように

883 :デフォルトの名無しさん:05/01/30 22:43:21
>>882できました。ありがとうございました。
つきやる時(コマンドプロンプトを終了した時、PCの電源切ったとき)は
またset classpath=%classpath%;.と入力しなくちゃいけないんですか?

884 :デフォルトの名無しさん:05/01/30 22:47:15
クラスパス良くわかってないみたいなのに、なんでクラスパスしてるんだろう?

885 :デフォルトの名無しさん:05/01/30 22:55:39
>>883
OSによって違ってくるんで環境変数なりautoexec.batなりでぐぐれ

886 :デフォルトの名無しさん:05/01/30 23:10:17
すいません>>866なんですが
せっかくやってもらったんですが
出力ファイルレイアウト:
――――――――――――
番号:1
名前:aaa

番号:2
名前:bbb

番号:3
名前:ccc
――――――――――――

の部分の上下のラインが邪魔といわれてしまって
自分で書き換えてみたのですが、実行するごとに
ファイルが上書きされてしまってうまくいかないんです。
どうにかならないでしょうかorz



887 :885:05/01/30 23:11:08
すいません>>883はアンカーミスです

888 :デフォルトの名無しさん:05/01/30 23:15:49
【質問です】
winXPで、tomcatを動かそうとしたんです。
JAVA_HOMEが設定されていないので、tomcat起動できないんですよ。

でautoexec.batを捜したら、ないんですよ。。。



みなさんは、どこに設定してますか?

889 :デフォルトの名無しさん:05/01/30 23:17:01
>>888
システムプロパティ→環境変数

890 :デフォルトの名無しさん:05/01/30 23:17:22
config.sysはありましたか?

891 :デフォルトの名無しさん:05/01/30 23:21:06
>>889, >>890
おお、configもない!!
ま、configはすでに実質的に書き換えることなく7,8年過ごしていたから、
違和感はなかったです、はい。

やっぱ環境変数なのですね、ありがとうございます。
少し、システマティックな人間にverUpしてみます。

892 :869:05/01/30 23:24:59
>>886
フィールド宣言の
private static final String LINE_STRING = "――――――――――――";
を削除。

open()メソッドの
if( !line.equals(LINE_STRING) )
を削除。

write()メソッドの
bw.write(LINE_STRING + "\n");
を削除(2箇所あります)。


でどーでしょ。

つーか出題者が悪いよコレは。。。

893 :885:05/01/30 23:33:23
>>892
おおおおおお、できました。
余計な部分まで削除してしまったみたいです。
たびたびの質問に回答くださって
ほんとにありがとうございました。



894 :デフォルトの名無しさん:05/01/31 00:33:22
どうかお願いします...

国語、数学、英語各200人分(学籍番号1〜200)の成績データファイル
(score.dat)をプログラムに読み込み、以下の条件を満たす、
また処理を行うことが可能な成績処理プログラムを作成しなさい。
1.個人の3教科の平均点(小数点第2位を四捨五入)の算出と表示
2.各教科の平均点の算出(小数点第2位を四捨五入)
3.各教科の最高点、最低点の検出
4.3教科の合計点数の良い順に並べ替え、学籍番号、各教科得点、
  合計点数と並べて表示させる
5.メニュー画面を設ける
6.各処理においてメソッドを分割し、オブジェクト指向を確立したプログラムとする

読み込むデータファイルscore.datは
Japanese
72
99
Math
88
48
English
13
77
こんな縦一列のデータです。数字は省略しましたが各200ずつ計600で、
データ数はJapanese・Math・Englishの行含め全部で603です。
上から順に出席番号1番2番・・・200番となります。

外部から読み込んだファイルデータ、しかも数値と文字の混じったデータの
数値だけ抜き出しての配列変換の仕方がまずわかりません。
ご教授下さい。

895 :894:05/01/31 00:35:50
ちなみにscore.datのファイルです↓
ttp://jp.y42.briefcase.yahoo.co.jp/bc/hsawqipg/lst?&.dir=/%a5%de%a5%a4%a5%c9%a5%ad%a5%e5%a5%e1%a5%f3%a5%c8&.src=bc&.view=l&.last=1

896 :デフォルトの名無しさん:05/01/31 01:00:11
>オブジェクト指向を確立したプログラム
歴史に名を刻むのか。

897 :デフォルトの名無しさん:05/01/31 01:36:48
各処理においてメソッドを分割し、オブジェクト指向を確立するって
それはむしろ構造化プログラミングの範囲内だと思うのだが・・・

898 :デフォルトの名無しさん:05/01/31 12:34:45
クライアント二人が接続してゲーム対戦させるサーバーを作れ。
ゲームの種類は自由にするとの課題が出ました。
お願いします


899 :894:05/01/31 21:17:09
一応、外部ファイルの教科項目をIFで除いて
成績だけ読み込んで配列に割り当てたんですが、
文字列型のデータを数値に変換する方法がわかりません。

import java.io.*;

public class java05 {

public static void main(String args[]) throws IOException{
String ss;
int i=0, j=0, k=0, m=0, n=0, x=0;
int data[] =new int[200];
String a[][] =new String[4][201];

BufferedReader fin = new BufferedReader(
new FileReader("score.dat"));

for(i=1; i<=3; i++){
for(j=0; j<=200; j++){
ss=fin.readLine();
if(j!=0){
a[i][j]=ss;
System.out.println("("+i+","+j+")="+a[i][j]);
}
}
}
fin.close();
}
}

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

900 :デフォルトの名無しさん:05/01/31 22:00:47
>>899
Integer.parseInt()
などを使ってみてはいかがか。

901 :デフォルトの名無しさん:05/01/31 22:21:24
>>894
>5.メニュー画面を設ける
正直この一行でやる気が一気になくなる。

902 :894:05/01/31 22:33:13
>>900
ありがとうございます。この2行追加したらちゃんと
数値に変換できました。
int data[][] =new int[4][201];
data[i][j]=Integer.parseInt(ss);

>>901
申し訳ありません…
各処理ごとのメソッドだけでもお助けくださると
嬉しいです

903 :901:05/01/31 22:46:35
>>902
途中までやったんで後は神を待って。4と5がまだ。
import java.io.*; import java.util.*;
public class Q894 {
private static final File FILE = new File("score.dat");
private static final String JAPANESE = "Japanese";
private static final String MATH = "Math";
private static final String ENGLISH = "English";
private static final int HEAD_COUNT = 200;
ArrayList japaneseList = new ArrayList(HEAD_COUNT);
ArrayList mathList = new ArrayList(HEAD_COUNT);
ArrayList englishList = new ArrayList(HEAD_COUNT);
public static void main(String[] args) {
Q894 self = new Q894();
try {
self.read(FILE);
for( int i=0; i<HEAD_COUNT; i++ ) {
System.out.println( (i+1) + "さんの平均点:" + Math.round(self.calculatePersonScore(i)*10.0/3)/10.0 );
}
System.out.println( "国語平均点:" + self.calculateScoreAverage(self.japaneseList) );
System.out.println( "数学平均点:" + self.calculateScoreAverage(self.mathList) );
System.out.println( "英語平均点:" + self.calculateScoreAverage(self.englishList) );
System.out.println( "国語最高点:" + self.getMax(self.japaneseList) );
System.out.println( "国語最低点:" + self.getMin(self.japaneseList) );
System.out.println( "数学最高点:" + self.getMax(self.mathList) );
System.out.println( "数学最低点:" + self.getMin(self.mathList) );
System.out.println( "英語最高点:" + self.getMax(self.englishList) );
System.out.println( "英語最低点:" + self.getMin(self.englishList) );
} catch( IOException ioe ) {
ioe.printStackTrace();
}
}

904 :901:05/01/31 22:47:11
つづき
private void read(final File file) throws IOException {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
String line;
int i=0; int j=0; int k=0;
// 国語読み込み
if(!br.readLine().equals(JAPANESE)) System.exit(1);
while( !(line=br.readLine()).equals(Q894.MATH) ) {
japaneseList.add( new Integer(line) );
i++;
}
if( i!=HEAD_COUNT ) throw new IllegalArgumentException("国語の受験者数が変です");
// 数学読み込み
while( !(line=br.readLine()).equals(Q894.ENGLISH) ) {
mathList.add( new Integer(line) );
j++;
}
if( j!=HEAD_COUNT ) throw new IllegalArgumentException("数学の受験者数が変です");
// 英語読み込み
while( (line=br.readLine()) != null ) {
englishList.add( new Integer(line) );
k++;
}
if( k!=HEAD_COUNT ) throw new IllegalArgumentException("英語の受験者数が変です");
} catch( FileNotFoundException fnfe ) {
fnfe.printStackTrace();
} catch( IOException ioe ) {
ioe.printStackTrace();
} catch( NumberFormatException nfe ) {
nfe.printStackTrace();

905 :901:05/01/31 22:48:09
つづき
} catch( IllegalArgumentException iae ) {
iae.printStackTrace();
} finally {
if( br!=null ) br.close();
}
}
private int calculatePersonScore(int pos) {
int japaneseScore = ((Integer)japaneseList.get(pos)).intValue();
int mathScore = ((Integer)mathList.get(pos)).intValue();
int englishScore = ((Integer)englishList.get(pos)).intValue();
return japaneseScore+mathScore+englishScore;
}
private double calculateScoreAverage(ArrayList scoreList) {
Iterator iterator = scoreList.iterator();
int sum = 0;
while(iterator.hasNext()) {
sum += ((Integer)iterator.next()).intValue();
}
return Math.round( sum*10.0 / scoreList.size() )/10.0;
}
private int getMax(ArrayList scoreList) {
Integer[] scores = (Integer[])scoreList.toArray(new Integer[0]);
Arrays.sort(scores);
return scores[HEAD_COUNT-1].intValue();
}
private int getMin(ArrayList scoreList) {
Integer[] scores = (Integer[])scoreList.toArray(new Integer[0]);
Arrays.sort(scores);
return scores[0].intValue();
}
}

906 :デフォルトの名無しさん:05/02/01 00:13:56
丸投げですがお願いいたします

問題1
コマンドライン引数として受け取った四則演算を行い
その結果を表示するプログラムCalc.javaを作成せよ
※掛け算は実行できなくて良い
※引数は、3つ固定(数値、記号、数値)
※Swich文を使う

実行例1
>java Calc 1 + 2
3

実行例2
>java Calc 5 + 2
2.5

実行例3
>java Calc 1.2 - 0.3
0.9

---------------------------------------------------
問題2
コマンドライン引数として整数を1つ(文字列として)受け取り
その文字列尾整数に変換し5倍した値を表示するプログラム
Parse5.javaを作成せよ
※Integer.parseIntメソッドなどを利用してはいけない(手動で)
※整数以外が与えられた場合のことは考えなくても良い

実行例
>java Parse5 123
612

907 :894:05/02/01 00:20:05
>>901
どうもありがとうございます!
平均点、最高点、最低点がきっちり出ました!

しかし本当に、、申し訳ないのですが、
内容が私には少し高度すぎてわかりません…
フローチャートを描かなくてはならないので、内容をそれなりに
把握できないとだめなんです。
ArrayListもselfもわかりません。まだ入門レベルの本が終わった位です。
もう少し…易しくしてください…

908 :デフォルトの名無しさん:05/02/01 10:50:49
ハァハァ
大丈夫。おじさんはやさしいよ

909 :デフォルトの名無しさん:05/02/01 11:10:06
課題1

次の処理を行うプログラムを作成しなさい。なお、ソースファイル名はTest1.javaにしてください。
@背景色が灰色のアプレットのほぼ中央に、「ネットワークプログラミング」という文字列を黄色で描き、
その文字列の周囲を白色の線で囲みます。
以上です。よろしくおねがいします。

910 :>>909:05/02/01 15:18:37
//<applet code="Test1.class" width="300" height="300"></applet>
import java.applet.Applet;
import java.awt.*;
public class Test1 extends Applet{
private Image img;
public void init(){
Dimension d = getSize();
int width = d.width, height = d.height;
img = createImage(width, height);
int centerX = width/2;
int centerY = height/2;
Graphics g = img.getGraphics();
g.setColor(Color.GRAY);
g.fillRect(0, 0, width, height);
g.setColor(Color.YELLOW);
g.drawString("ネットワークプログラミング", centerX-75, centerY+4);
g.setColor(Color.WHITE);
int sx = 100, sy = 15;
g.drawRect(centerX-sx, centerY-sy, sx*2, sy*2);
}
public void paint(Graphics g){
g.drawImage(img, 0, 0, this);
}
public void update(Graphics g){
paint(g);
}
}


911 :GPS:05/02/01 16:47:36
今、EZアプリでGPSを使って現在地の経度・緯度を求めるプログラムと
携帯の画面に現在地を表示させるプログラム(経度・緯度はプログラムに書いて)を
作ったんですけど、誰かこの2つを1つのプログラムにしてくれませんか?
GPSを使って現在地の経度・緯度を求めるプログラム(GPSReader.java)
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import com.kddi.system.*;
public class GPSReader extends MIDlet implements CommandListener{
GPSCanvas gpsCanvas;
Command exitCommand, gpsCommand;
Display display;
public GPSReader(){
display = Display.getDisplay(this);
exitCommand = new Command("Exit",Command.EXIT,1);
gpsCommand = new Command("GPS",Command.SCREEN,1);

gpsCanvas = new GPSCanvas(); gpsCanvas.setCommandListener(this);
gpsCanvas.addCommand(exitCommand); gpsCanvas.addCommand(gpsCommand);
display.setCurrent(gpsCanvas);}
public void startApp(){ } public void pauseApp(){ } public void destroyApp(boolean unconditional){ }
public void commandAction(Command command,Displayable screen){
if(command==exitCommand){
destroyApp(false); notifyDestroyed();
}if(command==gpsCommand){
gpsCanvas.showLocation();
}}


912 :GPS:05/02/01 16:49:53
(GPSReader.java)の続きです。
public class GPSCanvas extends Canvas
{
Location location;
String latitude = "", longitude = "";
Font font;
int width, height;
public GPSCanvas(){
font = Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_PLAIN,Font.SIZE_SMALL);
width = getWidth(); height = getHeight();}
public void showLocation(){
location = GpsLocation.getLocation();
latitude = location.getLat(); longitude = location.getLon(); repaint();
}public void paint(Graphics g) {
g.setColor(255,255,200); g.fillRect(0,0,width,height);
g.setColor(0,0,0); g.setFont(font);
g.drawString("位置情報取得結果",width/2,30,Graphics.HCENTER | Graphics.VCENTER );
g.drawString("緯度",width/2,50,Graphics.HCENTER | Graphics.VCENTER );
g.drawString(latitude,width/2,60,Graphics.HCENTER | Graphics.VCENTER );
g.drawString("経度",width/2,80,Graphics.HCENTER | Graphics.VCENTER );
g.drawString(longitude,width/2,90,Graphics.HCENTER | Graphics.VCENTER );
}}}

913 :GPS:05/02/01 16:54:09
これがもう1つのプロです。
携帯の画面に現在地を表示させるプログラム(GraphicsCanvas.java)
import javax.microedition.lcdui.*;
final class GraphicsCanvas extends Canvas {
private Image image; private int sx = 0;
private int sy = 0; private int sc = 10;
public GraphicsCanvas() {
try {image=Image.createImage("/Img2.png");
} catch (Exception e) {}}
public void paint(Graphics g) {
g.setColor(21,67,55);
g.fillRect(0,0,getWidth(),getHeight());
g.drawImage(image,getWidth()/2,getHeight()/2,g.VCENTER|g.HCENTER);
g.setColor(21,67,55);
g.fillArc(sx+((131*60*60*100+36*60*100+4431)-(131*60*60*100+36*60*100+4141))*130/510,sy+((33*60*60*100+10*60*100+1710)-(33*60*60*100+10*60*100+1427))*140/462,5,5,0,360);
} //*****スクロール処理*****
protected void keyPressed(int code){
int pushedkey = getGameAction(code);
switch(pushedkey){
case UP: if(sy>-100) sy-=sc; break; case DOWN: if(sy<100) sy+=sc; break;
case LEFT: if(sx>-100) sx-=sc; break; case RIGHT: if(sx<100) sx+=sc; break;
default: return;} repaint();}}
##座標を求める計算の説明##
(131*60*60*100+36*60*100+4431)-(131*60*60*100+36*60*100+4141))*130/510
(現在地の経度-画面の左上の経度)*画面の横のドット数/画面の横の経度の差
sy+((33*60*60*100+10*60*100+1710)-(33*60*60*100+10*60*100+1427))*140/462
(画面の左上の緯度-現在地の緯度)*画面の縦のドット数/画面の縦の緯度の差
ほんと、誰かお願いします!!

914 :デフォルトの名無しさん:05/02/01 19:44:42
910さんありがとうございます。
学校でしかjavaできないので学校で試したいと思います。
javaについていけなくて苦戦しています。もっと勉強します。
どうもありがとうございました。

915 :デフォルトの名無しさん:05/02/01 20:32:54
>>906
// Calc.java
import java.math.BigDecimal;
public class Calc {
public static void main(String[] args) {
if( args.length!=3 ) System.exit(1);
BigDecimal v1=null, v2=null;
char ope = 0;
v1 = new BigDecimal(args[0]);
if( args[1].length()!=1 ) System.exit(1);
ope = args[1].charAt(0);
v2 = new BigDecimal(args[2]);
switch(ope) {
case '+': System.out.println( v1.add(v2).toString() ); break;
case '-': System.out.println( v1.subtract(v2).toString() ); break;
case '/': System.out.println( v1.divide(v2).toString() ); break;
}
}
}

916 :915:05/02/01 20:34:58
>>906
// Parse5.java
public class Parse5 {
public static void main(String[] args) {
int result = 0;
boolean negative = false;
int i = 0, max = args[0].length();
int limit;
int multmin;
int digit;
if (args[0].charAt(0) == '-') {
negative = true;
limit = Integer.MIN_VALUE;
i++;
} else limit = -Integer.MAX_VALUE;
multmin = limit / 10;
if (i < max) {
digit = Character.digit(args[0].charAt(i++), 10);
result = -digit;
}
while (i < max) {
digit = Character.digit(args[0].charAt(i++), 10);
result *= 10;
result -= digit;
}
if (negative) System.out.println(result * 5);
else System.out.println(-result * 5);
}
}
ちなみにInteger.parseInt()メソッドのほぼコピペ。例外処理は取り除いた。
ワケわからん出題者へのアンチテーゼとして。
品質が確保されているコードを使ったらアカンという意味が分からん。

917 :906:05/02/01 22:29:21
>>915-916
どうもありがとうございました
しかし、915のソースが

java.lang.Error: コンパイル問題が未解決です。
型 BigDecimal のメソッド divide(BigDecimal, int) は引き数 (BigDecimal) に適用できません。

というエラーでコンパイル通りませんでした
出来ればまた力添えお願いできませんでしょうか

918 :915:05/02/01 23:20:45
>>917
BigDecimal#divide(BigDecimal)は1.5からのメソッドなんだそうです。
俺が今の>>915に手を加えると
divide(BigDecimal)の中を実装して性格の悪いソースになるから、
1.5をインストールするか他の人に頼んでください。

919 :デフォルトの名無しさん:05/02/02 00:37:34
サイズが495KBだから次スレ立てよう。

>>21-23によるとテンプレ間違ってるらしいから修正できるひと降臨キボン

920 :デフォルトの名無しさん:05/02/02 03:34:51
java

921 :w:05/02/02 03:45:11
class Calc{
static double average(double num[],int n){
double average = 0;
for(int i=0;i<n;i++){
average += num[i];
}
return average/n;
}
static double varience(double num[],int n){
double varience = 0;
for(int i=0;i<n;i++){
varience += Math.pow(num[i]-average(num,n),2);
}
return varience/n;
}
static double standard_deviation(double num[],int n){
return Math.sqrt(varience(num,n));
}
}

922 :w:05/02/02 03:48:45
921のプログラムについてテストで問われるそうですが、どんなことを抑えておけばよいでしょうか?
他にも4つプログラムがあるんで、よろしければアドバイスいただきたく思います。明後日テストなのでヤバいです...

923 :デフォルトの名無しさん:05/02/02 05:06:36
>>921-922
問題
1.何を求めるプログラムか
2.誤差について考察せよ


924 :無職33歳 ◆9r1KO5EG3I :05/02/02 06:54:20
>>923
average >> num[i] の時、どうなるかだな…
num[i] ≒ average(num,n) の時も、i が小さい(varienceも小さい)時と i が n に近付いた(varienceも大きい)時にもどうなるかだな…

(1 * 10 ** 10) + (1 * 10 ** (-6)) がどうなるか…

925 :無職33歳 ◆9r1KO5EG3I :05/02/02 06:59:12
>>923
何を求めるかって、そりゃぁσに決まってるだろ!!
無職(日雇い建築現場作業員)の漏れでもそんな事位知ってるぞ!!!

926 :906:05/02/02 08:53:16
>>918
なるほど、そう言うことですか
では1.5を導入してみたいと思います
ご説明ありがとうございました

927 :デフォルトの名無しさん:05/02/02 17:13:49
投げに近いですが助力お願いしますorz


課題:キーワードから指定された音楽ファイルをwwwから検索し再生するプログラムを作成せよ。
要求1:ユーザインターフェースはGUIとし、以下を実装せよ。
・キーワード(日本語)入力欄 ・検索開始ボタン ・検索結果のヒット数表示欄
・検索結果のURLを表示する欄 ・音楽ファイル再生ボタン ・停止ボタン 
・次の音楽ファイルのURL表示ボタン(検索結果が多数の場合は1つだけURLを表示し、このボタンを押すことで
次の音楽ファイルのURLを表示)

要求2:検索は、ユーザから与えられたキーワードを既存のロボット型検索エンジンにリダイレクトして行うこと。
但し、ロボット型検索エンジンは本プログラム作成に適したものを選ぶこと(GoogleはJavaプログラムからアクセスできないので注意)

要求3:キーワードでロボット型検索エンジンに検索をかけた場合、音楽ファイルを含まないページなどがヒットすることも考えられる。
そこで、次のヒューリスティックを利用し、絞込みを行い、音楽ファイルを抽出すること
・「<embed src="URL">がページに含まれていてURLの末尾の拡張子が音の拡張子である」かつ
「<title>TEXT</title>のTEXTにキーワードが含まれている」
・「検索エンジンが返してきたページ内に<a href="URL">TEXT</a>が含まれていてURLの末尾の拡張子が音楽ファイルの拡張子」
かつ「TEXTにキーワードが含まれている」
・「検索エンジンが返してきページに<a href="URL"><img src="URL1" [alt="TEXT"]></a>が含まれていてURL
の末尾の拡張子が音楽ファイルの拡張子」かつ「ALT情報があればALT情報にキーワードが含まれている。
省略されている場合は<title>TEXT</title>のTEXTにキーワードが含まれている」
以上のどれかを満たす場合にURLをキーワードに対応する音楽ファイルと認定する。

要求4:複数キーワードには対応しなくてよい。また、非常に多くの検索結果が返ってきた場合は
適当な数に対してのみ絞込み処理を行えばよい


GUI部分とかはできてるんですが肝心の中身がサッパリです…
どうかよろしくお願いします

928 :デフォルトの名無しさん:05/02/02 18:39:36
M-x
のMってキーボードの何やねん?

929 :デフォルトの名無しさん:05/02/02 18:42:45
Alt

930 :デフォルトの名無しさん:05/02/02 19:19:24
メタキー。UNIX系の機種にはあった。
Windows系には無いから止むを得ずAltになった。


931 :日雇建築現場作業員 ◆9r1KO5EG3I :05/02/02 19:28:16
>>928 >>930
<ESC>キーを押して放しても同じ動作するね。
MetaキーってSunのキーボードで◆のやつだったっけ?

932 :デフォルトの名無しさん:05/02/02 20:35:23
string型の配列をchar型の配列に変換するのにtoCharArray()メソッドをつかって
やってみたのですがうまくいきません。このメソッドではできないのでしょうか?

933 :デフォルトの名無しさん:05/02/02 20:42:52
はい出来ません

501 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)