【初心者】Java の宿題はここで答えます【歓迎】
1 :
M.B. :
04/11/16 07:50:11
次は、part50くらいにしておきましょうか。 【実は】長老がJavaの宿題に答えます part50【雑談】
3 :
前スレ982 :04/11/16 08:25:18
スレ変わったんで、もう一回カキコします。 <<中間課題1>> 〜図形描画命令を理解する図形描画ソフト 第二回から第七回までの範囲の理解を確認するために課題を実施します。 これは成績評価の対象になります。全員提出してください。 図形描画命令を解析して実行するプログラムDrawCommand.javaを作成 しましょう。 その際、復習課題で作成したプログラムDrawObject.javaをパッケージ として改造しておき(「演習問題解答例のBBSに提示します)、 DrawCommand.javaからDrawObject.javaのクラスを使うようにしましょう。 また、DrawCommand.javaでは図形描画命令をファイルから読み込む様 にしましょう。
//Name : DrawObject.java //Date : 2003/10/04 package prog2.DrawObject; class Square { private int x, y, l; private char pattern; void setCoordinateSquare(int nx, int ny, int nl){ this.x = nx; this.y = ny; this.l = nl; } void setPattern(char c){ this.pattern = c; } void drawSquare(Screen s){ int i,j; for(j=this.y-1;j<this.y+this.l-1;j++){ for(i=this.x-1;i<this.x+this.l-1;i++){ s.drawPoint(i,j,pattern); } } } }
4の続き class Rectangle { private int x, y, w, h; private char pattern; void setCoordinateRectangle(int nx, int ny, int nw, int nh){ this.x = nx; this.y = ny; this.w = nw; this.h = nh; } void setPattern(char c){ this.pattern = c; } void drawRectangle(Screen s){ int i,j; for(j=this.y-1;j<this.y+this.h-1;j++){ for(i=this.x-1;i<this.x+this.w-1;i++){ s.drawPoint(i,j,pattern); } } } }
5の続き class Screen { private char screen [][] = new char [10][]; Screen(){ this.init(); } void init(){ int i,j; for(i=0;i<10;i++){ screen[i] = new char[10]; for(j=0;j<10;j++){ screen[i][j]='x'; } } } void flush(){ int i,j; for(j=0;j<10;j++){ for(i=0;i<10;i++){ System.out.print(this.screen[i][j]+" "); } System.out.println(); } } void drawPoint(int x, int y, char c){ this.screen[x][y] = c; } }
○図形描画命令として以下のようなものを考えます。 形式:"図形タイプ,X座標,Y座標,パラメータ1,パラメータ2,模様," 図形タイプ: r - 長方形(rectangle) s - 正方形(square) X座標、Y座標: 長方形・正方形の場合は左上の角のX座標、Y座標 パラメータ1: 長方形・正方形の場合は横の長さ パラメータ2: 長方形・正方形の場合は縦の長さ 模様: 1byteのテキストで表現される模様 例:"r,3,2,5,3,o" ( (3,2)を左上の角とする横5、縦3の長方形を'o'の模様で作成する) ○図形描画命令の受け取り方は以下の3段階で実装してみる といいでしょう。 (1) プログラム内部で受け取る(連続して複数の命令を受け取る) (2) 引数から受け取る(一度に一つの命令だけを受け取る) 例: %java DrawCommand r,3,2,5,3,o (3) ファイルから読み込む(同時に複数の命令を受け取る) 最終的に提出して欲しいのは(3)の段階のものですが、実装 ができなかった場合は(1)や(2)のものでも結構です。
○図形描画命令の解析 〜StringTokenizerクラスの使い方 StringTokenizer st = new StringTokenizer(str,","); if(st.nextToken().equals("r")){//分割された文字列が"r"と等しいなら int x = Integer.parseInt(st.nextToken()); int y = Integer.parseInt(st.nextToken()); int w = Integer.parseInt(st.nextToken()); int h = Integer.parseInt(st.nextToken()); char pattern = st.nextToken().charAt(0); }else if(st.nextToken().equals("s")){//分割された文字列が"s"と等しいなら //以下省略 } このようにして、"StringTokenizer"という、文字列を分割 する便利なクラスを利用します。StringTokenizerクラスの nextToken()メソッドは、分割された文字列を一つずつ先に 進めることができます。この戻り値はStringクラスなので、 その後でcharAt()メソッドを使えば分割された文字列の最 初の一文字をとってくることもできます。 詳しくは教材の"JAVA API"ボタンからAPI仕様にアクセス して調べて下さい。 という宿題を出されました。まったくのさっぱり解りません。誰かお願いします
9 :
M.B. :04/11/16 09:11:04
つまりキャラクタディスプレイの仮想画面に 文字を使って図形を描画する 仮想言語をStringTokenizerを利用して書けと。 …… C じゃないんだからさ。 【問題点その1】 Cなら図形文字の描画サイズとバイト長がたまたま一致するから いいのだが(そんかし2バイト系文字の先頭文字をうっかり書き潰すと 文字化け問題が発生するが) Java のキャラクタには全角文字と半角文字の両方がある。それをどうする? 【問題点その2】 Java の StringTokenizer は、マシン間でテキスト形式のデータを やりとりするためのもので、人間の書いたコード(たとえばプログラム)を 扱おうとすると、かなり機能が不足している。 r,3,2,5,3,o だって、r((3,2),[5*3],'o')とか書きたいだろ? コメントだって入れたいだろ? 出題のポイントを明らかにするように、出題者に言ってこい。
おはようございます前スレ938です。 昨日M.B.さんにいたたいだプログラムは実行の時に 結果が2.999999999..とかなってしまいうまく実行することが出来ませんでした。 以下にある文章をフレームに表示したいのですがどうすればいいでしょうか。 行列 A = [ xx.x xx.x xx.x xx.x xx.x ] [ xx.x xx.x xx.x xx.x xx.x ] [ xx.x xx.x xx.x xx.x xx.x ] [ xx.x xx.x xx.x xx.x xx.x ] ベクトル b (の転置) = [ xx.x xx.x xx.x xx.x xx.x ] --- 計算結果 --- ベクトル c (の転置) = [ xx.x xx.x xx.x xx.x ]
11 :
前スレ938続き :04/11/16 09:37:03
僕が苦し紛れに書いたプログラムを載せます。 g.drawStringのところでシンボルを解決できない、とエラーがでます。 import java.awt.*; import java.awt.event.*; public class HW10 extends Frame{ public HW10(){ setSize(400,300); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } public void paint(Graphics g){ double [][] a = { { 1.5, 2, 3, 4}, { 5, 6, 7, 8}, { 9,10.4,11,12}, {13,14.3,15,16}, {17.9,18,19,20.6}}; double [] b = {1,2.9,3,4}; double [] c = new double[a.length]; vector(a,b,c); g.drawString("行列A="); printMatrix(a); System.out.println("ベクトルb="); printVector(b); System.out.println("ベクトルc="); printVector(c); }
12 :
前スレ938続き :04/11/16 09:37:35
public static void vector( double[][] a, double[] b, double[] s){ for(int i = 0;i < a.length;i += 1){ double c = 0.0; for(int j = 0;j < a[0].length; j++){ c += a[i][j] * b[j]; } s[i] = c; } } public static void printMatrix( double [][] matrix){ for(int i = 0;i < matrix.length;i += 1){ System.out.print(" ("); for(int j = 0;j < matrix[i].length;j += 1){ System.out.print(" "+ matrix[i][j]); } System.out.println(" )"); } } public static void printVector(double [] vector){ System.out.print("("); for(int i = 0;i < vector.length;i++) { System.out.print(" "+vector[i]); } System.out.println(" )"); } }
中身はみてないけど、エラー箇所だけ。 パラメータが足りないよ。 drawString(String str, int x, int y) ね。
>>13 さん、ありがとうございます。
パラメータを足して書いてみましたが、mainがないとエラーがでます。
import java.awt.*;
import java.awt.event.*;
public class HW10 extends Frame{
public HW10(){
setSize(400,300);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public void paint(Graphics g){
double [][] a = { { 1.5, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9,10.4,11,12},
{13,14.3,15,16},
{17.9,18,19,20.6}};
double [] b = {1,2.9,3,4};
double [] c = new double[a.length];
vector(a,b,c);
15 :
10続き :04/11/16 10:57:01
g.drawString("行列A=",10,80); printMatrix(a); g.drawString("ベクトルb=",10,200); printVector(b); g.drawString("ベクトルc=",10,300); printVector(c); } public static void vector( double[][] a, double[] b, double[] s){ for(int i = 0;i < a.length;i += 1){ double c = 0.0; for(int j = 0;j < a[0].length; j++){ c += a[i][j] * b[j]; } s[i] = c; } } public static void printMatrix( double [][] matrix){ for(int i = 0;i < matrix.length;i += 1){ System.out.print(" ("); for(int j = 0;j < matrix[i].length;j += 1){ System.out.print(" "+ matrix[i][j]); } System.out.println(" )"); }} public static void printVector(double [] vector){ System.out.print("("); for(int i = 0;i < vector.length;i++) { System.out.print(" "+vector[i]); } System.out.println(" )"); } }}
>>8 Swingで描くプログラムつくってみましたが、長すぎるし設計が微妙です。
欲しい!って言ってくれたら書きます。
いらないならスルー希望。
mainの問題は解決できました。 すみません、これが最後の質問になると思います。 下のプログラムを実行した時に、 フレーム側に計算結果も出るようにしたいです。 import java.awt.*; import java.awt.event.*; public class HW10 extends Frame{ public HW10(){ setSize(500,500); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } public void paint(Graphics g){ double [][] a = { { 1.5, 2, 3, 4}, { 5, 6, 7, 8}, { 9,10.4,11,12}, {13,14.3,15,16}, {17.9,18,19,20.6}}; double [] b = {1,2.9,3,4}; double [] c = new double[a.length]; vector(a,b,c);
18 :
デフォルトの名無しさん :04/11/16 11:55:05
g.drawString("行列A=",10,80); g.drawString("ベクトルb=",10,200); g.drawString("ベクトルc=",10,300); } public static void vector( double[][] a, double[] b, double[] s){ for(int i = 0;i < a.length;i += 1){ double c = 0.0; for(int j = 0;j < a[0].length; j++){ c += a[i][j] * b[j]; } s[i] = c; } } public static void printMatrix( double [][] matrix){ for(int i = 0;i < matrix.length;i += 1){ for(int j = 0;j < matrix[i].length;j += 1){ System.out.print(" "+ matrix[i][j]); } System.out.println(" )"); } } public static void printVector(double [] vector){ System.out.print("("); for(int i = 0;i < vector.length;i++) { System.out.print(" "+vector[i]); } System.out.println(" )"); } public static void main(String[] args){ Frame w=new HW10(); w.show(); }}
どんな形式で表示したいのか分からんけど、 単に計算結果だけを表示したいならこれじゃダメなの? for (int i=0; i<c.length; i++) { g.drawString("ベクトルc=" + String.valueOf(c[i]), 10, 300 + i * 20); }
>>19 さん
以下のような文をフレームに表示したいです。
行列 A =
[ xx.x xx.x xx.x xx.x xx.x ]
[ xx.x xx.x xx.x xx.x xx.x ]
[ xx.x xx.x xx.x xx.x xx.x ]
[ xx.x xx.x xx.x xx.x xx.x ]
ベクトル b (の転置) =
[ xx.x xx.x xx.x xx.x xx.x ]
--- 計算結果 ---
ベクトル c (の転置) =
[ xx.x xx.x xx.x xx.x ]
for (int i=0; i<c.length; i++) {
g.drawString("ベクトルc=" + String.valueOf(c[i]), 10, 300 + i * 20);
}
の部分もどこに入れてどこを削ればいいのかわからない状況です。
お願いします。
import java.io.*; import java.util.*; public class DrawCommand { static int mode; static final int N_MODE=0; static final int R_MODE=1; static final int S_MODE=2; static final int E_SYNTAX=0; static final int E_RANGE=1; static final int E_PATTERN=2; static final int E_OPE=3; static List list=new ArrayList(); static Screen screen=new Screen(); public static void main(String[] args) { StreamTokenizer st=null; try { FileInputStream fi=new FileInputStream(args[0]); st=new StreamTokenizer(new InputStreamReader(fi)); st.whitespaceChars(',', ','); } catch (Exception e) { System.out.println("ファイル読み込み不可能エラー"); } try { parseText(st); } catch (Exception e1) { System.out.println("例外発生でエラー終了"); } }
static void parseText(StreamTokenizer st) throws Exception { while(st.nextToken()!=StreamTokenizer.TT_EOF) { if(mode==R_MODE) { switch(list.size()) { case 0: case 1: case 2: case 3: if(st.ttype!=StreamTokenizer.TT_NUMBER) { errorOperation(0, st); continue; } if(st.nval<1 || st.nval>10) { errorOperation(1, st); continue; } list.add(new Integer((int)st.nval)); break; case 4: if(st.ttype!=StreamTokenizer.TT_WORD) { errorOperation(0, st); continue; } if(st.sval.length()!=1) { errorOperation(2, st); continue; } Rectangle r=new Rectangle(); r.setCoordinateRectangle(((Integer)list.get(0)).intValue(), ((Integer)list.get(1)).intValue(), ((Integer)list.get(2)).intValue(), ((Integer)list.get(3)).intValue()); r.setPattern(st.sval.charAt(0)); try { r.drawRectangle(screen); screen.flush(); System.out.println(); } catch (Exception e) { System.out.println("座標範囲オーバーエラー検出"); } list.clear(); mode=N_MODE; screen=new Screen(); } }
23 :
>>3 その3 :04/11/16 13:08:22
else if(mode==S_MODE) { switch(list.size()) { case 0: case 1: case 2: if(st.ttype!=StreamTokenizer.TT_NUMBER) { errorOperation(E_SYNTAX, st); continue; } if(st.nval<1 || st.nval>10) { errorOperation(E_RANGE, st); continue; } list.add(new Integer((int)st.nval)); break; case 3: if(st.ttype!=StreamTokenizer.TT_WORD) { errorOperation(E_SYNTAX, st); continue; } if(st.sval.length()!=1) { errorOperation(E_PATTERN, st); continue; } Square s=new Square(); s.setCoordinateSquare(((Integer)list.get(0)).intValue(), ((Integer)list.get(1)).intValue(), ((Integer)list.get(2)).intValue()); s.setPattern(st.sval.charAt(0)); try { s.drawSquare(screen); screen.flush(); System.out.println(); } catch (Exception e) { System.out.println("座標範囲オーバーエラー検出"); } list.clear(); mode=N_MODE; screen=new Screen(); } } else { if(st.ttype!=StreamTokenizer.TT_WORD) errorOperation(E_OPE, st); if(st.sval.equals("r")) mode=R_MODE; else if(st.sval.equals("s")) mode=S_MODE; else errorOperation(E_OPE, st); } } }
24 :
>>3 その4 :04/11/16 13:08:55
static void errorOperation(int type, StreamTokenizer st) throws Exception { switch(type) { case E_SYNTAX: System.out.println("構文エラー検出"); break; case E_RANGE: System.out.println("座標範囲オーバーエラー検出"); break; case E_PATTERN: System.out.println("不正パターン文字指定エラー検出"); break; case E_OPE: System.out.println("図形指定記号エラー検出"); break; } while(st.nextToken()!=StreamTokenizer.TT_EOF) { if(st.ttype==StreamTokenizer.TT_WORD) { if(st.sval.equals("r")) { mode=R_MODE; list.clear(); return; } if(st.sval.equals("s")) { mode=S_MODE; list.clear(); return; } } } System.exit(0); } }
25 :
古代帝國富士皇朝総帥・伯壬旭 :04/11/16 13:15:55
>>3 上記のプログラムに
>>4-
>>6 の、Rectangleクラス、Squareクラス、Screenクラスのコードを
付け足してください。
実行引数にファイル名を指定するとそのテキストファイルを読んで
図形を表示します。
(注)>>4-
>>6 のクラスの仕様から、座標に0を指定するとエラーが出ます。
さらに座標+サイズが10を超えるとエラーが出ます。
各文は , で区切ってください。 例: r,1,1,5,5,a,s,3,3,4,b
NotePad.exeで上記の構文の文章を記入したテキストファイルを作って
そのファイル名を引数に指定してください。
>>17 さん
前スレ見たんだけどM.B. さんが回答してる奴じゃダメなの?
あまり詳しくないから、参考程度に。
一応形にはなってるハズ。
import java.awt.*;
import java.awt.event.*;
public class HW10 extends Frame{
private static final int DRAW_X1 = 10;
private static final int DRAW_X2 = 30;
private static final int DRAW_Y = 80;
private static final int DRAW_ADD_Y = 20;
private static final Font drawFont = new Font("MS ゴシック", Font.PLAIN, 12);
public HW10(){
setSize(500,500);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public void paint(Graphics g){ double [][] a = {{ 1.5, 2, 3, 4}, { 5, 6, 7, 8}, { 9,10.4,11,12}, {13,14.3,15,16}, {17.9,18,19,20.6}}; double [] b = {1,2.9,3,4}; double [] c = new double[a.length]; vector(a,b,c); g.setFont(drawFont); int y = DRAW_Y; g.drawString("行列A=", DRAW_X1, y); StringBuffer buf = null; for (int i=0; i<a.length; i++) { y = DRAW_Y + DRAW_ADD_Y + i * DRAW_ADD_Y; g.drawString(sprintVector(a[i]), DRAW_X2, y); } g.drawString("ベクトル b (の転置) = ", DRAW_X1, y += DRAW_ADD_Y * 2); g.drawString(sprintVector(b), DRAW_X2, y += DRAW_ADD_Y); g.drawString("--- 計算結果 --- ", DRAW_X1, y += DRAW_ADD_Y * 2); g.drawString("ベクトル c (の転置) = ", DRAW_X1, y += DRAW_ADD_Y); g.drawString(sprintVector(c), DRAW_X2, y += DRAW_ADD_Y); }
public static void vector( double[][] a, double[] b, double[] s){ for(int i = 0;i < a.length;i += 1){ double c = 0.0; for(int j = 0;j < a[0].length; j++){ c += a[i][j] * b[j]; } s[i] = c; } } private static String fillLeft(double num, String str, int len) { return fillLeft(String.valueOf(num), str, len); } private static String fillLeft(String num, String str, int len) { String s = String.valueOf(num); for (int i=s.length(); i<len; i++) { s = str + s; } return s; } public static String sprintVector(double [] vector){ StringBuffer buf = new StringBuffer(""); buf.append("["); for(int i = 0;i < vector.length;i += 1) { buf.append(fillLeft(vector[i], " ", 10)); } buf.append(fillLeft("]", " ", 5)); return buf.toString(); } public static void main(String[] args){ Frame w=new HW10(); w.show(); } }
29 :
デフォルトの名無しさん :04/11/16 16:11:25
マウスイベントを使いたいのですが、 : : public Colorcoding_new() { setTitle("Colorcoding Viewer"); setBackground(Color.lightGray); setSize(841, 718); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { System.exit(0); } }); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent me) { clickdruglabel[0].setText("300"); } public void mouseReleased(MouseEvent me) { clickdruglabel[2].setText("800"); } }); : : といった感じにしたのですが、コンパイルは問題なくできますが、mousePressed, mouseReleased の処理がまったく作動しません。 マウスイベントが作動しない場合などはあるのでしょうか
>>29 それってたぶんJFrameのサブクラス内に書いてるんだよね? たぶんコンストラクタ内かな?
addWindowListenerってあるし。
たぶん、ウインドウに対してマウスリスナを登録しているから駄目なんだと思う。JFrameの上には
Content Paneというペインが表示領域としてかぶさってるから、イベントが到達してないんだろう。
コンテント・ペインに設定してみたらどうだろうか。
JPanel panel = (JPanel)this.getContentPane();
panel.addMouseListener( new MouseAdapter() { ... } }
という感じで。
31 :
デフォルトの名無しさん :04/11/16 17:18:19
>30 swing を使っていないのですが、その場合どうすればよいのでしょう? Panel panel = (Panel)this.getContentPane(); とするとエラーがでました
あー、AWTだったか。すまんです。 じゃああってそうに見えるねえ。
clickdruglabelってのは何なのですかね? Frameに貼ってあるLabel? その次の行にSystem.out.println("hoge");とか入れても 何も表示されないということ?
34 :
M.B. :04/11/16 21:27:00
>>29 新しいネタなら、「質問です」とか家。
前のネタの続きかと主他。
35 :
デフォルトの名無しさん :04/11/16 22:13:23
すいません。質問させてください。恐らくはforやwhile文を使って答える問題だと思うのですが、イマイチ分かりません。 問題は以下のような感じです (問題) ============================= 次のように0〜100の範囲で数字を一つ決めた後に、二分法を使って決めた数字を探していくプログラムを記述しなさい。 →実行例 0〜100の中から好きな整数を思い浮かべてください。2分法を使って先ほど思い浮かべた数字を探していきます。 0から50の間にある数ですか?(y or n) y 0から25の間にある数ですか?(y or n) n 26から37の間にある数ですか?(y or n) y ----------------------上記のような処理を繰り返した末に以下のようになる 34〜35の間にある数ですか(y or n) y 思い浮かべた数は34ですか?(y or n) n 求める答えは35です。 ============================= よろしくお願いしますm(_ _)m
>>35 何を聞きたいのかがよくわからないっす。
二分法の仕組みが知りたいの?
それともコーディングが分からないの?
すいません。説明不足でしたm(_ _)m わからないのはコーディングの方です。
38 :
M.B. :04/11/16 22:37:33
>>35 「m から n」っていうのは、「m 以上 n 以下」なのか?
それとも「m より大きくて n より小さい」のか?
それとも「m 以上 n 未満」なのか?
(「m を越えて n 未満」というのはあんまりないが)
39 :
M.B. :04/11/16 22:39:59
ついでながら Java 的には「m 以上 n 未満」が普通。
>>38 問題文から判断するに「m以上 n以下」だと思います。
>>39 >ついでながら Java 的には「m 以上 n 未満」が普通。
そうなんですか…うーん、不安になってきた。
「m 以上 n未満」なのかなぁ…
>>35 import java.io.*;
public class Exc
{
private static final int MAX_NUMBER = 1000;
private static final int MIN_NUMBER = 0;
public static void main(String[] args)throws IOException{
System.out.println(MIN_NUMBER+"〜"+MAX_NUMBER+"の範囲の数字を2分探索します");
int max = MAX_NUMBER;
int min = MIN_NUMBER;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(max-min > 1){
int n = min+(max-min)/2;
System.out.println("その数字は"+min+"以上"+n+"未満の数字ですか?");
while(true){
System.out.print(":");
String an = br.readLine();
if(an.equals("y")){
max = n;
break;
}
if(an.equals("n")){
min = n;
break;
}
}
}
br.close();
System.out.println("その数字は"+min+"です");
}
}
100だった・・
44 :
デフォルトの名無しさん :04/11/16 22:53:33
M.Bさんこんばんは。 この前、本いっぱい紹介してもらって、感謝!!!
しかもSystem.in閉じちゃったよ・・orz
>>42 おぉ!!ありがとうございます!!
本当に助かりましたm(_ _)m
感謝です!
47 :
M.B. :04/11/16 23:09:26
しかも最後の方に「その数字は52以上53未満の数字ですか?」とか出る。 素直に「その数字は52ですか?」と訊け、と言いたい。 で、「y」と答えると、「その数字は52です」とダメを押される。
48 :
M.B. :04/11/16 23:13:34
>>44 ちゃんと読めよー!
「PL/I 分からん」とか「FORTRAN 分からん」とか言うなよー!
できれば Java に書き直してみろよー!
電算業界に就職したらデカいツラができるぞー!
(そのかわり社会人3ヶ月めでプロジェクトリーダーとかにされて、
「五月病になるヒマもねぇんじゃ糞ったれ!」とか毒づく破目になるのだが)
>>47 ごめんなさーい。
ifとか使って直してくださーい。
それに、最初の"〜"っていうのも曖昧ですね。
orz
50 :
超初心者α :04/11/16 23:25:57
高校の課題っす 初心l´・ω・`)ショボーン 「1+2+3-4+5+6-7+8+9-10・・・・100の合計値と平均値」 をjava script プログラムを作れ って言われました。 馬鹿野郎な自分が苦心して出した答えがこれです <html> <head> <title>1+2+3-4+5+6-7+8・・・100の合計値プログラム</title> </head> <body> 1+2+3-4+5+6-7+8+9-10・・・・100= <script language="JavaScript"> <!-- sum=1; i=2; for (i=2; i<=100; i++){ if (i%3==1) i=-i;} sum += i; document.write(sum); // --> </script> </body> </html> これだと処理が重くなるみたいで つД`)うぅ・・・教えて下せぇ
51 :
M.B. :04/11/16 23:27:16
52 :
デフォルトの名無しさん :04/11/16 23:33:21
>>50 i=-i;
なんてことしたら次のループのときに・・・
53 :
デフォルトの名無しさん :04/11/16 23:38:46
宿題なんですが、 最長共通部分系列(LCS)の探索 www.futamura.info.waseda.ac.jp/~futamura/lecture/Gikenshuu/Chap16.pdf にのってるやつで作りましたが、 どうにも設定する配列によっては、正則と逆正則が違うようでそのために解が まともに得られていないようなのですが、これ以外にLCSを解く方法があれば 教えてください。
>>50 javascriptとか知らんけど
1+2+3-4+5+6-7…
=(1+2+3)+(-4+5+6-7)+7+(-7+8+9-10)+10+…
=6+(7+10+13+…+97)
とか直してやればいいんじゃないの?
ぜんぶ馬鹿丁寧に足さなあかんていうんなら知らん。
配列渡しってなんですか?
public class JavaScriptIsNotJava{ public static void main(String[] args){ int n = Integer.parseInt(args[0]); int sum = n*(n+1)/2; double avg = (double)sum/n; System.out.println("total = "+sum); System.out.println("mean = "+avg); } }
57 :
M.B. :04/11/16 23:43:30
>>53 筧先生にでも相談してこい。
ここは Java プログラミングのスレだ。
58 :
デフォルトの名無しさん :04/11/16 23:45:14
>>56 問題読み間違えてないかい?
>>50 を流用するなら
<html>
<head>
<title>1+2+3-4+5+6-7+8・・・100の合計値プログラム</title>
</head>
<body>
1+2+3-4+5+6-7+8+9-10・・・・100=
<script language="JavaScript">
<!--
sum=1;
i=2;
for (i=2; i<=100; i++){
if (i%3==1){
sum +=-i;
}else{
sum += i;
}
}
document.write(sum);
// -->
</script>
</body>
</html>
59 :
M.B. :04/11/16 23:48:52
そーなんだよ二村先生 PAD なんだよ。
>>古代帝國富士皇朝総帥・伯壬旭さん ありがとうございました。おかげで助かりました。
62 :
超初心者α :04/11/17 00:27:23
>>56 >>58 お答えどうもっす。そういうことか〜参考になりました。
あと平均値計算はどうなるんでしょう?
処理した回数カウントしてそれを合計値と割ればいいと思うんですが
どこに組み込めばいいか分からないです。
63 :
デフォルトの名無しさん :04/11/17 01:00:04
あんまりいいソースとは言えんがこれで求まることは求まる <script language="JavaScript"> <!-- sum=0; count=0 for (i=1; i<=100; i++){ if (i%3==1 && i!=1){ sum +=-i; }else{ sum += i; } count++ } document.write('合計:' + sum); document.write('<BR>平均:' + sum/count); // --> </script>
>>62 さっきのはミスです。そしてスレチガイデス。
public class JavaScriptIsNotJava{
public static void main(String[] args){
int n = Integer.parseInt(args[0]);
if(n<3) return;
int sum = n*(n+1)/2;
switch(n%3){
case 0: sum -= (4+n-2)*(n/3-1); break;
case 1: sum -= (4+n)*(n/3); break;
case 2: sum -= (4+n-1)*(n/3); break;
}
double avg = (double)sum/n;
System.out.println("total = "+sum);
System.out.println("mean = "+avg);
}
}
>>64 4行目のn<3はn<1でした。
そしてスレチガイデース。
>>59 いきなり自分の名前呼ばれてびびったー(;・∀・)
違う人か。
67 :
デフォルトの名無しさん :04/11/17 04:26:12
バカばっかり・・・
68 :
デフォルトの名無しさん :04/11/17 05:43:50
ぜんぜんわからないのでお願いします。。 【課題】スーパーマーケットの在庫管理のプログラムを作成する. 商品クラ スを作成し,価格や商品名,在庫数などのフィールドやその設定や表示などをするメ ソッドを作成する. この商品クラスを拡張し,生鮮品,日用品,電化製品な どのサブクラスを作成する.生鮮品ならば産地などが必要であるし,電化製 品ならばメーカー名や型番が必要である. メインでは最初,現在の在庫をファ イルから読み取り,売れた状況や入荷の状況をキーボードから入力する. 商 品名を指定してそのときの状況を表示する機能や,在庫がなくなったら警告 を発する機能を持つ. 最後にそのときの在庫状況をファイルに書き出す. 入力用のファイルのフォーマットは各自に任せます.プログラムを提出する ときに入力ファイルも添付してください.
C言語の以下の命令をJavaではどう記述すれば良いでしょうか? printf("TEST %08x\n",hex);
>>69 まわりくどいやり方
String a = "0000000" + Long.toHexString( hex );
a = a.substring( a.length() - 8 );
System.out.print( "TEST " );
System.out.println( a );
>>70 Cのメモリ管理で泣いたからってファビョる事もあるまい
72 :
M.B. :04/11/17 09:46:35
>>69 十進数の場合、 DecimalFormat クラスを使って整形するので、
似たようなものが十六進数でもあるはず。
>>68 ほれ
abstract class 商品 {
protected String 商品名;
protected int 在庫数;
商品(String 商品名, int 在庫数){
this.商品名=商品名;
this.在庫数=在庫数;
}
int 在庫変動(int 増減数) throws そんなに在庫ねーよ, もうスッカラカンっす{
int 変動後在庫数=在庫数+増減数;
if(変動後在庫数>=0){
在庫数=変動後在庫数;
if(在庫数==0){
throw new もうスッカラカンっす(商品名());
}
}
else {
throw new そんなに在庫ねーよ(商品名(),変動後在庫数);
}
return 変動後在庫数;
}
String 商品名(){
return 商品名;
}
int 在庫数(){
return 在庫数;
}
abstract String 在庫情報();
}
74 :
つづき :04/11/17 09:53:42
class 電化製品 extends 商品 { String メーカー名; String 型番号; 電化製品(String 商品名, int 在庫数, String メーカー名, String 型番号){ super(商品名,在庫数); this.メーカー名=メーカー名; this.型番号=型番号; } String メーカー名(){ return メーカー名; } String 型番号(){ return 型番号; } String 在庫情報(){ return 商品名()+" "+メーカー名()+" "+型番号()+" 残り"+在庫数(); } }
75 :
さいご :04/11/17 09:54:18
class そんなに在庫ねーよ extends Throwable { そんなに在庫ねーよ(String 商品名, int 不足数){ super(商品名+"の不足数"+Math.abs(不足数)); } } class もうスッカラカンっす extends Throwable { もうスッカラカンっす(String 商品名) { super(商品名+"の在庫が在りません"); } }
76 :
M.B. :04/11/17 09:57:14
>>73-75 文法上アリだというのは知ってたが漢字のクラス名・メソッド名
使ってる香具師はじめて見た。
>>76 命名決めるの面倒だったから、、ついついw
package hw17; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.*; import javax.swing.table.*; import java.awt.*; public class HW17 extends JFrame { static Map goodsMap=new TreeMap(); static Goods crtGoods; static DefaultTableModel model= new DefaultTableModel(new Object[][]{{"none","0","0"}}, new Object[]{"商品名","価格","在庫数"}); static JTextField tfd_s=new JTextField(); static JLabel label=new JLabel(); static JSpinner spn1=new JSpinner(); static JSpinner spn2=new JSpinner();
public static void main(String[] args) { readFile(); JFrame frame=new JFrame(); JTable table=new JTable(model); JScrollPane scroll=new JScrollPane(table); JPanel panel=new JPanel(); tfd_s.setPreferredSize(new Dimension(200,20)); panel.add(tfd_s); JButton btn0=new JButton("商品表示"); btn0.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { showGoods(); } }); JButton btn1=new JButton("データをファイルへ保存"); btn1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { writeFile(); } }); panel.add(btn0); panel.add(btn1); Box box=Box.createHorizontalBox(); JButton btn2=new JButton("個売れた"); btn2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateStock(-((Integer)spn1.getValue()).intValue()); } }); JButton btn3=new JButton("個入荷した"); btn3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateStock(((Integer)spn2.getValue()).intValue()); } }); label.setPreferredSize(new Dimension(200,20)); label.setHorizontalAlignment(JLabel.CENTER); box.add(Box.createGlue()); box.add(spn1); box.add(btn2); box.add(label); box.add(spn2); box.add(btn3); box.add(Box.createGlue()); frame.getContentPane().add(panel, BorderLayout.NORTH); frame.getContentPane().add(scroll); frame.getContentPane().add(box, BorderLayout.SOUTH); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600,140); frame.setVisible(true); }
static void showGoods() { String name=tfd_s.getText().trim(); crtGoods=(Goods)goodsMap.get(name); if(crtGoods==null) { model.setDataVector(new Object[][]{{"none","0","0"}}, new Object[]{"商品名","価格","在庫数"}); label.setText("その名前の商品はありません"); } else { model.setDataVector(new Object[][]{crtGoods.toArray()}, crtGoods.toHeadArray()); label.setText(crtGoods.name + "のデータを表示しました"); if(crtGoods.stock==0) label.setText("この商品の在庫がありません"); } spn1.setValue(new Integer(0)); spn2.setValue(new Integer(0)); } static void updateStock(int num) { if(crtGoods==null) return; crtGoods.stock+=num; if(crtGoods.stock<=0) { crtGoods.stock=0; label.setText("在庫がなくなりました"); } goodsMap.put(crtGoods.name, crtGoods); model.setDataVector(new Object[][]{crtGoods.toArray()}, crtGoods.toHeadArray()); spn1.setValue(new Integer(0)); spn2.setValue(new Integer(0)); } static void writeFile() { try { File file=new File("商品在庫.dat"); ObjectOutputStream objOut=new ObjectOutputStream(new FileOutputStream(file)); objOut.writeObject(goodsMap); objOut.close(); } catch (Exception e1) { } }
static void readFile() { try { File file=new File("商品在庫.dat"); ObjectInputStream objIn=new ObjectInputStream(new FileInputStream(file)); goodsMap=(Map)objIn.readObject(); objIn.close(); return; } catch (Exception e1) { } String goodsList = "Foods,米,3000,10,新潟,Foods,牛肉,400,10,アメリカ,Foods,まぐろ,600,10,三崎," + "Electric,テレビ,12000,10,ソニー,2000年型,Electric,ラジオ,3000,10,ナショナル,1990年型,Electric,ビデオ,8000,10,三菱,2001年型," + "Daily,洗剤,400,10,花王,Daily,歯ブラシ,200,10,ライオン,Daily,ゴミ袋,100,10,カネボウ"; StringTokenizer st=new StringTokenizer(goodsList, ",\n"); while(st.hasMoreTokens()) { try { Object obj=Class.forName("hw17." + st.nextToken()).newInstance(); ((Goods)obj).name=st.nextToken(); ((Goods)obj).price=Integer.parseInt(st.nextToken()); ((Goods)obj).stock=Integer.parseInt(st.nextToken()); if(obj instanceof Foods) { ((Foods)obj).farm=st.nextToken(); } else if(obj instanceof Electric) { ((Electric)obj).brand=st.nextToken(); ((Electric)obj).model=st.nextToken(); } goodsMap.put(((Goods)obj).name, obj); } catch (Exception e) { } } } }
abstract class Goods implements Serializable { String name; int price; int stock; abstract Object[] toArray(); abstract Object[] toHeadArray(); } class Foods extends Goods implements Serializable { String farm; Object[] toArray() { return new Object[] {name, new Integer(price), new Integer(stock), farm}; } Object[] toHeadArray() { return new Object[] {"商品名", "価格", "在庫数", "産地"}; } } class Electric extends Goods implements Serializable { String brand; String model; Object[] toArray() { return new Object[] {name, new Integer(price), new Integer(stock), brand, model}; } Object[] toHeadArray() { return new Object[] {"商品名", "価格", "在庫数", "メーカー", "型番"}; } } class Daily extends Goods implements Serializable { Object[] toArray() { return new Object[] {name, new Integer(price), new Integer(stock)}; } Object[] toHeadArray() { return new Object[] {"商品名", "価格", "在庫数"}; } }
83 :
古代帝國富士皇朝総帥・伯壬旭 :04/11/17 10:41:20
>>68 上記のプログラムを全部コピペして、実行クラスファイルは
hw17ディレクトリにいれて実行してください。
(package指定を外すと初期データが読み込まれなくなるので)
初期商品データは、米、牛肉、まぐろ、テレビ、ラジオ、ビデオ、
洗剤、歯ブラシ、ゴミ袋 です。
上部左側のテキストフィールドに商品名を書いて、「商品表示」ボタンを
押すと、下に商品データがでます。
下部には、売却数と仕入れ数の入力欄があります。
「データをファイルへ保存」ボタンを押すと、商品データをファイルへ
セーブします。セーブファイル名(入出力ファイル)は
「商品在庫.dat」です。
>>83 長文ウザイ。だいたい古代帝國富士皇朝ってなんだよ。
>>84 正確には「出雲帝國富士皇朝」な。
>>85 『逝ってよし教』かよ(-_-!)
87 :
デフォルトの名無しさん :04/11/17 11:50:59
☆ チャンチキ ♪マチクタビレタ♪ 〃 ♪マチクタビレター♪ ☆ チャンチキ ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\・∀・)< 宿題マダー? \_/⊂ ⊂_)_\______ / ̄ ̄ ̄ ̄ ̄ ̄ ̄/| |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ :| | | トントカ芋 :| | | _______ :|/
88 :
デフォルトの名無しさん :04/11/17 13:50:19
89 :
M.B. :04/11/17 14:11:12
>>88 ログイン名と「暗号化されたログイン名+パスワード」が、
システム管理者以外には書き換えられない
決まった場所にある全員が見られるファイル
(たとえば/etc/shadow だとか/etc/psswrd だとか)
に書いてあるとするだろ?
そしたら全員が共通に使える暗号化システムを用意して、
自分のログインネームと自分のパスワードを暗号化したものが、
その「暗号化されたログイン名+パスワード」と一致するかどうかを
認証時にチェックすればいい。
この方式だと、システム管理者が複合化システムを知らないか、
あるいは復号化システムが存在しない場合、あるいは
復号に必要なキーを捨ててしまった場合、
システム管理者もパスワードを知ることができないし
(暗号化のプロセスをクライアント側で行なえば、回線を盗聴しても無駄
スパイウェアを使うしかない)
ログイン名を変えることもできない(アカウントの削除はできる)。
まあ、「ログイン名だけ変えてパスワードを変えない」とかいうことは
できなくなるが、それはセキュリティ上必要なコストと考えていただきたい。
90 :
M.B. :04/11/17 14:20:26
>>88 ついでに「Javaの」の五文字を見落としたうっかり八兵衛は
Java コーヒーを飲み Java カレー辛口を食ってから
スレタイを叫びつつ腕立て伏せ・スクワット・腹筋を各二十回
91 :
M.B. :04/11/17 14:28:42
>>88 あ、いかん。クライアント側で暗号化する場合は、
サーバー側でも別に暗号化プロセスを用意して、
クライアント側から送られてきた暗号を再度暗号化して、
「二重に暗号化されたログイン名+パスワード」と
比較するんだぞ?
でないと/etc/shadow/のパスワードを送信するだけで
破られちゃうから。
すみません、Javaの認証プログラムです。 直接は、無理ですね・・・ /etc/shadowは、root以外見れ無いことを忘れてました。 ユーザ名や、パスワードの管理はuseraddコマンドやpasswdコマンドでやろうと思ってます。 このプログラムの用途なんですが、サーブレットに組み込んで linuxのユーザ名・パスワードを使って認証して、セッション管理を行いたいと思ってました。 Java コーヒーを飲み Jawa カレー辛口を食ってから、出直してきます。
>>91 暗号化・・・難しすぎで手が出せませんw
M.B.さん、色々教えていただき有難うございました。
>>76 知らなかったよ。
Javaの見方が変わってしまいそうなほどの衝撃だったよ。
そういえば、Unicodeだもんね。
95 :
M.B. :04/11/17 22:14:49
>>92 ×Jawa カレー
○Java カレー
ちなみに Java カレーは辛口より中辛に
ローレル・コリアンダーシード・シナモン・ナツメグ等にプラスして、
チリペッパー(レッドペッパー)を足したほうがむまい。
隠し味にブラックペッパーと花山椒を足すのも可。
キミも辛ぇなる Zapper の世界を体験してみないか?
読み筋は"Jargon file"(『ハッカー用語辞典』)の"Zap"の項。
JLisp(ellisp)、着々と開発中。 abstruct class とか interface とかいろいろ使ってみたりしている。 なかなか面白い。
97 :
M.B. :04/11/17 23:59:32
☆ チャンチキ ♪マチクタビレタ♪ 〃 ♪マチクタビレター♪ ☆ チャンチキ ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\・∀・)< 宿題マダー? \_/⊂ ⊂_)_\______ / ̄ ̄ ̄ ̄ ̄ ̄ ̄/| |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ :| | | トントカ芋 :| | | _______ :|/
みかん,りんご,アセロラ,わかめの中から幾つかのメニューを選択し(最大は4種類,最小は1種類です), 一日当たりの必要栄養量を満たしながらも,出費を最小限に抑えるプログラムを作成しなさい. (動作例) あなたは伝説の病にかかってしまいました. この病を克服するためには,一日当たり・・・ ビタミンB1>2mg,B2>2mg,C>600mg必要です! 合理的なあなたは,こんなときでも節約家. そこで,出費をできるだけ少なくしたい! 本日のメニュー みかん:1kg300円 1kgあたり…ビタミンB1=1mg,B2=0.4mg,C=400mg アセロラ:1kg800円 1kgあたり…ビタミンB1=0.6mg,B2=1mg,C=600mg わかめ:1kg2000円 1kgあたり…ビタミンB1=4mg,B2=6mg,C=100mg りんご:1kg500円 1kgあたり…ビタミンB1=0.5mg,B2=0.5mg,C=200mg
わかめって健康にいいんだな って1kgもわかめ食えないか
100 :
M.B. :04/11/18 19:51:36
>>98 まず、「お願いします」くらい書け。
ついでに「線形計画法」でググって、少しくらい努力した跡を見せろ。
ついでに、宮沢賢治についてググってみろ(ビタミンB1、B2、C を
窒素・燐酸・カリに置き換えれば、そのまま肥料の計算になる。
宮沢賢治が農村の学校で数学を教えていたというのは知ってるだろ?)。
さらに言えば、カーマーカー法とかについても調べてみろ。
線形計画法の高速化手法についていろいろ学べるはずだ。
てなワケで、再提出。
aX + b = 0でaとbを入力した後Xの値を求めるプログラムを作成せよ。 なおaが0のときは"ケイサンデキズ"と表示せよ。 またa,b,xは実数型である。
102 :
M.B. :04/11/18 19:53:29
あと、宿題持込むときは age な。 解答者が見つけやすいように。 (これは曝し age )
103 :
M.B. :04/11/18 19:58:02
>>101 X = -b / a;
> またa,b,xは実数型である。
FORTRAN 以来、伝統的に実数を使うときは、
double を使うことになっている。
出題者を連れてこい。
小一時間問い詰めてやる。
>>102 どうせお前さんしか回答しないんだから、お前さんが専ブラ使えばいいだけじゃない
>>104 いや、そんなことはない。
神もいるぞ。
106 :
M.B. :04/11/18 20:32:22
>>104 ふはははははははは。
「M.B.」は一人ではないっ!
>>105 そうなんだよ。
前スレ見りゃあ判りそうなもんだけどな。
課題がでました・・。 どなたか助けてください。 以下課題文です。 l(エル)xm 行列 A とmxn 行列 B の積 A*B を計算して行列 C に格納し、 画面表示するプログラムを作成せよ。 ただし、次の条件を満たしていること。 1. データを与える部分の行列の次元が変わっても動作するようにプログラムを書くこと。 すなわち次元を具体的数値で与えずにプログラムを記述せよ、ということである。 実際に与える(最終的)値は l(エル), m, n≧3 で, かつすべて異なること (l(エル)≠m≠n≠l(エル))。 2. 行列 A と B の成分はどちらも(一般に小数点をもつ, つまり整数ではない) 実数データとして各自が適当な桁数で、配列データの初期化を使って与えよ。 小数点以下が.0ばかりではダメ。 3. 行列の積を計算する部分と、行列の成分を出力する部分はそれぞれ、 行列(2次元配列)を引数にもつ、別の独立したメソッド(型は void. )として作ること。 したがって積のメソッドと出力のメソッドの計2つを作ることになる。 4. 行列 C の成分を求める積和の部分には 部分和用の変数を1つだけ導入し複合代入演算子を使って 最後まで積和を完全に求め終わってから、最後に配列要素に格納すること。 積和を求め終わるまでは指定の配列要素に格納する必要がないのだから、 ループ中に何度も配列要素を呼び出すよりその方が効率がいいのである。 また部分和用の変数は必ず初期化する必要がある。 5. 各自で与えたデータとそれによる計算結果が下の結果になるように出力せよ。 成分の表示はfor文を使って出力すること。
>>106 (゚д゚) いままで本気で一人だと思ってた
>107 気のせいか俺も同じ課題出てるぞ。 同じ学校か。
110 :
デフォルトの名無しさん :04/11/18 23:36:27
tus 内輪ネタスマソ
112 :
>>107 その1 :04/11/19 02:29:17
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; public class HW18 { static JFrame frame = new JFrame(); static JPanel[] panel = new JPanel[] {new JPanel(), new JPanel(), new JPanel()}; static int l, m, n; static double[][] A, B, C; public static void main(String[] args) { Box box=Box.createVerticalBox(); JScrollPane scr=new JScrollPane(); scr.getViewport().add(box); frame.getContentPane().add(scr); JPanel pane1=new JPanel(); panel[0].setBorder(BorderFactory.createRaisedBevelBorder()); pane1.add(panel[0]); panel[1].setBorder(BorderFactory.createRaisedBevelBorder()); pane1.add(panel[1]); JPanel pane2=new JPanel(); panel[2].setBorder(BorderFactory.createRaisedBevelBorder()); pane2.add(panel[2]); JPanel pane0=new JPanel(); final JSpinner[] spn = new JSpinner[] {new JSpinner(), new JSpinner(), new JSpinner()}; final JButton[] btn = new JButton[] {new JButton("行列初期化"), new JButton("行列計算")}; pane0.add(new JLabel(" l ")); pane0.add(spn[0]); pane0.add(new JLabel(" m ")); pane0.add(spn[1]); pane0.add(new JLabel(" n ")); pane0.add(spn[2]); pane0.add(spn[2]); pane0.add(btn[0]); pane0.add(btn[1]); box.add(pane0); box.add(pane1); box.add(pane2); btn[0].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Set numset = new TreeSet(); for(int i = 0; i < spn.length; ++i) { Integer in = (Integer) spn[i].getValue(); if(in.intValue() < 3 || numset.contains(in)) return; if(i==0) l=in.intValue(); else if(i==1) m=in.intValue(); else n=in.intValue(); numset.add(in); }
113 :
>>107 その2 :04/11/19 02:29:54
A = new double[l][m]; panel[0].removeAll(); panel[0].setLayout(new GridLayout(l,m)); for(int x = 0; x < l; ++x) { for(int y = 0; y < m; ++y) { double val = Math.random() * 10; if(String.valueOf(val).length()>6) val=Double.parseDouble(String.valueOf(val).substring(0,6)); A[x][y] = val; panel[0].add(new Label(String.valueOf(val))); } } B = new double[m][n]; panel[1].removeAll(); panel[1].setLayout(new GridLayout(m,n)); for(int x = 0; x < m; ++x) { for(int y = 0; y < n; ++y) { double val = Math.random() * 10; if(String.valueOf(val).length()>6) val=Double.parseDouble(String.valueOf(val).substring(0,6)); B[x][y] = val; panel[1].add(new Label(String.valueOf(val))); } } frame.validate(); } }); btn[1].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { compute(A, B); show(C); } }); frame.setSize(640,480); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }
114 :
>>107 その3 :04/11/19 02:30:39
static void compute(double[][] A, double[][] B) { C = new double[l][n]; panel[2].removeAll(); panel[2].setLayout(new GridLayout(l, n)); for (int a = 0; a < l; ++a) { for (int b = 0; b < n; ++b) { double val = 0; for (int c = 0; c < m; ++c) { val += A[a][c] * B[c][b]; } if (String.valueOf(val).length() > 12) { val = Double.parseDouble(String.valueOf(val).substring(0, 12)); } C[a][b] = val; } } } static void show(double[][] C) { for (int a = 0; a < l; ++a) { for (int b = 0; b < n; ++b) { panel[2].add(new Label(String.valueOf(C[a][b]))); } } frame.validate(); } }
115 :
古代帝國富士皇朝総帥・伯壬旭 :04/11/19 02:36:36
>>107 上記のコードを全部コピペしてコンパイルしてください。
上の欄の、l m n 3つの数値入力欄に好きな数字を入れて、行列初期化ボタンを
押すと、A、B二つの行列が出ます。行列計算ボタンを押すと
二つの行列の積の行列Cが下にでます。
(注) l m n の数値入力欄に、3未満の数値、又は重複する数値を入れて
行列初期化ボタンを押しても何も実行されません。(問題文の仕様による)
>>108 コードを見た範囲内だと、C言語上がりのハッカーと
業務系経験者の設計屋と、
言語処理系とかに通じた理論屋が、
ごっちゃに書いてる可能性は否定できないと
思われ。
118 :
デフォルトの名無しさん :04/11/19 22:32:39
ロジスティックモデルx[n+1]=a*x[n](1-x[n])を縦軸x[n+1]、横軸x[n]のグラフにあらわす ↑お願いします
119 :
M.B. :04/11/19 22:36:55
x の初期値 x[0] と a の設定方法、 それに n の最大値をどこまで取るか教えれ。
>>119 初期値と係数はテキストフィールドで設定できるようにする。
グラフの描画部分は最小値と最大値をテキストフィールドで設定できるようにする。
値は配列ではなくVectorで保持し、描画の必要に応じて漸化式を計算する。
こんな感じでお願いします。
121 :
M.B. :04/11/19 23:07:08
>>120 >>118 を見た限りだと、漸化式を計算する部分が分からんように
思えたのだが、
>>120 のカキコを見ると、直(もろ)に GUI の話なのだが。
「わからない部分」をはっきりさせると同時に、
前提条件は明らかにしる。
ついでながら問題を見た感じでは、
カオス関連の話であるようにも思われるので、
横軸に a、縦軸に x の分布域をプロットしたほうが、
題意に沿うような気がするがいかがなものか。
void writeBtn_actionPerformed(ActionEvent e)のプログラム をEnterを押しても実行でできるようにしたいんですが よろしくお願いします。
123 :
デフォルトの名無しさん :04/11/20 03:20:28
>>83 実行できませんでした。(**)
アクティブエディターにはメインが含まれていません。
ってコメントがでますがどうすればよいのですか?
>>122 きみ、質問の日本語がほとんど何を聞きたいのか分からんぞ。
勝手に「ボタンをデフォルトボタンのように、キーボードのエンターで動くようにしたい」と
解釈する。
JFrameにgetRootPane()というメソッドがある。これでRoot Paneが取得できる。Root Paneに
setDefaultButton()というメソッドがあるので、デフォルトボタンにしたいJButtonのインスタンス
を渡せばいい。
125 :
デフォルトの名無しさん :04/11/20 10:03:43
ガーベッジコレクションされる可能性があるのは、以下のコードの何行目の後でしょうか。一つ選んでください。 1: public class GCTest1 { 2: public static void main(String[] args) { 3: String str = "こんにちは"; 4: str = "さようなら"; 5: System.out.println(str); 6: } 7: } 4行目の後らしい?まじか??
"こんにちは"のインスタンスがGC食らう可能性でるな。
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 = new JTextField[4]; static JLabel graph = new JLabel(); static List list = new ArrayList(); static BufferedImage img = new BufferedImage(516,516, BufferedImage.TYPE_INT_ARGB); public static void main(String[] args) { JFrame frame = new JFrame(); JPanel panel = new JPanel(); String[] lab = {"0.1", "初期値", "3.95", "係数", "0", "最小値", "30", "最大値"}; for(int i = 0, k = 0; i < tfd.length; ++i) { tfd[i] = new JTextField(lab[k++]); tfd[i].setPreferredSize(new Dimension(40, 20)); panel.add(new JLabel(lab[k++])); panel.add(tfd[i]); } JButton btn = new JButton("グラフ描画"); panel.add(btn); btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { drawGraph(); } }); graph.setIcon(new ImageIcon(img)); frame.getContentPane().add(panel, BorderLayout.NORTH); frame.getContentPane().add(graph); frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); Graphics2D g = img.createGraphics(); g.setColor(Color.white); g.fillRect(0, 0, img.getWidth(), img.getHeight()); g.dispose(); graph.repaint(); }
128 :
304 :04/11/20 11:32:11
for文でxをdt=0.01刻みで増やし、テキストファイルに落としたいのですが、 全部が必要ではなく(この場合MAX/dt=10000)、1、500、1000… というように500刻みにするにはどうすればいいのですか? double x; double dt=0.01; int MIN=0; int MAX=100; for(x<MIN;X<=MAX;X+=dt){ if(xを500刻みで表示させたい。) printf("hogehoge"); } } ifの中身を教えてください。お願いします。
129 :
>>118 その2 :04/11/20 11:32:16
static void drawGraph() { double init, a; int lead, anch; list.clear(); try { init = Double.parseDouble(tfd[0].getText()); a = Double.parseDouble(tfd[1].getText()); lead = Integer.parseInt(tfd[2].getText()); anch = Integer.parseInt(tfd[3].getText()); } catch (NumberFormatException e) { return; } double crt = init, prev = 0, max = 0; int idx = 0; while(idx < lead) { prev = crt; crt = a * crt * (1 - crt); ++idx; } while(idx < anch) { list.add(new Double(crt)); crt = a * crt * (1 - crt); ++idx; if(crt > max) max = crt; } double pt = 500 / max; Graphics2D g = img.createGraphics(); g.setColor(Color.white); g.fillRect(0, 0, img.getWidth(), img.getHeight()); g.setColor(Color.black); g.drawRect(16, 0, 500, 500); g.drawString("0.0", 0, 512); String ns = String.valueOf(max); if(ns.length() > 3) ns = ns.substring(0, 3); g.drawString(ns, 0,12); g.drawString(ns, 500,512); Point prevpt = null, crtpt = null; int x, y; double num = ((Double)list.get(0)).doubleValue(); for(int i = 1; i < list.size(); ++i) { x = (int) (num * pt) + 16; num = ((Double)list.get(i)).doubleValue(); y = (int) (500 - num * pt); crtpt = new Point(x, y); if(i > 1) { g.drawLine(prevpt.x, prevpt.y, crtpt.x, crtpt.y); } else { 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(); } }
130 :
古代帝國富士皇朝総帥・伯壬旭 :04/11/20 11:34:51
>>118 上記の2つのコードを全部コピペしてコンパイル。
適当に数値を設定して、グラフ描画ボタンを押すだけです。
131 :
古代帝國富士皇朝総帥・伯壬旭 :04/11/20 11:50:51
>>123 自分がいつも作成プログラムを置いてるフォルダを、
「C:\Documents and Settings\User\MyProg」とすると
そのフォルダに「hw17」フォルダを作成する。
そして、「C:\Documents and Settings\User\MyProg\hw17」フォルダに
コンパイルして出来た全classファイルをコピーする。
そして、「java -cp "C:\Documents and Settings\User\MyProg" hw17.HW17」
と実行すればOK
132 :
デフォルトの名無しさん :04/11/20 11:55:08
>>128 if(Max/dt%500 == 0) {
printf("hogehoge");
}
とすればOK
>>128 if(x%500 == 0) {
printf("hogehoge");
}
でいいかと。
134 :
M.B. :04/11/20 13:10:05
>>133 それダメ。
500も500.01も500.02も(ry)500.99も、ぜんぶ出力されちまう。
135 :
M.B. :04/11/20 13:19:09
>>304 よく見りゃ
>>128 はムチャクチャやんけ。
> 全部が必要ではなく(この場合MAX/dt=10000)、1、500、1000…
> というように500刻みにするにはどうすればいいのですか?
……って、初期値は 1 じゃねぇだろ。0 だ。
> int MIN=0;
> int MAX=100;
> for(x<MIN;X<=MAX;X+=dt){
> if(xを500刻みで表示させたい。)
……って、x の最大値は 100 だから 500 まで行かないだろ。
要するに、
for(int cnt = 0, x = Min;x <= MAX;cnt += 1, x += dt) {
としておいて、
if ((cnt % 500) == 0) {
で判断すればいいんじゃねぇの?
136 :
M.B. :04/11/20 13:22:23
そうそう、ついでに final double MIN = 0.0; final double MAX = 100.0; とかにしといたほうがいいように思う。
137 :
デフォルトの名無しさん :04/11/20 21:39:59
>>73 メインが無いというエラーがでます。
どうすればいいのですか?
138 :
118 :04/11/20 21:47:14
>>120 誰?
>>119 aはアプレット上から任意に設定
横軸x[n]の最大は1で、ロジスティックモデルの2次関数とx[n]=x[n+1]の直線を使って
x[0](横軸をクリックした地点)からx[n]の推移の奇跡を描くアプレット・・
これでイミ通じますか・・
>>121 オレと120は別人で・・・
139 :
M.B. :04/11/20 22:01:40
>>138 ああ、ややこしい。(-_-!)
あらためて
>>118 へ。
総帥閣下のコードで基本的な部分は解決できているはずだが、
あとは自助努力で何とかならんか?
>>138 自分に誰とか言ってどうするw
記憶喪失症か? 性質の悪い釣りだったのか?
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); 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(); } 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(); }
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(); for(int i = 1; i < list.size(); ++i) { int x = (int) (num * 500 + 16); num = ((Double)list.get(i)).doubleValue(); int y = (int) (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(); } }
143 :
古代帝國富士皇朝総帥・伯壬旭 :04/11/20 23:06:25
>>138 上記の2つのコードを全部コピペしてコンパイル。
適当に数値を設定して(例としての設定値は始めからある)、
下のX軸のどれか目盛をクリックすると、その位置の数値を
初期値としてグラフ描写が開始します。
144 :
古代帝國富士皇朝総帥・伯壬旭 :04/11/20 23:13:15
>>137 >>131 のとおりに実行してください。
メインが無いなんてそんな事はありえません。
コードに大きくstatic void mainと書いてあるのですから。
145 :
118 :04/11/20 23:22:13
146 :
デフォルトの名無しさん :04/11/20 23:34:03
JavaでEclipseをつかったデバッグ方法などは 用意されているのでわかるのですが Eclispeを使わないそれこそJDKだけでJavaを書いていくときの デバッグ方法とかどのようなものがあるのでしょうか? System.out.println()で変数を出すのは思いつくのですが
>146 assert。
>>146 jdbというコマンドラインのデバッガがJDKについてくる。
でもEclipseとかのグラフィカルなデバッガとくらべると
拷問のように使いずらい。
サーバーサイドのリモートデバッグで
他に手が無くて使ったことはあるけど。
まあ最後の手段だな。
149 :
デフォルトの名無しさん :04/11/21 01:21:08
150 :
M.B. :04/11/21 07:28:00
> まあ最後の手段だな。 いまだにテキストエディタと javac & java.exe のエラーメッセージだけで開発してる 漏れって アフォ? (Eclispe 入れたんだけど全然使ってねぇ)
151 :
M.B. :04/11/21 08:14:37
>>146 処理系依存システムがらみの不具合を追っかけ回すとか、
他人が書いた大量のコードを緊急にデバッグする障害対応とか、
そういうんでなければ、
デバッガに頼る前に、まずコードを洗濯したほうがぜってー早いぞ。
とりあえず構造化プログラミングとか心がけてみ。
Javaで構造化プログラミング
平坦プログラミング ↓ 構造化プログラミング ↓ オブジェクト指向プログラミング ↓ アスペクト指向プログラミング ↓ マルチディメンショニングプログラミング
154 :
おながいします :04/11/21 15:00:17
class test2 extends Applet { public void init(){ add( makeContainer("test") ); } public Component makeContainer(String text){ Container newContainer = new Container(); newContainer.setLayout(new FlowLayout()); newContainer.add( new Label(text) ); return newContainer; } } を Applet で実行すると java.lang.InstantiationError: java/awt/Container at test2.makeContainer at test2.init at com/ms/applet/AppletPanel.securedCall0 at com/ms/applet/AppletPanel.securedCall at com/ms/applet/AppletPanel.processSentEvent at com/ms/applet/AppletPanel.processSentEvent at com/ms/applet/AppletPanel.run at java/lang/Thread.run と Java コンソールに出力されますが、appletviewer だとエラーが出ません。 どういう原因があるのでしょうか?
トランプのカード(ジョーカー2枚を含む)54枚全て入った文字列型の配列を作成しなさい。 (配列の中身) trump[0] = スペードのエース trump[1] = スペードの2 ・ ・ trump[12] = スペードのキング trump[13] = ハートのエース ・ ・ trump[51] = クラブのキング trump[52] = ジョーカー trump[53] = ジョーカー
2重forを使え、という宿題だろうか
>155の問題内容をみる限りでは、>155ですでにほぼ回答のように見えるんだが。
159 :
M.B. :04/11/21 23:09:38
>>156 それも前スレでやったような気がするが。
回答者のほうが悩んでいるというのも、 なんかしら本末転倒のような気もするな。 質問者つーか依頼者は、 なるべく解りやすく問題を提示しれ。 もっともわからんから質問するんだろうが。
public class Sample { public static final int NUM = 54; public static int trump[] = new int[NUM]; public static void main(String[] args) { for (int i = 0; i < NUM; i++){ trump[i] = i; } print(trump); int i1, i2; for (int i = 0; i < NUM*10; i++){ i1 = (int)Math.floor(Math.random()*NUM); i2 = (int)Math.floor(Math.random()*NUM); swap(i1, i2); } print(trump); } public static void swap(int i1, int i2){ int tmp = trump[i1]; trump[i1] = trump[i2]; trump[i2] = tmp; } public static void print(int[] t){ for (int i = 0; i < NUM; i++){ System.out.println(i + " = " + t[i]); } } }
import java.util.*; public class Sample { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < 54; i++){ list.add(i); } Collections.shuffle(list); System.out.println(list); } }
163 :
デフォルトの名無しさん :04/11/22 01:06:42
http://milkyway.merseine.nu/Java/Java057.html ここにあるじゃんけんのプログラムを少し機能を省略しながら作ったのですが
エラーが出て動きません。
コンパイルは通るのですが・・・・
実行すると Exception in thread "main" java.lang.NoClassDefFoundError: Janken/class
というエラーが出ます。
APIでエラーの内容を調べたのですがよくわかりません・・・
アドバイスいただきたいです。
下にソース張りますのでよろしくお願いします。
//Janken.java public class Janken{ public static void main(String args[]){ int Hand; int ComHand; Me me = new Me(); Computer com = new Computer(); Judge judge = new Judge(); Hand=me.GetHandData(); if(Hand!=0){ ComHand=com.GetHandData(); Hand=judge.judgement(Hand,ComHand); } } }
java Janken.class とかしてるんじゃないの
//Judge.java public class Judge{ public int judgement(int my,int you){ if(my==you){ System.out.println("引き分け"); return(0); } else if(my==2 && you==1 || my==3 && you==2 || my==1 && you==3){ System.out.println("負け"); return(-1); } else{ System.out.println("勝ち"); return(1); } } }
うお、貼り付けてる途中でしたがそのとおりでした_| ̄|○ ありがとうございます。 あとここ見ててわからないところがいくつかあるのですが・・・ まずMe.javaで 入力ストリームで count=reader.read(cstr,0,1); という風に受け取っていますが、この count てのは何のためにあるのでしょうか? 他で使われてる様子もないのですが・・・ Janken.javaの Hand=judge.hantei(Hand,ComHand); てとこも同じです。 あと返り値のところ、 return Integer.parseInt(new String(cstr)); となっていますが、 new String(cstr) てのはなんなんでしょうか? 自分でやったときは return Integer.parseInt(cstr[0]); とやったのですがだめでした・・・ 最後にComputer.java。 Hand=Math.round((Math.random()*3+1)); のところで 精度が落ちている可能性 というエラーがでるのですが このサイトのソースはおかしいのでしょうか? 一応下のようにしたらうまくいきました。
168 :
163 :04/11/22 01:15:06
// Computer.java public class Computer{ public int GetHandData(){ int Hand; Hand=Math.round((Math.random()*3+1)); switch((int)Hand){ case 1: System.out.println("コンピュータはグーを出しました。"); break; case 2: System.out.println("コンピュータはチョキを出しました。"); break; case 3: System.out.println("コンピュータはパーを出しました。"); break; } return((int)Hand); } }
169 :
163 :04/11/22 01:19:51
すいません、間違えました こっちでした // Computer.java public class Computer{ public int GetHandData(){ long Hand; Hand=Math.round((Math.random()*3+1)); switch((int)Hand){ case 1: System.out.println("コンピュータはグーを出しました。"); break; case 2: System.out.println("コンピュータはチョキを出しました。"); break; case 3: System.out.println("コンピュータはパーを出しました。"); break; } return((int)Hand); } }
基本的にそこのソースは質が悪いね。 20点くらい
long Math#random(double) だから。 わからなけりゃ参考書嫁
173 :
M.B. :04/11/22 01:34:52
>>167 > 精度が落ちている可能性 というエラーがでるのですが
デフォルトが double なので、黙って int にするとそう言われる。
int にするときに明示的に int にキャストすると黙る。
174 :
デフォルトの名無しさん :04/11/22 02:16:41
Javaアプレットのキー入力で KeyAdapter使ってるのですが。 TABキーや矢印キーがkeyPressed() , keyReleased()で取得できません。 AppletviewerやMicrosoftVM では正常に動作するのに、 SUNのVMだと動きませんが、解決方法はありますか?
175 :
デフォルトの名無しさん :04/11/22 09:06:49
初めて書かせていただきます。 宿題が終わらずなきそうです。 宿題 スーパークラスとサブクラスを用いてペットのデータをアレイにして 表示するプログラムをつくりなさい。 ペットは2種類まで(例、犬と猫)で、サブクラスは犬と猫、二つつくりなさい。 犬のサブクラス(DOG)はスーパークラスからinheritするほかにoccupation(仕事)の欄をつけくわえなさい。 猫のクラスはスーパークラスから全て引き継ぎなさい。 入力はユーザーによって行われ、入力が済んだあと、ペット一匹づつのデータが表示されます。 何匹のペットのデータを入力するかはユーザーによって決定されます(arrayサイズはユーザーが決める)。 outputの例 PET NAME:たろう PET TYPE:犬 PET FAMILY:柴犬 PET COLOR:茶色 PET AGE:4 OCCUPATION:盲導犬 PET NAME:みけ PET TYPE:猫 PET FAMILY:三毛猫 PET COLOR:三毛 PET AGE:2 なお、猫のクラスはabstract methodを使いなさい。
とりあえず作ったスーパークラスです。 ただつくっただけなのでまだこれからメソッド足したり訂正すると思います。 今はDOG(サブクラスをつくっていますが、スーパークラスの最後にいれた abstract メソッドがいったいどういう動きをするのか理解していません。 アレイのコントロールにもさらさら自身がないので、泣きそうです。 具体的にまったく理解不能な箇所にさしかかったらまた書き込みさせていただきます。 お暇なかた、助けてください。 お願いします。
package PETS; //ABSTRACT SUPERCLASS FOR ALL PETS public abstract class PETS { //DATA MEMBER protected String pName; //name of pet protected String pType; //type of pet protected String pFamily; //pet family protected String pColor; //color of pet int pAge; //age of pet //METHOD MEMBER //Constructor public PETS(String name, String type, String family, String color, int age) { pName = name; pType = type; pFamily = family; pColor = color; pAge = age; } //ACCESSOR METHOD FOR name public String getName() { return pName; }//END getName()
//ACCESSOR METHOD FOR type public String getType() { return pType; }//END getType() //ACCESSOR METHOD FOR family public String getFamily() { return pFamily; }//END getFamily() //ACCESSOR METHOD FOR color public String getColor() { return pColor; }//END getColor() //ACCESSOR METHOD FOR age public int getAge() { return pAge; }//END getAge() //ABSTRACT METHOD FOR CAT public abstract String cat(); }//END PETS Class
今犬のクラスを作っています。 package PETS; import staugIO.StaugIO; //SUBCLASS DOG public class DOG extends PETS { private String DOccupation; StaugIO io = new StaugIO(); //CONSTRCUTOR TO INITIALIZE PET'S NAME, TYPE, FAMILY, COLOR, AGE public DOG(String name, String type, String family, String color, int age) { super(name, type, family, color, age); } //CONSTRCUTOR TO INITIALIZE ALL DETA MEMBER in DOG CLASS public DOG(String name, String type, String family, String color, int age, String Occupation) { super(name, type, family, color, age); DOccupation = Occupation; } //UniqueAbility Method:ここでユーザーがarrayにデータ入力するさい //に名前に犬といれたら、OCCPATIONを入力できるようにする。 public String UniqueAbility(String name) { } //これはPETS Classにある最後のアブストラクトメソッド、まだ自分でこれがなんなのかよくわかってません。 public String cat() { //return cat; } }
input/ouputはStaugIOつかってます。 データ入力のときに表示される画面は以下のようになります。 type = readString(”TYPE(DOG or CAT)を入力してください”); family = readString("種類を入力してください”); name = readString("名前を入力してください”); これはスーパークラスに追加しました。 PETSクラス(スーパークラス)内のACCESSOR METHODの前に setメソッド public void setName() { name = readString("名前を入力してください”); } をつくりました。
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; import java.util.List; public class HW21 { static List list = new ArrayList(); static JTextField[] tfd = {new JTextField(), new JTextField(), new JTextField(), new JTextField(), new JTextField()}; static JTextArea ta = new JTextArea(80,40); static JComboBox cbx = new JComboBox(new Object[] {"犬", "猫"}); static void inputPetData() { for(int i = 0; i < tfd.length ; i++) { if(tfd[i].isEditable() && tfd[i].getText().trim().length() == 0) { ta.append("入力されてないデータがあります\n\n"); return; } } Pet pet; if(cbx.getSelectedItem().equals("犬")) { pet = new Dog(); ((Dog)pet).occupation = tfd[4].getText().trim(); } else { pet = new Cat(); } pet.name = tfd[0].getText().trim(); pet.family = tfd[1].getText().trim(); pet.color = tfd[2].getText().trim(); pet.age = tfd[3].getText().trim(); list.add(pet); ta.append(pet.name + "のデータを入力しました\n\n"); } static void outputPetData() { for(int i = 0; i < list.size(); i++) ta.append(((Pet)list.get(i)).toText()); } static void clearPetData() { list.clear(); ta.append("ペットのリストを全て削除しました\n\n"); }
public static void main(String[] args) { JFrame frame = new JFrame(); Box box = Box.createVerticalBox(); JPanel[] panel = {new JPanel(), new JPanel()}; JButton[] btn = {new JButton("ペット登録"), new JButton("全登録ペット出力"), new JButton("全登録削除")}; btn[0].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { inputPetData(); } }); btn[1].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { outputPetData(); } }); btn[2].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { clearPetData(); } }); panel[0].add(btn[0]); panel[0].add(btn[1]); panel[0].add(btn[2]); panel[0].add(new JLabel("TYPE")); panel[0].add(cbx); cbx.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if(cbx.getSelectedItem().equals("犬")) tfd[4].setEditable(true); else tfd[4].setEditable(false); } }); String[] arg = {"NAME", "FAMILY", "COLOR", "AGE", "OCCUPATION"}; for(int i = 0; i < tfd.length; i++) { tfd[i].setPreferredSize(new Dimension(80,20)); panel[1].add(new JLabel(arg[i])); panel[1].add(tfd[i]); } JScrollPane scroll = new JScrollPane(ta); for(int i = 0; i < panel.length; i++) box.add(panel[i]); box.add(scroll); frame.getContentPane().add(box); frame.setSize(700,500); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
DOGクラス(サブクラス)の このメソッドの中で public String UniqueAbility(String name) { } データがarrayに入力されるさいに犬であれば データ入力のコマンドに 職業の欄を追加したいのですが、どのようにやったらいいかわかりません。 ヒントだけでもいいのでどなたかお答えいただけないでしょうか?
abstract class Pet { String name; String family; String color; String age; abstract String toText(); } class Dog extends Pet { String occupation; String toText() { return "PET NAME:" + name +"\nPET TYPE:犬" + "\nPET FAMILY:" + family + "\nPET COLOR:" + color + "\nPET AGE:" + age + "\nOCCUPATION:" + occupation + "\n\n"; } } class Cat extends Pet { String toText() { return "PET NAME:" + name +"\nPET TYPE:猫" + "\nPET FAMILY:" + family + "\nPET COLOR:" + color + "\nPET AGE:" + age + "\n\n"; } }
186 :
古代帝國富士皇朝総帥・伯壬旭 :04/11/22 10:46:57
>>176 上記の3つのコードを全部コピペしてコンパイルしてください。
実行するとウィンドウが出ます。
なんか融通がきかなそうだなそれ。しかもGUIかよ
>>186 さん
ありがとうございます。
高度すぎてまるで理解できませんが、頑張ってみます。
JPテキストは使わない方向でつくることにしました。
コピペしてコンパイルしたところ、sbuclassが作られていないので動作しませんでした。
つくってみます。
自分の環境はネットビーンズIDE3.6です
これで動作しないと採点してやらないと言われてます(泣
GUIはstaugIOが適当にやってくれるので必要ありません。
お手数かけてもうしわけありませんでした。
まだわからないところがありますが手探りでやっています。
これからまだしばらくお付き合いくださる方がいらっしゃったら、うれしく思います。
>>186 ,古代帝國富士皇朝総帥・伯壬旭様
どうやらうまくコンパイルできないようです。
サブクラスを作成して、コンパイルしてみましたがウィンドウが
たちあがりませんでした(エラーはありません、感動しましたw)。
立ち上がらないのは環境のせいだと思います。
今からしばらく古代帝國富士皇朝総帥・伯壬旭の書かれたコードを
じっくりよんで自分が何がわかっていないのか勉強してまいります。
さしでがましいようですが、今自分がGUIをコントロールするのに
つかっているクラスパッケージを貼っていきます。
自分のような初心者には非常に便利です。
Andrew C. Staugaardさんという人がつくったらしいです。
abstractの意味がようやくつかめてまいりました。
>189 うちではあっさりコンパイルして実行できたぞ。1〜3まで全部ペーストしたか?
>>189 丸投げとの文字を見て、一気にガーッとコードを書いて貼り付けて
しまいました。。。この場合はコンソールよりもGUIの方が楽だったので。。
環境によっては、Swingでも表示されないとは残念・・・
>>190 わざわざコンパイルしてくれての補足どうもです。
192 :
デフォルトの名無しさん :04/11/22 13:00:12
>>192 変数memを、doubleに、inputValueをDouble.parseDouble()で
数値化すればよいのでは・・・・・・・・
194 :
デフォルトの名無しさん :04/11/22 13:46:49
195 :
M.B. :04/11/22 13:53:08
>>192 漏れも同じことを考えて BigDecimal 版を作ろうとしたが、
使い方がよくわからんので結局 BigInteger とオーダーを
自分で管理していたりするのだ。
BigDecimal についてもうちょい調べてみるので、
期待せずに待っておってくれ。
196 :
デフォルトの名無しさん :04/11/22 14:14:38
>>194 90行目の下に
pointButton.addActionListener(this);
を挿入し
113行目に
if (button == pointButton) {
if (!numInput) {
return;
}
inputValue = inputValue + ".";
}
else
(この次にはif (button == plusButton) {が続く)
を挿入してみてください。
>191 どうもです。 GUIは指定があってStaugIOパッケージをつかったものでないと駄目です。 ですので折角つくっていただいたのにGUIは別につくらねばです。 それは問題ないのですが、 今現在mainでくるしんで苦しんでおります。
import PETS.*; import staugIO.StaugIO public class actionPETS { public static void main(String[] args) { StaugIO io = new StaugIO(); DOG dog = new DOG("","","","",0,""); CAT cat = new CAT("","","","",0); int choice; int arraySize =0; PETS array[] = new PETS[arraySize]; arraySize = io.readInt("Enter the Number of Pets"); for (int i = 0; i<arraySize; ++i) { choice = io.readInt("Enter the Type of Pet. 1 for Dog, 2 for Cat"); switch(choice) { case '1':break; case '2':break; default :io.writeInfo("This is not valid entry"); } ++i; } } }
switchのところで1でDOGクラス、2でCATクラスを呼び出したいのですが、 呼び出し方がわかりませんです。 DOGとCATクラスはPETSクラスのサブクラスです。
「呼び出す」とは一体どういうことかね
ぅう、詰まってます。 choice = io.readInt("Enter the Type of Pet. 1 for Dog, 2 for Cat"); switch(choice) { case '1':dog();break; case '2':cat();break; これは間違った表記ですが、こんな感じで呼び出したクラスをそこで 実行させたいです。 そういうことは可能なんでしょうか?
age
前回お世話になりました またお願いします;; 問題 public class mondai { public static void main(String[] args) { for (int n = -8; n <= 8; n++) { printGraph(n * n); } } public static void printGraph(int x) { int i; for (i = 0; i < x; i++) { System.out.print("*"); } System.out.println(""); } } これを参考にして、ボールを投げた時の放物線を描け。 メソッドprintGraphを変化させて使う。 という問題です お願いします(*- -)(*_ _)ペコリ
205 :
M.B. :04/11/22 17:21:37
>>195 わかった。やっぱアカン。(^_^!)
BigDecimal は固定小数点形式なので、浮動小数点をサポートするには、
やっぱり BigInteger を自分で管理しないといかんらしい。
>>202 話が見えてこない。
問題文を書いてごらん。
207 :
デフォルトの名無しさん :04/11/22 18:56:32
>>204 ???
public class mondai {
public static void main(String[] args) {
for (int n = -8; n <= 8; n++) {
printGraph(n * n);
}
}
public static void printGraph(int x) {
x = Math.abs(64 - x);
int i;
for (i = 0; i < x; i++) {
System.out.print("*");
}
System.out.println("");
}
}
ここまでソースコードだらけのスレもめずらしい・・・
209 :
DESについて :04/11/22 19:05:12
210 :
M.B. :04/11/22 19:15:50
>>209 書いてあるまんまなんだがな。
Java の入門書読んだほうが早くね?
211 :
デフォルトの名無しさん :04/11/22 19:18:42
>>209 教えてくださいと言っても、あまりに抽象的すぎます。
何をどうしてもらいたいのか具体的に書いてください。
そのリンク先にある、宿題問題の回答をここに書いてくれと
いう事なのですか?
212 :
209 :04/11/22 19:29:04
1import javax.crypto.*; 2 3public class DES{ 4public static void main(String[] argv){ 5try{ 6KeyGenerator kg = KeyGenerator.getInstance("DES"); 7SecretKey sk = kg.generateKey(); 8byte[] m = "Hello Des World".getBytes(); 9 10Cipher ch = Cipher.getInstance("DES/ECB/PKCS5Padding"); 11ch.init(Cipher.ENCRYPT_MODE, sk); 12byte[] c = ch.doFinal(m); 13 14ch.init(Cipher.DECRYPT_MODE, sk); 15byte[] m2 = ch.doFinal(c); 16}catch(Exception e){ 17System.out.println(e); 18} 19} 20} HPにあるこのプログラムはどの部分を暗号化するプログラムなのでしょうか? それすらも分からない落ちこぼれです。 また、このプログラムを実行するにはどうすればよいでしょう? java DES ???とコマンドプロンプトに入力すればよいのですか?
213 :
209 :04/11/22 19:31:56
プログラムが読みづらいので書き直します。 import javax.crypto.*; public class DES{ public static void main(String[] argv){ try{ KeyGenerator kg = KeyGenerator.getInstance("DES"); SecretKey sk = kg.generateKey(); byte[] m = "Hello Des World".getBytes(); Cipher ch = Cipher.getInstance("DES/ECB/PKCS5Padding"); ch.init(Cipher.ENCRYPT_MODE, sk); byte[] c = ch.doFinal(m); ch.init(Cipher.DECRYPT_MODE, sk); byte[] m2 = ch.doFinal(c); }catch(Exception e){ System.out.println(e); } } }
214 :
デフォルトの名無しさん :04/11/22 19:44:45
>212 "Hello Des World"の文字列を、getBytes()でmに格納し その文字列を ch.init(Cipher.ENCRYPT_MODE, sk); byte[] c = ch.doFinal(m); で暗号化して、cに格納し その暗号化されたバイト配列cを ch.init(Cipher.DECRYPT_MODE, sk); byte[] m2 = ch.doFinal(c); で複合化して、m2に格納してるだけです。 実行は、 java -cp "DES.classファイルのあるフォルダ" DES とコマンドプロンプトに入力します
215 :
212 :04/11/22 20:01:22
>>214 有難うございます。
実行できました。
解説も分かりやすく助かりました。
216 :
M.B. :04/11/22 21:47:40
>>208 > ここまでソースコードだらけのスレもめずらしい・・・
素敵だろ(w
217 :
212 :04/11/22 22:18:29
すみません。実行はできたのですが、 このままだと 暗号化・複合化がきちんと行われているか確認できないので import javax.crypto.*; public class DES{ public static void main(String[] argv){ try{ KeyGenerator kg = KeyGenerator.getInstance("DES"); SecretKey sk = kg.generateKey(); byte[] m = "Hello Des World".getBytes(); Cipher ch = Cipher.getInstance("DES/ECB/PKCS5Padding"); ch.init(Cipher.ENCRYPT_MODE, sk); System.out.println(m); byte[] c = ch.doFinal(m); System.out.println(c); ch.init(Cipher.DECRYPT_MODE, sk); byte[] m2 = ch.doFinal(c); System.out.println(m2); }catch(Exception e){ System.out.println(e); } } } とSystem.out.printlnを入れて確認できるようにしました。 これで実行すると、 [B@bfc8e0 [B@11d0a4f [B@18fd984 となり暗号化・複合化ができてないように見えます。なぜなのでしょうか? また、暗号化・複合化ができていることを目で確認するには どうすればよいでしょうか? 何度も申し訳ありませんが、ご教授願います。
218 :
212 :04/11/22 22:19:17
すみません。実行はできたのですが、 このままだと 暗号化・複合化がきちんと行われているか確認できないので import javax.crypto.*; public class DES{ public static void main(String[] argv){ try{ KeyGenerator kg = KeyGenerator.getInstance("DES"); SecretKey sk = kg.generateKey(); byte[] m = "Hello Des World".getBytes(); Cipher ch = Cipher.getInstance("DES/ECB/PKCS5Padding"); ch.init(Cipher.ENCRYPT_MODE, sk); System.out.println(m); byte[] c = ch.doFinal(m); System.out.println(c); ch.init(Cipher.DECRYPT_MODE, sk); byte[] m2 = ch.doFinal(c); System.out.println(m2); }catch(Exception e){ System.out.println(e); } } } とSystem.out.printlnを入れて確認できるようにしました。 これで実行すると、 [B@bfc8e0 [B@11d0a4f [B@18fd984 となり暗号化・複合化ができてないように見えます。なぜなのでしょうか? また、暗号化・複合化ができていることを目で確認するには どうすればよいでしょうか? 何度も申し訳ありませんが、ご教授願います
219 :
デフォルトの名無しさん :04/11/22 22:47:04
>218 System.out.println(m); ↓ for(int i=0; i<m.length; ++i) { System.out.print(Integer.toHexString(m[i] & 0xff) + " "); } あとは、上記のmの部分をc、m2に置き換えて記述すればOK 文字列の元のバイトコード、暗号後のバイトコード、復号後のバイトコードが出る。
220 :
訂正 :04/11/22 22:48:43
System.out.println(m); ↓ for(int i=0; i<m.length; ++i) { System.out.print(Integer.toHexString(m[i] & 0xff) + " "); } System.out.println();
221 :
デフォルトの名無しさん :04/11/22 23:53:40
docletについて調べることになったのですが、なんせプログラミング経験がほとんどないため苦労しています。
ttp://muimi.com/j/doclet/ ここを見て、とりあえずここにある二つのサンプルを実行しようとしたのですがうまくいきません・・・
このサンプルどおりに動かす手順を教えていただければ助かります。
とりあえず
MyDoclet.javaを javac MyDoclet.java とコンパイルして
javadoc -doclet hoge.MyDoclet -docletpath classes
-classpath classes;%JAVA_HOME%\lib\tools.jar -sourcepath src -private aaa
てのを丸写ししてみました。
まぁだめだろうとは思ってましたがやっぱりできませんでした・・・
javadoc: doclet クラス MyDoclet が見つかりません。
というエラーでした
223 :
221 :04/11/23 01:10:41
ttp://nemuneko.com/jboss/xdoclet.html ここのサイトを見てなんとかコンパイルは成功しました。
その後ここに書いてるとおり実行したのですが(もちろんjdkのパスは自分のPC用に変えました)
エラーが出てとまってしまいます。
エラーは
java.lang.NoClassDefFoundError: MyDoclet (wrong name: hoge/MyDoclet)
というエラーで、その後に
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
のような文字列が出て最後に
javadoc: 致命的エラー
エラー 1 個
とでてとまります。
解決方法アドバイスいただけるとありがたいです。
あ、すいません了解です。 そっちのすれいきます
225 :
192 :04/11/23 10:35:15
小数点の計算できました。 ありがとうございました。
226 :
デフォルトの名無しさん :04/11/23 11:07:52
(1)以下のように定義されるフィボナッチ数を計算するプログラムを、再帰呼び出しを利用して定義しなさい。 (a) fib(0)=0 (b) fib(1)=1 (c) fib(n)=fib(n-1)+fib(n-2) ただしn>1 この数列を計算するメソッドを再帰を利用して定義し、 入力した数値に対してフィボナッチ数を計算して出力するようなクラスFibAPを定義すること (2)再帰を使わずにフィボナッチ数列を計算するメソッドを上のプログラムに追加し、両者が同一の値を返すことを確認しなさい。 下のような実行イメージになるようにすればよい Input:5 5のフィボナッチ数(再帰)=・・・ 5のフィボナッチ数(繰返)=・・・ Input:3 3のフィボナッチ数(再帰)=・・・ 3のフィボナッチ数(繰返)=・・・ (3)エイト・クィーンのプログラムを再帰を用いて完成させ、いくつの解が得られるか調べよ。 (4)7*7の迷路パターンを作成しすべての可能な経路を出す迷路探索プログラムを作成しなさい。 ただし左上が入り口とし、右下が出口とする。経路探索の結果は(0,0)(0,1)…(7,7)のように経路がわかるように出力すること。 どうかお願いします。
// 再起版 public int getFib1( int n ) { switch(n) { case 0: case 1: return n; default: return getFib1( n-1 ) + getFib1(n-2); } } // ループ版 public int getFib2( int n ) { if( n==0 || n ==1 ) { return n; } int[] tmp = new int[n]; tmp[0] = 0; tmp[1] = 1; for( int i=2; i<n; i++ ) { tmp[i] = tmp[i-2] + tmp[i-1]; } return tmp[n-2]+tmp[n-1]; } 後は任せた。
228 :
212 :04/11/23 13:12:02
>>219 220
有難うございます。
暗号化・複合化できていることが確認できました。
229 :
sa :04/11/23 14:24:16
次の問題をjavaで解いてください。 標準入力からテキストファイルを読み込み、 行を短い順に出力しなさい。 但し、行は 最大 80 文字とし、 80 文字以上の行は先 頭 80 文字だけの行として取扱い 出力し、 空行は出力しないで下さい。 また、同じ 長さの行は入力した順番に出しなさい。 なお、取り扱える行数は実行時のコン ピュータのメモリーのサイズのみに依 存 しなければなりません。 勝手な上 限を設けてはいけません。
128ビットで構成されるIDがランダムに生成されるとする。 n回IDを生成したときに同じIDが生成される確率を計算しなさい。
231 :
デフォルトの名無しさん :04/11/23 18:08:48
はじめまして。 いくつかのゲームが入っていて、やりたいゲームの番号を選ぶと新しいフレーム(gameWindowクラスで定義)が開いて、そこでゲームが始まると言うプログラムを組んでいます。 ですが、新しいフレームを開いて、そのフレームにアクセスしようとすると、そこで、ゲーム番号を選択するフレームと、gameWindowのフレーム両方が描画を停止してしまいます。 (両方のフレームのラベルやアイコンがすべて消えて、何も描画されていないフレームが表示されるだけ) gameWindow gW = new gameWindow(); gW.Window(); //ここまで正常 while (i <= 5) { //以下からおかしくなる gW.jlL.setIcon(new ImageIcon("image/000.gif")); gW.jlR.setIcon(new ImageIcon("image/000.gif")); (以下略) } という感じのコードです。 描画はここでストップしてしまうのですが、ゲーム自体は進行していて、入力を行うと、それに対する正常な反応が返ってきます。 試しにwhileループに入る前にsetIconをしてみると、それは正常に処理されたので、どうもwhileループが何か悪さをしているように思うのですが、どなたか解決方法をご存知ないでしょうか? 長々と読みにくい説明で失礼しました。よろしくお願いします。
>>229 マルチポスト、c/c++の宿題スレにもいた
>>226 問題3 エイトクイーンその1
import java.awt.Point;
import java.util.*;
public class HW23 {
static List ansList = new ArrayList();
static int[] pos = new int[8];
public static void main(String[] args) {
for (int i = 0; i < 8; ++i) {
List ptList = new ArrayList();
ptList.add(new Point(i, 0));
pos[0] = i;
putQueen(1, ptList);
}
for (int a = 0; a < ansList.size(); ++a) {
List list = (List) ansList.get(a);
System.out.print("置き方その" + (a + 1) + ": ");
for (int b = 0; b < list.size(); ++b) {
Point pt = (Point) list.get(b);
System.out.print("<" + pt.x + ", " + pt.y + "> ");
}
System.out.println();
}
}
>>226 問題3 エイトクイーンその2
static void putQueen(int row, List ptList) {
loop: for (int i = 0; i < 8; ++i) {
for (int k = 0; k < row; ++k) {
if (pos[k] == i)
continue loop;
if (pos[k] + k == i + row)
continue loop;
if (pos[k] - k == i - row)
continue loop;
}
List newList = new ArrayList(ptList);
newList.add(new Point(i, row));
pos[row] = i;
if (newList.size() == 8) {
ansList.add(newList);
return;
}
putQueen(row + 1, newList);
}
}
}
236 :
M.B. :04/11/23 19:57:35
237 :
M.B. :04/11/23 20:08:29
238 :
M.B. :04/11/23 20:18:48
239 :
M.B. :04/11/23 20:26:39
>>231 1 - (((2^128-1)/(2^128))*((2^128-2)/(2^128))*((2^128-3)/(2^128))*……
*(2^128-(n-1))/(2^128)))。
import java.util.*; import javax.swing.*; import java.awt.image.*; import java.awt.*; import java.util.List; import java.awt.event.*; public class HW24 { static class Wall { boolean north = true, south = true, west = true, east = true, mark= false; } static Wall[][] wall = new Wall[7][7]; static List ansList = new ArrayList(); static final int NORTH = 0, SOUTH = 1, WEST = 2, EAST = 3, CELL = 64, HCELL = 32; static BufferedImage img = new BufferedImage(CELL * 7, CELL * 7, BufferedImage.TYPE_INT_ARGB); static JLabel label = new JLabel(new ImageIcon(img)); static JComboBox cbx = new JComboBox();
public static void main(String[] args) { JPanel panel = new JPanel(); JButton btn1 = new JButton("迷路作成"), btn2 = new JButton("経路探索"); btn1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cbx.removeAllItems(); for (int i = 0; i < wall.length; ++i) { for (int k = 0; k < wall.length; ++k) { wall[i][k] = new Wall(); } } makeMaze(0, 0); drawMaze(); } }); btn2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(wall[0][0]==null) return; ansList.clear(); searchPath(0,0, new ArrayList()); for(int i = 0; i < ansList.size(); ++i) { cbx.addItem("到達経路" + String.valueOf(i)); } if(cbx.getModel().getSize()==0) return; drawPath(0); } }); cbx.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(cbx.getModel().getSize()==0) return; drawMaze(); drawPath(cbx.getSelectedIndex()); } }); panel.add(btn1); panel.add(btn2); panel.add(cbx); JFrame frame = new JFrame(); frame.getContentPane().add(label); frame.getContentPane().add(panel, BorderLayout.NORTH); frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }
static void makeMaze(int x, int y) { List list = new ArrayList(Arrays.asList(new Integer[] { new Integer(NORTH), new Integer(SOUTH), new Integer(WEST), new Integer(EAST) })); while (!list.isEmpty()) { int type = (int) (Math.random() * 4); list.remove(new Integer(type)); if (!check(x, y, type)) continue; int w = x - 1, e = x + 1, n = y - 1, s = y + 1; switch (type) { case NORTH: wall[y][x].north = false; wall[n][x].south = false; wall[n][x].mark = true; makeMaze(x, n); break; case SOUTH: wall[y][x].south = false; wall[s][x].north = false; wall[s][x].mark = true; makeMaze(x, s); break; case WEST: wall[y][x].west = false; wall[y][w].east = false; wall[y][w].mark = true; makeMaze(w, y); break; case EAST: wall[y][x].east = false; wall[y][e].west = false; wall[y][e].mark = true; makeMaze(e, y); break; } } }
static boolean check(int x, int y, int type) { int w = x - 1, e = x + 1, n = y - 1, s = y + 1; switch (type) { case NORTH: if (n < 0) return false; if (wall[n][x].mark) return false; break; case SOUTH: if (s >= 7) return false; if (wall[s][x].mark) return false; break; case WEST: if (w < 0) return false; if (wall[y][w].mark) return false; break; case EAST: if (e >= 7) return false; if (wall[y][e].mark) return false; break; } return true; } static void drawPath(int index) { Graphics g = img.getGraphics(); g.setColor(Color.blue); List list = (List) ansList.get(index); for (int i = 0; i < list.size() - 1; ++i) { g.drawLine(((Point)list.get(i)).x * CELL + HCELL, ((Point)list.get(i)).y * CELL + HCELL, ((Point)list.get(i+1)).x * CELL + HCELL, ((Point)list.get(i+1)).y * CELL + HCELL); } g.dispose(); label.repaint(); }
static void drawMaze() { Graphics g = img.getGraphics(); g.setColor(Color.white); g.fillRect(0, 0, img.getWidth(), img.getHeight()); g.setColor(Color.black); for (int y = 0; y < 7; ++y) { for (int x = 0; x < 7; ++x) { if (wall[y][x].north) g.drawLine(x * CELL, y * CELL, (x + 1) * CELL, y * CELL); if (wall[y][x].south) g.drawLine(x * CELL, (y + 1) * CELL, (x + 1) * CELL, (y + 1) * CELL); if (wall[y][x].west) g.drawLine(x * CELL, y * CELL, x * CELL, (y + 1) * CELL); if (wall[y][x].east) g.drawLine((x + 1) * CELL, y * CELL, (x + 1) * CELL, (y + 1) * CELL); } } g.dispose(); label.repaint(); } static void searchPath(int x, int y, List pathList) { Point point = new Point(x, y); if(pathList.contains(point)) return; pathList.add(point); if(x == 6 && y == 6) { ansList.add(pathList); return; } for(int i = 0; i < 4; ++i) { switch (i) { case NORTH: if(!wall[y][x].north) searchPath(x, y - 1, new ArrayList(pathList)); break; case SOUTH: if(!wall[y][x].south) searchPath(x, y + 1, new ArrayList(pathList)); break; case WEST: if(!wall[y][x].west) searchPath(x - 1, y, new ArrayList(pathList)); break; case EAST: if(!wall[y][x].east) searchPath(x + 1, y, new ArrayList(pathList)); break; } } } }
245 :
古代帝國富士皇朝総帥・伯壬旭 :04/11/23 20:41:13
>>226 問題4 迷路作成&経路探索
上記の5つのコードを全部コピペしてコンパイル。
迷路作成ボタンを押すと、7×7の迷路がランダムで作成されます。
経路探索ボタンを押すと、到達経路を探索して1番目の道筋を表示します。
道筋が複数ある時は、隣のコンボボックスにスイッチが複数登録されるので
どれかを選ぶと他の道筋が表示されます。
>>239 それBigDecimalとか使っても簡単に書けないんだけど
何か方法ない?
247 :
M.B. :04/11/23 21:00:41
>>246 掛け算のところを対数取って足し算にするとか、
手段はいろいろあると思われ。
248 :
デフォルトの名無しさん :04/11/23 21:25:12
249 :
古代帝國富士皇朝総帥・伯壬旭 :04/11/23 21:31:22
>>226 問題4 迷路作成&経路探索
失礼。問題文を一部見落としてました。
>>243 の drawPathメソッドをこう修正(追補)してください。
static void drawPath(int index) {
Graphics g = img.getGraphics(); g.setColor(Color.blue);
List list = (List) ansList.get(index);
for (int i = 0; i < list.size() - 1; ++i) {
g.drawLine(((Point)list.get(i)).x * CELL + HCELL, ((Point)list.get(i)).y * CELL + HCELL,
((Point)list.get(i+1)).x * CELL + HCELL, ((Point)list.get(i+1)).y * CELL + HCELL);
}
g.setColor(Color.red);
for (int i = 0; i < list.size(); ++i) {
Point pt = (Point)list.get(i);
String text = "(" + pt.x + "," + pt.y + ") ";
g.drawString(text, pt.x * CELL + 16, pt.y * CELL + 32);
System.out.println(text);
}
System.out.println();
g.dispose(); label.repaint();
}
>>226 問題1&2 その1
import java.io.*;
public class FibAP {
public static void main(String[] args) {
while (true) {
int num = 0;
try {
System.out.print("Input:");
String s = new DataInputStream(System.in).readLine();
if (s.length() == 0) {
System.out.println("終了");
break;
}
num = Integer.parseInt(s);
if (num < 2) {
throw new Exception();
}
} catch (Exception ex) {
System.out.println("入力数値が不正");
continue;
}
System.out.println(num + "のフィボナッチ数(再帰)= " + computeByReflexive(num));
System.out.println(num + "のフィボナッチ数(繰返)= " + computeByLoop(num));
}
}
static int computeByReflexive(int num) {
if (num < 2) {
return num;
} else {
return computeByReflexive(num - 1) + computeByReflexive(num - 2);
}
}
>>226 問題1&2 その2
static int computeByLoop(int num) {
int n1 = 1, n2 = 0;
for (int i = 2; i < num; i++) {
int swap = n1;
n1 = n1 + n2;
n2 = swap;
}
return n1 + n2;
}
}
252 :
M.B. :04/11/23 21:37:03
>>248 これは数値計算あるいはシミュレーションの問題なのか、
画像生成の問題なのか、
それとも同期を取って実時間表示する方法を問うているのか、
あるいはその全部なのか、どれだ。
あらかじめ一周期ぶんの画像を作成しておいて、それを
決まったタイミングで出力するというのがいちばん簡単だが、
ゲームなんかだと、画像を生成しながらリアルタイムで
(つまり、マシンの速度にかかわらず、決まった速さで)
表示する必要がある。
そのあたりの前提条件を明らかしる。
253 :
デフォルトの名無しさん :04/11/23 21:39:37
フォルダ内のファイルの名称を取得して 指定したフォルダに書き出したいのですが ファイルへの書き出しは分かるのですが 指定したフォルダ内のファイルの取得方法について教えてください
254 :
デフォルトの名無しさん :04/11/23 21:47:37
>指定したフォルダに書き出したいのですが ↓ 指定したファイルにその情報を書き出したいのですが
255 :
デフォルトの名無しさん :04/11/23 21:50:17
>>253 File folder = new File("フォルダの名前");
File file[] = folder.listFiles();
256 :
M.B. :04/11/23 21:53:29
>>253 これでも読んでみそ。
/**
* 指定されたディレクトリの下にあるすべてのディレクトリとファイルを
* 木の形で標準出力に表示する。
*/
import java.io.*;
import java.util.*;
public class DirTree {
static HashMap gFileList;
public static void main( String argv[] ){
gFileList = new HashMap ();
try {
if ( argv.length == 0 ) {
DirTree( "." ); // 引数なしの場合、カレントディレクトリから。
} else {
DirTree( argv[0] ); // 引数ありの場合、そのディレクトリから。
}
}
catch( Exception e ) { // エラーが発生
System.err.println("Error....");
System.exit(-1);
}
}
257 :
M.B. :04/11/23 21:53:52
private static void DirTree( String sdir ) throws Exception { System.out.println( sdir ); String str = new String(); File rootdir = new File( sdir ); WalkTree( rootdir ); DirTree( rootdir, str ); }
258 :
M.B. :04/11/23 21:54:17
/** * ディレクトリを巡回し、最新のファイルを見つける。 */ private static void WalkTree( File dir ) throws Exception { File flist[] = dir.listFiles(); for ( int idx = 0 ; idx < flist.length ; idx += 1 ) { if ( flist[idx].isDirectory() ) { WalkTree( flist[idx] ); } else { String filename = flist[idx].getName(); long ytime = flist[idx].lastModified(); if ( gFileList.containsKey(filename) ) { long xtime = ((Long)gFileList.get(filename)).longValue(); ytime = flist[idx].lastModified(); if ( xtime < ytime ) { gFileList.put(filename, new Long( ytime )); } } else { gFileList.put( filename, new Long( flist[idx].lastModified() ) ); } } } }
259 :
M.B. :04/11/23 21:54:46
// 木を描く private static void DirTree( File dir, String str ) throws Exception { File flist[] = dir.listFiles(); if ( flist.length > 0 ) { for ( int idx = 0 ; idx < ( flist.length - 1 ); idx += 1 ) { if ( flist[idx].isDirectory() ) { System.out.println( str + "├ " + flist[idx].getName() + File.separator ); DirTree(flist[idx], str + "│ "); } else { if (newest( flist[idx] )) { System.out.println( str + "├ " + flist[idx].getName() ); } else { System.out.println( str + "├ " + flist[idx].getName() + "(旧)" ); } } }
260 :
M.B. :04/11/23 21:55:07
/* 最後の一個は処理を分ける。 */ if ( flist[flist.length - 1].isDirectory() ) { System.out.println( str + "└ "+ flist[flist.length - 1].getName() + File.separator ); DirTree(flist[flist.length - 1], str + " "); } else { if (newest( flist[flist.length - 1] )) { System.out.println( str + "└ "+ flist[flist.length - 1].getName() ); } else { System.out.println( str + "└ "+ flist[flist.length - 1].getName()+"(旧)" ); } } } }
261 :
デフォルトの名無しさん :04/11/23 21:55:17
>>252 これは画像生成の問題で、とりあえずアップレットでサンプルに近い感じでうごかせればいいです。
ルンゲ・クッタ法をつかってといてください。
すいません説明不足で。
262 :
M.B. :04/11/23 21:56:12
/** * gFileList の中から名前をキーに最終更新時間を探し、、 * 最新だったら 0 を返す。 */ private static boolean newest( File file ) throws Exception { String filename = file.getName(); long xtime = ((Long)gFileList.get(filename)).longValue(); long time = file.lastModified(); if ( time >= xtime ) { return true; } else { return false; } } }
なんだこのスレわ ソースコードだらけじゃん
264 :
M.B. :04/11/23 22:25:34
>>263 では彩りにAAでも入れてやろう
∧_∧
∧_∧ (´<_` ) あまり本質的な解決に
( ´_ゝ`) / ⌒i なっていないと思うぞ兄者
/ \ | |
/ / ̄ ̄ ̄ ̄/ |
__(__ニつ/ IBM / .| .|____
\/____/ (u ⊃
Newton 法を用いて,与えられた整数 c の平方根を求めるプログラムを作成せよ。 1.整数 c と計算の繰り返し回数 n をキーボードから指定できるようにすること 。 2.繰り返し計算の初期値(x0)を解に近い値に設定できるように工夫すること。 3.ニュートン法の本体(繰り返し計算をする部分)をメソッドとして独立させること。 どうかお助けください。
>>265 import java.io.*; import java.math.*; import java.util.regex.*;
public class HW25 {
public static void main(String[] args) {
int num = 1, max = 1; String s;
while (true) {
try {
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
System.out.print("数値の指定= "); s = r.readLine(); num = Integer.parseInt(s);
System.out.print("繰り返し数= "); s = r.readLine(); max = Integer.parseInt(s);
} catch (Exception e) {
System.out.print("入力が不正→終了"); System.exit(0);
}
String fig = compute(num, max).toString();
Matcher mat = Pattern.compile("0+$").matcher(fig);
if (mat.find()) fig = mat.replaceFirst("0");
System.out.println(num + "の平方根 = " + fig);
}
}
static BigDecimal compute(int arg_num, int max) {
BigDecimal num = new BigDecimal(arg_num).setScale(100);
BigDecimal x = new BigDecimal(arg_num / 2).setScale(100);
BigDecimal d, TWO = new BigDecimal(2), ZERO = new BigDecimal(0);
for (int i = 1; i <= max; i++) {
d = x.subtract(num.divide(x, BigDecimal.ROUND_HALF_EVEN)).divide(
TWO, BigDecimal.ROUND_HALF_EVEN);
x = x.subtract(d);
if (d.compareTo(ZERO) == 0) { break; }
}
return x;
}
}
267 :
デフォルトの名無しさん :04/11/24 11:32:58
アプレットの質問です; ボタンを押したらキャンバスにGraphics gによって 何らかの動作をさせたいのですが、 textfieldについてはうまく行きますが、 cav.paing(Graphics g)と書くとそこでエラーがでてしまいます。 教えていただければ大変助かります; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.Graphics; /* <APPLET CODE = "ButtonTest.class" WIDTH=200 HEIGHT=100> </APPLET> */
268 :
その2 :04/11/24 11:33:32
public class ButtonTest extends JApplet { JButton jb1; JTextField jtf; Canvas cav; public void init() { // create botton jb1 = new JButton("test"); MC_Listener mc = new MC_Listener(); // add listener jb1.addActionListener(mc); // add botton JPanel jp1 = new JPanel(); jp1.add(jb1); getContentPane().add(jp1, "North"); // create and add textfield jtf = new JTextField(20); JPanel jp2 = new JPanel(); jp2.add(jtf); getContentPane().add(jp2, "Center"); // create and add canvas cav = new Canvas(); JPanel jp3 = new JPanel(); jp3.add(cav); getContentPane().add(jp3, "South"); }
269 :
その3 :04/11/24 11:34:17
class MC_Listener implements ActionListener { public void actionPerformed(ActionEvent e) { if(e.getSource() == jb1) { jtf.setText("hi guys!!"); cav.paint(Graphics g),{ g.drawString("i did it!! thx!", 5, 5); } } } } }
270 :
デフォルトの名無しさん :04/11/24 11:36:49
271 :
デフォルトの名無しさん :04/11/24 11:39:07
272 :
デフォルトの名無しさん :04/11/24 11:46:31
273 :
デフォルトの名無しさん :04/11/24 12:01:01
>>267 Canvas cav;
の部分を
String cabText = "";
Canvas cav = new Canvas() {
public void paint(Graphics g) {
g.drawString(cavText, 5, 5);
}
};
と修正し、
cav = new Canvas();
の行を削除し
cav.paint(Graphics g),{
g.drawString("i did it!! thx!", 5, 5);
}
の部分を
cavText = "i did it!! thx!";
cav.repaint();
と修正してみてください。
初歩的な問題だとは思うのですがよろしくお願いします キーボードから入力された16進の文字列(0000〜FFFF 頭に0xをつけても良い)を 10進の数値に変換して画面に出力するプログラムを作成しなさい 例 入力が000Fの場合には出力は15 0010の場合には出力は16となる
>>274 public class Hex{
public static void main(String[] args){
System.out.println(Long.parseLong(args[0], 16));
}
}
276 :
デフォルトの名無しさん :04/11/24 23:56:36
double MIN = 0.0; double MAX = 10.0; double dt = 0.01; euler(MIN, MAX, dt) //積分結果の最後の値を返す 0から10.0まで積分計算をし、積分結果の最後の値を返す関数eulerがあるのですが、 途中の計算過程も出力するようにするにはどうすればいいのですか?
277 :
M.B. :04/11/24 23:59:26
>>276 普通は区間を分けてeuler()を求めて合計すればよさそうに思うが、
数値積分は端点の処理がけっこう重要なので、
euler()の中でやるのが順当。
したがってeuler()を書き換えずになんとかするのは
たぶん実際的ではない。
278 :
デフォルトの名無しさん :04/11/25 00:28:09
>>277 >>したがってeuler()を書き換えずになんとかするのは
>>たぶん実際的ではない。
実際的でないのですか。書き込みありがとうございます。
質問ですが、実際的でなくてもかまわないのでそのやり方を教えてください。
double sum = 0.0; double step = 0.1; for (double start = MIN;start += step;start < MAX ) { sum += euler(start, start + step, dt); // ここでsumを出力。 }
280 :
デフォルトの名無しさん :04/11/25 18:15:58
サパーリわからないので、お願いします 回帰分析の計算 ベクトルy 46.005 55.805 47.805 49.205 61.405 66.505 43.005 44.305 61.405 56.205 と計画行列x 1 8 17 1 6 23 1 15 15 1 12 17 1 13 23 1 17 24 1 9 15 1 13 14 1 13 23 1 13 19 を初期化して与え、係数ベクトルβの推定値を求め、printlnで出力するプログラムを作成しなさい
281 :
280 :04/11/25 18:16:36
続きです 計画行列x(m×n)と出力ベクトルy(m×1)が与えられたときの、 係数ベクトル推定量βは β=(xt*x)-1*xt*yである (xtはxの転置行列 -1は逆行列の意味です 転置行列、逆行列、行列の積のクラスも自分で作成せよとのこと どうか、よろしくお願いします。
きみは回答者に対して回帰分析の式をぐぐってくれと言っているのかね
283 :
218 :04/11/25 19:18:17
問題:int型の”1234”DESKeyを使ってを暗号化・複合化せよ。 また、暗号化・複合化ができていることを確認できるプログラムを作れ。 という宿題がでました。 何度もすみませんが、教えてください。 また、この宿題はプログラムの説明もレポートにしなくてはならないので、 プログラムだけでなく説明もして頂けると幸いです。
284 :
218 :04/11/25 19:24:36
訂正です。 問題は int型の”1234”を、DESKeyを使って暗号化・複合化せよ です。失礼しました。
DESKeyって何ですか?
286 :
古代帝國富士皇朝総帥・伯壬旭 :04/11/25 21:01:51
>>283 その1
import javax.crypto.*;
import java.nio.*;
public class HW26 {
static final int VALUE = 1234;
public static void main(String[] args) {
byte[] sourceData = null, encodeData = null, decodeData = null;
try {
KeyGenerator kg = KeyGenerator.getInstance("DES");
SecretKey key = kg.generateKey();
Cipher cip = Cipher.getInstance("DES");
ByteBuffer bb = ByteBuffer.allocate(4);
bb.putInt(VALUE);
sourceData = bb.array();
cip.init(Cipher.ENCRYPT_MODE, key);
encodeData = cip.doFinal(sourceData);
cip.init(Cipher.DECRYPT_MODE, key);
decodeData = cip.doFinal(encodeData);
} catch (Exception e) {
System.out.println("エラー終了");
System.exit(0);
}
System.out.print("int型数値 1234 の元のバイト配列(ビッグエンディアン): ");
outputData(sourceData);
System.out.print("DES鍵によって暗号化したバイト配列: ");
outputData(encodeData);
System.out.print("DES鍵によって複合化したバイト配列: ");
outputData(decodeData);
}
287 :
古代帝國富士皇朝総帥・伯壬旭 :04/11/25 21:03:04
>>283 その2
static void outputData(byte[] data) {
for (int i = 0; i < data.length; i++) {
System.out.print(Integer.toHexString(data[i] & 0xff) + " ");
}
System.out.println();
}
}
288 :
デフォルトの名無しさん :04/11/25 21:03:49
(xt*x)-1*xtってx-1じゃないか?
289 :
デフォルトの名無しさん :04/11/25 21:04:34
290 :
デフォルトの名無しさん :04/11/25 21:05:09
正方じゃないのか・・.
>>276-279 もっとスマートなやり方がある気がするが…
やり方が思い出せない。
思い出したらカキコ
292 :
M.B. :04/11/25 21:34:08
高次方程式の近似解を求めるのに Newton 法がよく用いられる. f(x) のグラフ上で,初期値 x0 を与えてA点(x0, f(x0))において接線を引き,その接線と x 軸が交差する点を x1 とすると,x1 は x0 よりも解に近い点となる. 同様に x1 を与えて B点(x1, f(x1))において接線を引くと,さらに解に近い x2 が得られる. この操作を繰り返して近似解を求めるのが Newton法 である. 一般に xn と xn+1 の関係は,xn+1 = xn - f(xn)/f'(xn) である. この Newton 法を用いて,与えられた整数 c の平方根を求めよ(つまり,x~2 = c の解をニュートン法によって求めよ,ということ.また,初期値 x0 をできるだけ解に近い値に設定しないと,少ない繰り返し回数では良い近似解が得られないこともあるので注意すること). ただし,この c の値と,計算の繰り返し回数 n をキーボードから指定できるようにせよ. って課題が出たんですど次に書く奴であってるか確かめてもらえないでしょうか? KeyboardInput.inputInt();ってのは講師から与えられたメソッドです。 public class Rep { public static void main(String[] args) { System.out.print("元の数値を入力してください "); int num = KeyboardInput.inputInt(); System.out.print("繰り返し回数を入力してください "); int max = KeyboardInput.inputInt(); double answer = compute(num , max); System.out.println(num + "の平方根は" + answer); } public static double compute(int c , int n) { double x = c/3 + 1; for (int i = 1; i <= n; i++) { x = x - (x*x - c)/(2*x); } return x; } }
自分でテストすればいいのでは・・・
296 :
218 :04/11/25 23:04:56
>>289 プログラムは無事動きました。有難うございます。
説明も宜しくお願いします。
297 :
デフォルトの名無しさん :04/11/25 23:17:40
すいません。質問させてください。 課題が出たのですが私には難しすぎました。 よろしくお願いしますm(..)m 【課題】 スロットマシンゲームを作成します。 スロットの表示は絵でも数字でも構いません。 縦2つ横4つにします。そしてヒットした絵や数字、氏名のカウントを準備して どれが一番ヒットしたかを表示します。したがってスロットは2列スロットと なります。 こんな感じです。すいませんがよろしくお願いしますm(..)m
298 :
M.B. :04/11/25 23:45:49
>>297 スロットマシンといえば、風情としてレモンは必須だな
∧_∧
∧_∧ (´<_` ) 課題で必死こいてる奴に
( ´_ゝ`) / ⌒i 風情を要求するのはどうかと思うが
/ \ | |
/ / ̄ ̄ ̄ ̄/ |
__(__ニつ/ IBM / .| .|____
\/____/ (u ⊃
299 :
297 :04/11/26 00:48:41
>>298 すいません。。。いっぱいいっぱいなんです_| ̄|○
297の追加をさせてください。
先程のスロットマシンの内容に加えてHTML上で動かしたいので
アプレットでお願いします。
どうかよろしくお願いしますm(..)m
300 :
デフォルトの名無しさん :04/11/26 00:51:50
自分の使っているマシン情報(OS、メモリ、CPU、IPアドレス、ユーザ名、起動からの経過時間) を取得したいのですが可能なんでしょうか?
301 :
デフォルトの名無しさん :04/11/26 01:06:35
課題が出たのですがぜんぜんわかりません泣 お願いします。 【課題】抽象クラスとしてトランプゲームのクラスを作成する. このクラス には抽象メソッドとしてカードを配る,ゲームをプレイするなどを持ち, 普通のメソッドとしてgameを持つ. gameはカードクラスのオブジェクトを作成し,3回プレイし,勝者の判定をするメソッドである. トランプゲームのクラスを拡 張し、ブラックジャックを作成する. コンピュータとプレイヤの 1対1の対戦とし,ルールは簡略化しても構わない. カードクラスではトラ ンプのカードを保持しており,カードをシャッフルする,一枚のカードを配るといったメソッドを持つ. また,プレイヤクラスなどを作成し,これらを統合したプログラムにせよ.
302 :
デフォルトの名無しさん :04/11/26 01:54:09
>>300 java.lang.System#getProperty()
java.net.InetAddress#getAddress()
起動からの経過時間は、Singletonクラスでも作って起動時に
開始時間をセットしておけばいい
>>301 トランプゲームに共通なデータ、操作をabstractクラスにくくり出せば
良いわけです。
簡易版オイチョカブ(3枚の合計の下1桁がおおきい方が勝ち)をクラス
構造に書き下すと下のようになります。
public class Card{ int no; String mark; getNo(){}; getMark{}; setNo(){}; getMark(){}; }
abstract class AbstractGame{
Card[] cards;
コンストラクタ{ フィールドのcards配列に53枚のカードを作成 }
void shuffle(){ cards配列をシャッフルする }
Card getCard(){ cards配列の先頭の一枚を取り出す }
abstract Card[] deal(); // 最初にn枚配る。ゲームによって違う
abstract boolean isUserWin( Card[] user , Card[] com );
// userとcomの手配を比較して勝敗を決める。ゲームによって違う
}
class TinyOithokabu extends AbstractGame{
Card[] deal(){ cardsの先頭から3枚取り出す }
boolean isUserWin( Card[] user , Card[] com ){ カードの合計%10 がuserの方が大きければtrue,そうでなければfalseを返す}
}
>>302 起動ってのはマシン起動からなんですが…
無理でしょうか?
30個の一様乱数を要素に持つ配列を小さい物から順に並び替えるプログラムを、 最低2つのアルゴリズムで作成せよ という課題が出ました。 さっぱりなのでお願いします。
import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.*; import java.util.List; import java.awt.image.*; public class BlackJack extends TrumpGame { private int issue; private boolean waitFlag; private Player player, dealer; private CardHandler ch; private JButton btn_hit = new JButton("Hit"), btn_stand = new JButton("Stand"), btn_next = new JButton("Next"); public static void main(String[] args) { new BlackJack().game(); } private BlackJack() { JFrame frame = new JFrame(); JPanel panel = new JPanel(); btn_next.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { waitFlag = false; } }); btn_hit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { player.receiveCard(ch.getOneCard(), false); if (player.getTotalNumber() > 21) { judge(); } } }); btn_stand.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { judge(); } }); panel.add(btn_next); panel.add(btn_hit); panel.add(btn_stand); frame.getContentPane().add(screen); frame.getContentPane().add(panel, BorderLayout.SOUTH); frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }
int playGame(int no) { screen.setText(no + "回戦目"); drawTable(); ch = new CardHandler(false); player = new Player(new Rectangle(100, 380, 500, 100), this); dealer = new Player(new Rectangle(100, 10, 500, 100), this); dealCard(); btn_next.setEnabled(false); btn_hit.setEnabled(true); btn_stand.setEnabled(true); issue = NONE; while (issue == NONE) { } btn_next.setEnabled(true); btn_hit.setEnabled(false); btn_stand.setEnabled(false); waitFlag = true; while (waitFlag) { } btn_next.setEnabled(false); return issue; } void dealCard() { player.receiveCard(ch.getOneCard(), false); dealer.receiveCard(ch.getOneCard(), true); player.receiveCard(ch.getOneCard(), false); dealer.receiveCard(ch.getOneCard(), true); dealer.reverseCard(1); }
private void judge() { dealer.reverseCard(0); while (dealer.getTotalNumber() <= 16) { dealer.receiveCard(ch.getOneCard(), false); } int pn = player.getTotalNumber(), dn = dealer.getTotalNumber(); String text; if (pn == 100 && dn == 100) { issue = DRAW; text = "引き分け " + "BlackJack vs BlackJack"; } else if (pn == 100) { issue = WIN; text = "勝利 " + "BlackJack vs " + dn; } else if (dn == 100) { issue = LOSE; text = "負け " + pn + " vs BlackJack"; } else if (pn > 21 && dn > 21) { issue = DRAW; text = "引き分け " + "Over vs Over"; } else if (pn > 21) { issue = LOSE; text = "負け " + "Over vs " + dn; } else if (dn > 21) { issue = WIN; text = "勝ち " + pn + " vs Over"; } else if (pn > dn) { issue = WIN; text = "勝ち " + pn + " vs " + dn; } else if (pn < dn) { issue = LOSE; text = "負け " + pn + " vs " + dn; } else { issue = DRAW; text = "引き分け " + pn + " vs " + dn; } screen.setText(text); } }
abstract class TrumpGame { BufferedImage table = new BufferedImage(640, 480, BufferedImage.TYPE_INT_ARGB); Graphics2D g = table.createGraphics(); JLabel screen = new JLabel(); static final int NONE = 0, WIN = 1, LOSE = 2, DRAW = 3; protected TrumpGame() { g.setBackground(new Color(180, 220, 180)); g.setFont(new Font("Dialog", 0, 20)); screen.setFont(new Font("Dialog", 1, 40)); screen.setHorizontalTextPosition(JLabel.CENTER); screen.setIcon(new ImageIcon(table)); } void game() { while (true) { int plscr = 0, dlscr = 0; for (int i = 0; i < 3; i++) { int ans = playGame(i + 1); if (ans == WIN) { ++plscr; } else if (ans == LOSE) { ++dlscr; } } String text = "3回戦終了<br>player " +plscr + "勝 dealer " + dlscr + "勝で<br>"; if (plscr > dlscr) { text += "Playerの勝利<br>(3秒間待機)"; } else if (plscr < dlscr) { text += "Dealerの勝利<br>(3秒間待機)"; } else { text += "引き分け<br>(3秒間待機)"; } drawTable(); screen.setText("<html>" + text + "</html>"); try { Thread.sleep(3000); } catch (InterruptedException e) { } } } abstract int playGame(int no); abstract void dealCard();
void drawCard(Card card) { if (card.isReverse) { g.setColor(new Color(180, 180, 220)); g.fillRect(card.x, card.y, 60, 90); g.setColor(Color.black); g.drawRect(card.x, card.y, 59, 89); screen.repaint(card.x, card.y, 60, 90); return; } g.setColor(Color.white); g.fillRect(card.x, card.y, 60, 90); g.setColor(Color.black); g.drawRect(card.x, card.y, 59, 89); String text; switch (card.type) { case Card.SPADE: g.setColor(Color.black); text = "spade"; break; case Card.CLUB: g.setColor(Color.blue); text = "club"; break; case Card.DIA: g.setColor(Color.magenta); text = "dia"; break; case Card.HART: g.setColor(Color.red); text = "hart"; break; default: g.setColor(Color.gray); text = "joker"; g.drawString(text, card.x + (60 - g.getFontMetrics().stringWidth(text)) / 2, card.y + (90 - g.getFontMetrics().getHeight()) / 2 + g.getFontMetrics().getAscent()); return; } g.drawString(text, card.x + (60 - g.getFontMetrics().stringWidth(text)) / 2, card.y + g.getFontMetrics().getAscent()); switch (card.no) { case 1: text = "A"; break; case 11: text = "J"; break; case 12: text = "Q"; break; case 13: text = "K"; break; default: text = String.valueOf(card.no); } g.drawString(text, card.x + (60 - g.getFontMetrics().stringWidth(text)) / 2, card.y + (90 - g.getFontMetrics().getHeight()) / 2 + g.getFontMetrics().getAscent()); screen.repaint(card.x, card.y, 60, 90); }
void drawTable() { g.setColor(Color.green); g.clearRect(0, 0, table.getWidth(), table.getHeight()); screen.repaint(); } } class Card { static final int SPADE = 0, CLUB = 1, DIA = 2, HART = 3, JOKER = 4; int type; int no; int x = -1, y = -1; boolean isReverse; } class CardHandler { boolean hasJoker; Card[] cards; List cardList; CardHandler(boolean hasJoker) { this.hasJoker = hasJoker; reset(); } void shuffleCard() { List list = Arrays.asList(cards); Collections.shuffle(list, new Random(System.currentTimeMillis())); cards = (Card[]) list.toArray(cards); } Card getOneCard() { return (Card) cardList.remove(0); }
void reset() { if (hasJoker) { cards = new Card[54]; int idx = 0; for (int i = 0; i < 4; i++) { for (int k = 1; k <= 13; k++) { cards[idx] = new Card(); cards[idx].type = i; cards[idx++].no = k; } } cards[idx] = new Card(); cards[idx++].type = Card.JOKER; cards[idx] = new Card(); cards[idx].type = Card.JOKER; } else { cards = new Card[52]; int idx = 0; for (int i = 0; i < 4; i++) { for (int k = 1; k <= 13; k++) { cards[idx] = new Card(); cards[idx].type = i; cards[idx++].no = k; } } } shuffleCard(); cardList = new ArrayList(Arrays.asList(cards)); } } class Player { List myCard = new ArrayList(); Rectangle space; BlackJack gameObj; Player(Rectangle space, BlackJack gameObj) { this.space = space; this.gameObj = gameObj; } void receiveCard(Card card, boolean reverse) { card.x = myCard.size() * 60 + space.x + myCard.size() * 4; card.y = space.y; card.isReverse = reverse; gameObj.drawCard(card); myCard.add(card); }
void reverseCard(int index) { Card card = (Card) myCard.get(index); card.isReverse ^= true; gameObj.drawCard(card); } int getTotalNumber() { int num = 0; Set bjj = new TreeSet(); for (int i = 0; i < myCard.size(); i++) { Card card = (Card) myCard.get(i); if (card.no == 1) { num += 11; bjj.add(new Integer(1)); } else if (card.no >= 10) { num += 10; bjj.add(new Integer(2)); } else { num += card.no; bjj.add(new Integer(0)); } if (i == 1) { if (bjj.contains(new Integer(1)) && bjj.contains(new Integer(2))) return 100; } } if (num > 21) { for (int i = 0; i < myCard.size(); i++) { Card card = (Card) myCard.get(i); if (card.no == 1) { num -= 10; if (num <= 21) break; } } } return num; } }
>>301 上記の8つのコードを一字一句逃さずにコピペしてコンパイルしてください。
かなりコードが敷き詰めてられてるので、適当にフォーマットし直してください。
あと、ハートのスペルを間違えてるので、適当に修正してください。
BlackJackクラスを指定して、実行してください。
操作法は、Hitボタンでカードをもらい、Standボタンで勝負します。
Nextボタンで次に移ります。
314 :
デフォルトの名無しさん :04/11/26 19:17:39
315 :
M.B. :04/11/26 20:21:13
>>297 スロットマシンというのは、通常3×3なので、
どういう形で倍率(整数値)が計算されるのかを
明確にしてもらわないとプログラムが書けない。
特に、回転するシリンダーの駒数がいくつで、
それぞれの駒に何の図柄が入っていて、
それがどの升目にどういう形で並ぶと倍率が何倍になるか
(チェリーは中央列の左側に入った場合、一個でも当たりになる)
定義しる。
積分区間がMIN<x<MAXである積分の最後の値を返す関数 euler(MIN,MAX,dt)があり、xはdtずつ変化(x+=dt)する。 double MIN = 0.0; double MAX = 100.0; double dt = 0.01; euler(MIN, MAX, dt) //積分結果の最後の値を返す 0から100.0まで積分計算をし、xの値が0番目、100番目、200番目…900番目、 1000番目というように積分区間の間の任意の値を表示するにはどうしたら いいのですか? お願いします。
317 :
デフォルトの名無しさん :04/11/26 20:36:05
それならルンゲ・クッタ法をつかおうぜ。
マルチだよそいつ
320 :
M.B. :04/11/26 21:04:39
大変もうしわけないんですが、 整数型で 12 23 1 42 15 5 ・・・・・・・ のようにスペースで区切られている一行のデータを読み込んで、入力件数、最大値、最小値、種類件数をもとめるにはどうすればよいでしょうか? JAVAで整数を読み込むという関数はあるのですか? ほんっとに初心者なものでもうしわけないですが、どなたか教えてください。
import java.util.*; public class HW28 { public static void main(String[] args) { int[] source = new int[30]; Set set = new TreeSet(); while (set.size() < 30) { int num = (int) (Math.random() * 30); if (!set.contains(new Integer(num))) { source[set.size()] = num; set.add(new Integer(num)); } } outputData(source, "元のデータ"); int[] data = new int[source.length]; System.arraycopy(source, 0, data, 0, source.length); heapSort(data); outputData(data, "ヒープソート"); System.arraycopy(source, 0, data, 0, source.length); mergeSort(data); outputData(data, "マージソート"); System.arraycopy(source, 0, data, 0, source.length); quickSort(data, 0, data.length - 1); outputData(data, "クイックソート"); System.arraycopy(source, 0, data, 0, source.length); insertionSort(data); outputData(data, "インサーションソート"); System.arraycopy(source, 0, data, 0, source.length); bubbleSort(data); outputData(data, "バブルソート"); System.arraycopy(source, 0, data, 0, source.length); selectionSort(data); outputData(data, "セレクションソート"); } static void outputData(int[] data, String text) { System.out.print(text + " : "); for (int i = 0; i < data.length; i++) { System.out.print(data[i] + " "); } System.out.println(); }
static void heapSort(int[] data) { for (int i = (data.length - 2) / 2; i >= 0; i--) { int idx = i, src = data[idx], child = 0; while (true) { child = idx * 2 + 1; if (child > data.length - 1) { break; } if (child < data.length - 1) { if (data[child] < data[child + 1]) { ++child; } } if (src > data[child]) { break; } data[idx] = data[child]; idx = child; } data[idx] = src; } for (int i = data.length - 1; i > 0; i--) { int swap = data[0]; data[0] = data[i]; data[i] = swap; int idx = 0, src = data[idx], child = 0; while (true) { child = idx * 2 + 1; if (child > i - 1) { break; } if (child < i - 1) { if (data[child] < data[child + 1]) { ++child; } } if (src > data[child]) { break; } data[idx] = data[child]; idx = child; } data[idx] = src; } }
static void mergeSort(int[] src) { int[] dst = new int[src.length]; for (int width = 1; width < src.length; width *= 2) { for (int start = 0; start < src.length; start += width * 2) { int idx1 = start, idx2 = start + width, ptr = start; int len1 = Math.min(idx1 + width, src.length); int len2 = Math.min(idx2 + width, src.length); while (idx1 < len1 && idx2 < len2) { if (src[idx1] <= src[idx2]) { dst[ptr++] = src[idx1++]; } else { dst[ptr++] = src[idx2++]; } } while (idx1 < len1) { dst[ptr++] = src[idx1++]; } while (idx2 < len2) { dst[ptr++] = src[idx2++]; } } System.arraycopy(dst, 0, src, 0, src.length); } } static void quickSort(int[] data, int left, int right) { if (left >= right) { return; } int center = left + (right - left) / 2, num = data[center], idx = left; data[center] = data[left]; for (int i = left + 1; i <= right; i++) { if (data[i] < num) { int swap = data[++idx]; data[idx] = data[i]; data[i] = swap; } } data[left] = data[idx]; data[idx] = num; quickSort(data, left, idx - 1); quickSort(data, idx + 1, right); }
static void insertionSort(int[] data) { for (int a = 1; a < data.length; a++) { for (int b = a; b > 0 && data[b] < data[b - 1]; b--) { int swap = data[b]; data[b] = data[b - 1]; data[b - 1] = swap; } } } static void bubbleSort(int[] data) { for (int a = 0; a < data.length; a++) { for (int b = 1; b < data.length - a; b++) { if (data[b] < data[b - 1]) { int swap = data[b]; data[b] = data[b - 1]; data[b - 1] = swap; } } } } static void selectionSort(int[] data) { for (int a = 0; a < data.length; a++) { for (int b = a; b < data.length; b++) { if (data[b] < data[a]) { int swap = data[b]; data[b] = data[a]; data[a] = swap; } } } } }
>>304 コピペしてコンパイル。
敷き詰めて書いてるので、フォーマットしなおしてください。
327 :
M.B. :04/11/26 21:42:58
>>321 一行読んでから StringTokenizer を使え
すみません。めんどくさいのはわかるんですがどなたか教えてください。。 一行読み込んでから、整数を一つずつ配列に入れるのでしょうか?それとも、 整数読み込みのような関数があるのでしょうか?
一行読みこんでStringTokenizerをつかってスペースできりわけ、 その後int型の配列にぶち込んで表示。
330 :
デフォルトの名無しさん :04/11/26 21:52:57
>>328 textを12 23 1 42 15 5 ・・の一行のデータが入ってるString型変数とすると
int[] num = new int[1000];
int idx = 0;
StringTokenizer st = new StringTokenizer(text, " ");
while (st.hasMoreTokens()) {
String token = st.nextToken();
num[idx++] = Integer.parseInt(token.trim());
}
こうすれば、空白で区切られた数値が int配列の num に順に格納される。
まじでありがとうございます!!! さっそくやってみます!!
スペースで切り分けるだけならsplit()でいいじゃん。
後々のこと考えるとStringTokenizer
>>283 >>296 >>286 の説明文です。
KeyGenerator kg = KeyGenerator.getInstance("DES");
SecretKey key = kg.generateKey();
で、DESアルゴリズムの秘密鍵 key を作成し
Cipher cip = Cipher.getInstance("DES");
で、デフォルトのモードとパディング方式によるDESの
Chipherインスタンス cip を作成し、
ByteBuffer bb = ByteBuffer.allocate(4);
bb.putInt(VALUE);
sourceData = bb.array();
で、"1234"のint数値をバイト配列sourceDataに格納し
cip.init(Cipher.ENCRYPT_MODE, key);
で、cip を暗号化モードに設定して(鍵も指定)
encodeData = cip.doFinal(sourceData);
で、sourceDataを暗号化したデータを、encodeDataに格納する。
cip.init(Cipher.DECRYPT_MODE, key);
で、cip を復号化モードに設定して(鍵も指定)
decodeData = cip.doFinal(encodeData);
で、encodeDataを復号化したデータを、decodeDataに格納する。
335 :
M.B. :04/11/26 22:21:31
>>333 とはいえ意外に使い道の少ない StringTokenizer
結局自分で Tokenizer を書いている
>>283 >>296 >>286 の説明文です。
KeyGenerator kg = KeyGenerator.getInstance("DES");
SecretKey key = kg.generateKey();
で、DESアルゴリズムの秘密鍵 key を作成し
Cipher cip = Cipher.getInstance("DES");
で、デフォルトのモードとパディング方式によるDESの
Chipherインスタンス cip を作成し、
ByteBuffer bb = ByteBuffer.allocate(4);
bb.putInt(VALUE);
sourceData = bb.array();
で、"1234"のint数値をバイト配列sourceDataに格納し
cip.init(Cipher.ENCRYPT_MODE, key);
で、cip を暗号化モードに設定して(鍵も指定)
encodeData = cip.doFinal(sourceData);
で、sourceDataを暗号化したデータを、encodeDataに格納する。
cip.init(Cipher.DECRYPT_MODE, key);
で、cip を復号化モードに設定して(鍵も指定)
decodeData = cip.doFinal(encodeData);
で、encodeDataを復号化したデータを、decodeDataに格納する。
>>283 >>296 >>286 の説明文です。
KeyGenerator kg = KeyGenerator.getInstance("DES");
SecretKey key = kg.generateKey();
で、DESアルゴリズムの秘密鍵 key を作成し
Cipher cip = Cipher.getInstance("DES");
で、デフォルトのモードとパディング方式によるDESの
Chipherインスタンス cip を作成し、
ByteBuffer bb = ByteBuffer.allocate(4);
bb.putInt(VALUE);
sourceData = bb.array();
で、"1234"のint数値をバイト配列sourceDataに格納し
cip.init(Cipher.ENCRYPT_MODE, key);
で、cip を暗号化モードに設定して(鍵も指定)
encodeData = cip.doFinal(sourceData);
で、sourceDataを暗号化したデータを、encodeDataに格納する。
cip.init(Cipher.DECRYPT_MODE, key);
で、cip を復号化モードに設定して(鍵も指定)
decodeData = cip.doFinal(encodeData);
で、encodeDataを復号化したデータを、decodeDataに格納する。
な、なんだ? すいません。勝手に連投されてしまいました。 なんか遅いな〜、と思ってたら。
>>338 201〜300 しか表示してなかったんだろ。きっと。
それで連続ポストしちまったんだな。
341 :
デフォルトの名無しさん :04/11/26 22:36:20
>>297 >>縦2つ横4つにします
の意味が分かりません。
7777
7777
こんな感じのスロットなんですか?
>したがってスロットは2列スロットとなります。
343 :
M.B. :04/11/26 22:46:18
>>303 起動時に自動起動するようにセットしとけばよし。
Windows XP だったら、
Documents and Settings>(ユーザ名)>スタート メニュー>プログラム>スタートアップ
に、起動用のバッチファイルを書いて置いとけ。
344 :
M.B. :04/11/26 22:51:56
>>342 普通のスロットだと、「斜め」っつーのがあるんだが、
二列だと斜めがないのでどういうルールなのかわからん。
さらに言うと、スロットの妙味は
「揃いそうで揃わない絵柄の配置」にあるので、
むしろ確率計算のほうに興味があるのだが。
キーボードから1〜12の数を読み込んで、その数の月の英語名を 実行例のように表示するプログラムを作れ。 実行例:何月ですか? 6 英語で6月はJuneです。 宜しくお願いします。
#include <stdio.h> int main(void) { char *month[]={"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; char m; while(1){ printf("何月ですか? "); m = fgetc(stdin); printf("%d月は%sです。\n", m, month[m]); } return 0; }
347 :
M.B. :04/11/26 23:09:16
いろいろ見てみると良問が少ないのう。 「Java の宿題はここで出します」とかいうスレでも立てて、 課題を出す方も教育したほうがいいんでないかい?
import java.io.*; import java.util.*; class sample3 { public static void main(String args[]) { try{ String ss; int num; int idx = 0 , i , cnt=0, cnt2=0 , flag=0; int inpData[][] = new int[1000][1]; int maxData = 0 , minData = 1000; for( i=0; i<1000 ;i++) { for(int j=0;j<1;j++) { inpData[i][j]=0; } } BufferedReader fr = new BufferedReader( new FileReader("H16C2data2.txt")); ss = fr.readLine(); StringTokenizer st = new StringTokenizer(ss , " ");
>>346 プログラムの作り方が習ってないのですが・・・
while(st.hasMoreTokens()) { String token = st.nextToken(); num = Integer.parseInt(token.trim()); idx++; for(i=0;i<idx;i++) { if(inpData[i][0]==num) { inpData[i][1]++; flag=1; } if(flag==0) { inpData[cnt2][1]++; inpData[cnt2][0]=num; cnt2++; } cnt++; if(maxData<num)maxData = num; if(minData>num)minData = num; } } System.out.println("入力件数=" + idx); System.out.println("種類件数=" + cnt2); System.out.println("最大値 =" + maxData); System.out.println("最小値 =" + minData); } catch( Exception e) { System.out.println("error"); } } } のようにプログラムを組んだのですがエラーがでてしまいます。どなたか教えてください。
すいません。なんかみにくくなってしまって。エラーがどこかわからないので、 どなたかわかる方教えてください。 ちなみに、入力件数と数値の種類などをもとめています。
352 :
M.B. :04/11/26 23:19:34
#include <stdio.h> #include <stdlib.h> int main(void) { char *month[] = {"(゚Д゚)ハァ?","Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; char m[3] = ""; char* ret; int dm; while(1){ printf("何月ですか? "); m = fgets(stdin, 2); dm = (int)strtol(m,&ret,10); if(ret == m) dm = 0; if(dm < 0 && dm > 12) dm = 0; printf("%d月は%sです。\n", dm, month[m]); } return 0; }
355 :
M.B. :04/11/26 23:48:07
>>348 import java.io.*;
import java.util.*;
class sample2 {
public static void main( String[] args ) throws Exception {
if (args.length < 1) {
System.err.println("usage:sample3 filename");
System.exit(-1);
}
BufferedReader br = new BufferedReader(new FileReader(args[0]));
String ss = br.readLine();
TreeSet nums = new TreeSet();
StringTokenizer st = new StringTokenizer(ss , " ");
int idx = 0;
while(st.hasMoreTokens()) {
String token = st.nextToken();
Integer num = new Integer(token.trim());
nums.add(num);
idx += 1;
}
System.out.println("入力件数=" + idx);
System.out.println("種類件数=" + nums.size());
System.out.println("最大値 =" + nums.last());
System.out.println("最小値 =" + nums.first());
}
}
356 :
M.B. :04/11/26 23:50:27
>>348 usage が間違ってるのは藁って許せ。
"java sample2 <filename>" が正解。
357 :
M.B. :04/11/26 23:56:11
ああもう3だか2だかも解ってないうおおおおおおおお _| ̄|○ il||li
358 :
297 :04/11/27 00:12:18
>>315 説明が不足していてすみませんでした。
お手数おかけします。
課題のスロットマシンは2X4です。図で表すと以下のような感じです。
○○○○
△△△△
回転するシリンダーの駒数は4つです。
それぞれの駒の図柄については特に指定はないのですがシリンダー1つにつき
4つもしくは5つの図形を入れます。(果物の図形を予定してます)
升目での倍率概念についてはなくていいです。
横1列に同じ絵柄が並べばそれで当たりでトータルの当たり回数を
表示させます。
加えて今回は横2列同時に当たることもありますのでその場合は
トータルカウントも2プラスになります。
よろしくお願いしますm(..)m
説明足りなくてすいません。二次元配列にした理由は、出てきた順番とその個数を 数えるために二次元配列にしました。いまは出力してないんですが、あとで付け足す予定です。 if(flag==0) { inpData[cnt2][1]++; inpData[cnt2][0]=num; cnt2++; } このあたりでエラーがでているようなのですが。。。
360 :
297 :04/11/27 00:17:50
>>341 リロードしてませんでした。。。
ごめんなさい_| ̄|○
その通りです。
>>358 にもっと詳しく書いてみましたのでよろしくお願いしますm(..)m
javaで inpData[x][y]=num[z]; ってできますか??
362 :
M.B. :04/11/27 00:29:10
>>359 見ててうざいから ArrayList に押し込んでから TreeSet に変換しれ。
瑣末なエラーに引っかかって時間を浪費するより、
まず見通しのよいコードにしてから
不具合を潰せ。
363 :
M.B. :04/11/27 00:34:52
>>359 import java.io.*;
import java.util.*;
class sample3 {
public static void main( String[] args ) throws Exception {
if (args.length < 1) {
System.err.println("usage:sample3 filename");
System.exit(-1);
}
BufferedReader br = new BufferedReader(new FileReader(args[0]));
String ss = br.readLine();
ArrayList nums = new ArrayList();
StringTokenizer st = new StringTokenizer(ss , " ");
int idx = 0;
while(st.hasMoreTokens()) {
String token = st.nextToken();
Integer num = new Integer(token.trim());
nums.add(num);
idx += 1;
}
TreeSet nums2 = new TreeSet(nums);
System.out.println("入力件数=" + idx);
System.out.println("種類件数=" + nums2.size());
System.out.println("最大値 =" + nums2.last());
System.out.println("最小値 =" + nums2.first());
}
}
364 :
デフォルトの名無しさん :04/11/27 00:36:06
365 :
M.B. :04/11/27 00:41:04
idx もいらん。 nums.size() でOK。
>>326 マジでありがとうございます。
ところで、この中でどれが一番高速化を調べるにはどうすればいいのでしょうか。
Timer
369 :
M.B. :04/11/27 08:07:56
>>359 >>1 > エラーが出たらメッセージをコピペ
if の中に num を書くと「初期化されない可能性がある」と
コンパイラに叱られる。
宣言部の
int num;
を
int num = 0;
に書き換えてみ。
370 :
M.B. :04/11/27 09:09:14
>>297 当たり判定とアプレット化は自分でしる。
import java.util.*;
public class Slot {
public static void main(String[] args) {
final int rows = 2;
final int cols = 4;
final String [][] 図柄 = {
{ "○", "●", "△", "★", "☆", "△",
"●", "○", "☆", "△", "★","△" },
{ "○", "☆", "△", "◎", "○", "☆",
"△", "○", "△", "☆", "★","△" },
{ "△", "○", "●", "△", "○",
"●", "△", "●", "○", "☆","○" },
{ "○", "●", "◎", "●", "★", "☆",
"△", "△", "○","●" }
};
int [] リール位置 = new int[cols];
int [][] 枠 = new int[rows][cols];
for (int col = 0;col < cols;col += 1) {
リール位置[col] = (int)Math.floor(図柄[col].length * Math.random());
}
for (int row = 0;row < rows;row += 1) {
for (int col = 0;col < cols;col += 1) {
枠[row][col] = (リール位置[col] + row) % 図柄[col].length;
System.out.print(図柄[col][枠[row][col]] + " ");
}
System.out.println();
}
}
}
import java.awt.event.*; import java.awt.image.*; import javax.swing.*; import java.util.*; import java.awt.*; import java.util.Timer; public class HW29 extends JApplet { static final int CS = 64, CC = 4, ROW = 2, CLM = 4, CYCLE = 60, CYMIN = 10, SLOW = 1; BufferedImage[] img = new BufferedImage[CC]; ReelTask[] task = new ReelTask[ROW * CLM]; Graphics2D[] cg = new Graphics2D[ROW * CLM]; JLabel[] lab = new JLabel[ROW * CLM]; JButton btn_stop = new JButton("Stop"), btn_start = new JButton("Start"); JLabel msg = new JLabel("当たり回数:" + 0); int crtReel, hitCount = 0; Timer tim = new Timer(); public void init() { Color[] col = {Color.blue, Color.red, Color.green, Color.yellow}; for (int i = 0; i < img.length; i++) { img[i] = new BufferedImage(CS, CS, BufferedImage.TYPE_INT_ARGB); Graphics2D g = img[i].createGraphics(); g.setColor(Color.white); g.fillRect(0, 0, CS, CS); g.setColor(col[i]); g.fillOval(4, 4, CS - 8, CS - 8); g.dispose(); }
JPanel cpal = new JPanel(), spal = new JPanel(); cpal.setBorder(BorderFactory.createEmptyBorder(16, 16, 16, 16)); cpal.setLayout(new GridLayout(ROW, CLM, 16, 16)); cpal.setBackground(new Color(220, 220, 250)); for (int i = 0; i < cg.length; i++) { BufferedImage cell = new BufferedImage(CS, CS, BufferedImage.TYPE_INT_ARGB); cg[i] = cell.createGraphics(); lab[i] = new JLabel(new ImageIcon(cell)); lab[i].setBorder(BorderFactory.createLoweredBevelBorder()); cpal.add(lab[i]); } btn_stop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(crtReel >= task.length) { return; } task[crtReel++].stop(); if(crtReel >= task.length) { btn_stop.setEnabled(false); } } }); btn_start.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { for (int i = 0; i < task.length; i++) { task[i] = new ReelTask(cg[i], lab[i]); } btn_start.setEnabled(false); btn_stop.setEnabled(true); crtReel = 0; for (int i = 0; i < task.length; i++) { tim.schedule(task[i], 100, (int) (Math.random() * CYCLE + CYMIN)); } } }); btn_stop.setEnabled(false); spal.add(btn_stop); spal.add(btn_start); spal.add(msg); getContentPane().add(cpal); getContentPane().add(spal, BorderLayout.SOUTH); }
class ReelTask extends TimerTask { Graphics2D g; JLabel lab; int count, rotc = CS / 4; boolean stopFlag; ReelTask(Graphics2D g, JLabel lab) { this.g = g; this.lab = lab; } public void run() { if (rotc <= 0) { cancel(); return; } if (stopFlag) { rotc -= SLOW; if (rotc <= 0) { count = count + (int) (CS * 0.75) & ~(CS - 1) & (CS << 2) - 1; rotc = 0; } } int crt = count / CS, nxt = crt + 1 & (CC - 1); int bound = count % CS, size1 = CS - bound, size2 = CS - size1; g.drawImage(img[crt], 0, 0, CS, size1, 0, bound, CS, bound + size1, null); g.drawImage(img[nxt], 0, size1, CS, CS, 0, 0, CS, size2, null); count = (count + rotc) & (CS << 2) - 1; lab.repaint(); } void stop() { stopFlag = true; } public boolean cancel() { boolean flag = super.cancel(); if (crtReel >= task.length) { crtReel = 0; btn_start.setEnabled(true); for (int i = 0; i < ROW * CLM; i += CLM) { int num = task[i].count; int k = i; while (k < i + CLM && task[k].count == num) ++k; if (k == i + CLM) { ++hitCount; } } msg.setText("当たり回数:" + hitCount); } return flag; } } }
>>358 全部コピペしてコンパイル。
アプレットサイズは、360 * 220 にしてください。
リールのマスの絵柄を変えたい時は、BufferedImage[] img に任意のイメージを
いれてください。
マスのサイズは定数 CS です。(このコードでは64)
リールにあるマスの数は定数 CC です。(このコードでは4)
375 :
283. 296 :04/11/27 15:29:30
>>336 説明有難うございます。
また宜しくお願いします。
376 :
デフォルトの名無しさん :04/11/27 17:58:07
「Checkboxのアプレットをアプリケーションに書き変えろ」という課題が出てるのですが、 一人でやって詰まってまして、周りに聞ける人いないので、どうかお願いしますm(_)m 元のCheckboxアプレットです。これをアプリケーションにしたいです。 import java.awt.*; import java.applet.Applet; public class CheckboxApplet extends Applet { Checkbox cb[] = new Checkbox[4]; public void init() { cb[0] = new Checkbox("English"); cb[1] = new Checkbox("Mathematics"); cb[2] = new Checkbox("Physics"); cb[3] = new Checkbox("History"); for (int i = 0; i < 4; ++i ) add(cb[i]); } public boolean action(Event evt, Object obj) { if(evt.target instanceof Checkbox) { for (int i = 0; i < 4; ++i ) { if ( evt.target == cb[i] ) { System.out.println("Checkbox No."+i); System.out.println("State is "+cb[i].getState()); break; } } } else { System.out.println("Not a Checkbox event."); } return true; } }
377 :
376 :04/11/27 18:09:24
自分でやってみたプログラムも投稿してみます。if文を実行させることができなくて止まってます。 import java.awt.*; public class CheckboxFrame extends Frame { public boolean action(Event evt, Object obj) { String label = obj.toString(); if(evt.target instanceof Checkbox) { if(label.equals("English")){ System.out.println("Checkbox No.0"); System.out.println("English");} else if(label.equals("Mathematics")){ System.out.println("Checkbox No.1"); System.out.println("Mathematics");} else if(label.equals("Physics")){ System.out.println("Checkbox No.2"); System.out.println("Physics");} else if(label.equals("History")){ System.out.println("Checkbox No.3"); System.out.println("History");}} else { System.out.println("Not a Checkbox event.");} return true;} (次に続きます)
378 :
376 :04/11/27 18:11:27
(上の続きです) public static void main(String args[]) { CheckboxFrame bf = new CheckboxFrame(); bf.resize(400,300); Panel pnl = new Panel(); pnl.setFont(new Font("Helvetica", Font.BOLD, 24)); Checkbox cb[] = new Checkbox[4]; cb[0] = new Checkbox("English"); cb[1] = new Checkbox("Mathematics"); cb[2] = new Checkbox("Physics"); cb[3] = new Checkbox("History"); pnl.add(cb[0]); pnl.add(cb[1]); pnl.add(cb[2]); pnl.add(cb[3]); bf.add(pnl); bf.show();}} どこか改良したら良い所ありますか? どうか宜しくお願いしますm(_)m
379 :
デフォルトの名無しさん :04/11/27 18:59:12
>>377 の4行目
String label = obj.toString();
を
String label = ((CheckBox)evt.target).getLabel();
とすればOK
380 :
376 :04/11/27 19:13:25
>>379 さん
やってみて、できました。ありがとうです。
感謝しますm(_)m
381 :
デフォルトの名無しさん :04/11/27 19:25:28
javaappletでサウンドノベル作ることになりました マウスをクリックしたときに新しく文字が表示されるようにするにはどうすればいいのでつか?
383 :
283 :04/11/27 21:03:52
たびたび済みません。 こんどは、DESKeyをラッピングして別のユーザに送り、 アンラッピングする方法を教えて下さい。 課題の内容は、ユーザAで暗号化したデータをユーザBに送り、 ユーザBでデータを開き暗号化されていることを確認した後、 AからBに鍵を送り、データを複合化する。というものです。 宜しくお願いします。
384 :
M.B. :04/11/27 21:20:30
>>383 オトコなら成長したところを見せてみろw
385 :
デフォルトの名無しさん :04/11/27 21:23:48
>>383 「別のユーザに送り」「確認した後」「AからBに鍵を送り」
このAとBの通信の部分は、どのようにプログラム上で実現すれば
いいのですか? Socketを使うとか何か課題上の指定があるのですか?
386 :
283 :04/11/27 22:26:11
いちおうソケットを使うことになっています。
387 :
デフォルトの名無しさん :04/11/27 23:19:57
import java.applet.*; import java.awt.*; import java.awt.event.*; public class Soundnovel extends Applet implements MouseListener{ int i; Image Haikei; AudioClip bgm; AudioClip se01; public void init(){ this.setSize(640,480); this.addMouseListener(this); Haikei=this.getImage(this.getCodeBase(),"../img/背景.jpg"); bgm=this.getAudioClip(this.getCodeBase(),"../ado/natu.mid"); bgm=this.getAudioClip(this.getCodeBase(),"../ado/se.wav"); i=0; } public void paint(Graphics g){ g.drawImage(Haikei,0,0,this); g.drawString("試しに描画",10,10); } public void mousePressed(MouseEvent e){ se01.play(); this.repaint(); } その他は省略します }
388 :
デフォルトの名無しさん :04/11/27 23:27:44
質問 てな具合でアプレット作ったらエラーは発生しませんでしたが、Haikeiが描画されてませんでした。何故ですか? 質問2 このアプレットでサウンドノベルのように背景を暗くして、文字をマウスがクリックされる度に表示していき、改ページさせるにはどうすればよいのですか? 明後日提出なので早めにお願いします。
389 :
デフォルトの名無しさん :04/11/27 23:28:22
質問 てな具合でアプレット作ったらエラーは発生しませんでしたが、Haikeiが描画されてませんでした。何故ですか? 質問2 このアプレットでサウンドノベルのように背景を暗くして、文字をマウスがクリックされる度に表示していき、改ページさせるにはどうすればよいのですか? 明後日提出なので早めにお願いします。
やべ二回あげちまった
391 :
297 :04/11/27 23:37:50
>>370 ありがとうございます!
助かりました。
早速アプレット化にチャレンジしてますねm(..)m
>>374 遅くなりましたがありがとうございました!
助かりました。
お二人ともお手数おかけしました。
本当にありがとうございました。
392 :
デフォルトの名無しさん :04/11/28 13:39:09
ルンゲクッタ法を用いて単振動の振り子のシミュレーションをつくりたいのですが
m=質量、d~2x/dt~2=加速度、k=バネ定数として、初期値とバネ定数と質量は適当な値をいれます。
連立一階微分方程式になおす
dv/dt=v
dv/dt=-k*x/m
連立一階微分方程式
dy1/dt=f1(t,y1,y2)
dy2/dt=f2(t,y1,y2)
に対するルンゲクッタ法などにおいて
f1(t,y1,y1)=y2
f2(t,y1,y2)=-k*y1/m
などをつかって使って解いてくださいおねがいします。
ttp://sparrow.math.ryukoku.ac.jp/~junta/edu/graphics/exercise/8.html に作ってもらいたいアプレットがのっています。
ほんとおねがいします。
393 :
デフォルトの名無しさん :04/11/28 13:44:17
import java.net.*; import java.io.*; import java.security.*; import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; public class HW30 { public static void main(String[] args) { try { new Thread(new Server()).start(); new Client(); } catch (Exception e) { System.out.println("error"); } finally { Server.endFlag = true; } } }
class Client extends Socket { byte[] encData, wrappedKey; String encAlgo; int keyType; Key secretKey, publicKey, privateKey; Client() throws IOException { super(InetAddress.getByName("localhost"), 8080); byte[] buf = new byte[1000]; DataInputStream in = new DataInputStream(getInputStream()); OutputStream out = getOutputStream(); System.out.println("client: send data文を送る"); out.write("send data\r\n".getBytes("ISO-8859-1")); System.out.println("client: 鍵ラップの為の公開鍵(のつもり)を送る"); try { privateKey = publicKey = KeyGenerator.getInstance("DES").generateKey(); } catch (NoSuchAlgorithmException e1) { throw new IOException(); } byte[] keyData = publicKey.getEncoded(); out.write((String.valueOf(keyData.length) + "\r\n").getBytes("ISO-8859-1")); out.write(keyData); int size = in.read(buf); encData = new byte[size]; System.arraycopy(buf, 0, encData, 0, size); System.out.println("client: 暗号データを受け取る"); System.out.println("client: send key文を送る"); out.write("send key\r\n".getBytes("ISO-8859-1"));
encAlgo = in.readLine(); keyType = Integer.parseInt(in.readLine()); System.out.println("client: 暗号アルゴリズム(" + encAlgo + ")と鍵タイプ(SECRET_KEY)を受け取る"); size = in.read(buf); wrappedKey = new byte[size]; System.arraycopy(buf, 0, wrappedKey, 0, size); System.out.println("client: ラップされた秘密鍵を受け取る"); System.out.println("client: end文を送る"); out.write("end\r\n".getBytes("ISO-8859-1")); in.close(); out.close(); close(); try { System.out.println("client: ラップされた秘密鍵を、先の公開鍵とペアの個人鍵(のつもり)でアンラップする"); Cipher cip = Cipher.getInstance("DES"); cip.init(Cipher.UNWRAP_MODE, privateKey); secretKey = cip.unwrap(wrappedKey, encAlgo, keyType); System.out.println("client: アンラップされた秘密鍵で、暗号データを復号する"); cip.init(Cipher.DECRYPT_MODE, secretKey); byte[] decData = cip.doFinal(encData); String data = new String(decData); System.out.println("client: 復号文章 = 「" + data + "」"); } catch (Exception e) { throw new IOException(); } } }
class Server extends ServerSocket implements Runnable { static boolean endFlag; String data = "あいうえおかきくけこさしすせそたちつてと"; Key secretKey, publicKey; Cipher cip; Server() throws IOException { super(8080); setSoTimeout(100); try { secretKey = KeyGenerator.getInstance("DES").generateKey(); cip = Cipher.getInstance("DES"); } catch (Exception e) { throw new IOException(); } } public void run() { while (!endFlag) { try { Socket sc = accept(); new IOThread(sc).start(); } catch (SocketTimeoutException e) { } catch (Exception e) { break; } } try { close(); } catch (IOException e) { } }
class IOThread extends Thread { Socket sc; IOThread(Socket sc) { this.sc = sc; } public void run() { try { DataInputStream in = new DataInputStream(sc.getInputStream()); OutputStream out = sc.getOutputStream(); while (true) { String line = in.readLine(); System.out.println("server: " + line + "文を受け取る"); if (line.equals("send data")) { int size = Integer.parseInt(in.readLine()); byte[] keyData = new byte[size]; in.read(keyData); publicKey = new SecretKeySpec(keyData, "DES"); System.out.println("server: 鍵ラップの為の公開鍵(のつもり)を受け取る"); cip.init(Cipher.ENCRYPT_MODE, secretKey); byte[] encData = cip.doFinal(data.getBytes()); System.out.println("server: 暗号化して送る文章=「" + data + "」"); System.out.println("server: 文章を秘密鍵で暗号化して送る"); out.write(encData);
} else if (line.equals("send key")) { System.out.println("server: 秘密鍵暗号アルゴリズム(" + secretKey.getAlgorithm() + ")と秘密鍵タイプ(SECRET_KEY)を送る"); out.write((secretKey.getAlgorithm() + "\r\n").getBytes("ISO-8859-1")); out.write((String.valueOf(Cipher.SECRET_KEY) + "\r\n").getBytes("ISO-8859-1")); System.out.println("server: 秘密鍵を、公開鍵(のつもり)でラップする"); cip = Cipher.getInstance("DES"); cip.init(Cipher.WRAP_MODE, publicKey); byte[] wrapped = cip.wrap(secretKey); System.out.println("server: ラップされた秘密鍵を送る"); out.write(wrapped); } else if (line.equals("end")) { break; } } in.close(); out.close(); sc.close(); } catch (Exception e) { } } } }
>>383 全部コピペしてコンパイルしてください。
ClientクラスとServerクラスでやり取りする形になってます。
ただ、このコードには欠陥があり、通常DESKeyのラップとアンラップは
RSAアルゴリズムなどの公開鍵&個人鍵で行うのですが、Javaの通常の環境だと
CipherインスタンスがRSAで生成できないケースがあるので、
仕方なくここでは、DESで生成した鍵を公開鍵&個人鍵に見立てて、
例えばという形で書きました。
公開鍵&個人鍵の次に(のつもり)とあるのはその為です。
RSAでCipherインスタンスが生成できたら、そこら辺を修正してください。
DesKey = 秘密鍵
>>392 解きたいのは山々なんですが・・・・
ルンゲクッタがさっぱり分からなくて・・・・
>>392 いや、初めて提示された4〜5日前からやろうとは思ってたんですよ。
ただルンゲクッタが分からなくて・・・
計算部分のコートを書いてくれれば、アプレット化しますので。
404 :
デフォルトの名無しさん :04/11/28 18:22:54
405 :
M.B. :04/11/28 19:22:19
Runge-Kutta法 単段型の陽公式で、 「現時点の値」から「次の時点の値」を求める過程で、 いくつかの中間的時点における仮の値を算定し、 その線形和で精度を高める方法を総称して、 Runge-Kutta型の公式という(ただし、文献により定義は多少異なる)。 【歴史】C.Runge が1895年に発表、W.Kutta が一般化(1901)。 類似の公式が続々と発表され、 コンピュータの出現以前に既にかなり普及していた。
406 :
デフォルトの名無しさん :04/11/28 19:26:47
class Hantei{ public void show(int n){ } } … objA.show(10); objB.show(20); objAとobjBは別クラスのオブジェクトでメソッドを呼び出すときに オブジェクトの属性によってメソッドの処理を変えたいと思ってます。 この引数nを渡したオブジェクトを調べたいのですがわかりません… よろしくお願いします。
407 :
M.B. :04/11/28 19:28:36
……てなワケで、「Runge-Kutta法」には、 ・二次のRunge-Kutta法(1/2公式) ・三次のRunge-Kutta法(RK3-classic) ・Ralston の最適 Runde-Kutta法 ・Runge-Kutta-Gill法 ・Merson の方法 ・Ceschino の公式 ・田中法 ……といろいろあるので、 とりあえず、f(x) + 冉(x)*凅 で書いてもらって、 Runge-Kutta 法に直すのは後でやるというのは ど う だ ?
408 :
M.B. :04/11/28 19:39:25
>>392 ついでに言っとくと、
> dv/dt=v
> dv/dt=-k*x/m
ではなくて、
> dx/dt を v と置いたとき、
> dv/dt=-k*x/m 。
> すなわち、
> d^2x/dt^2 = =-k*x/m。
だから、
初期値が x と v に入っていて、
k・m・dt が定数であるとして、
作業用変数に x2・v2 を使って、
ループの中で
x2 = x + v * dt;
v2 = v - k * x / m * dt;
x = x2;
v = v2;
を繰り返せばよし。
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.net.URL; public class HW31 extends JApplet { String[] textDatas = {"あいうえお\nかきくけこ$さしすせそ\nアイウエオ$カキクケコ\nサシスセソ", "たちつてと\nなにぬねの$はひふへほ\nタチツテト$ナニヌネノ\nハヒフヘホ", "まみむめも\nやいゆえよ$らりるれろ\nマミムメモ$ヤイユエヨ\nラリルレロ"}; String[] imageURLs = {"/*ここに任意のイメージのパスを入れる*/"}; BufferedImage bcg; String[] parags; int textPage, imgPage, paragNo; boolean brightFlag; JLabel lab = new ScreenLabel(); public void init() { addComponentListener(new ComponentListener() { public void componentShown(ComponentEvent e) { lab.repaint(); } public void componentHidden(ComponentEvent e) { } public void componentResized(ComponentEvent e) { } public void componentMoved(ComponentEvent e) { } }); addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getButton() == e.BUTTON1) { if (brightFlag) return; ++paragNo; if (paragNo >= parags.length) { nextPage(); } } else { reverseBright(); } lab.repaint(); } }); loadBackImage(); parags = textDatas[textPage].split("\\$"); lab.setOpaque(true); lab.setBackground(Color.black); getContentPane().add(lab); }
void nextPage() { if (textPage < textDatas.length - 1) { ++textPage; parags = textDatas[textPage].split("\\$"); paragNo = 0; } } void loadBackImage() { Image img = getImage(getCodeBase(), imageURLs[imgPage]); while (img == null || img.getWidth(null) == -1 || img.getHeight(null) == -1) ; int[] buf = new int[img.getWidth(null) * img.getHeight(null)]; PixelGrabber grab = new PixelGrabber(img, 0, 0, img.getWidth(null), img.getHeight(null), buf, 0, img.getWidth(null)); try { grab.grabPixels(); } catch (InterruptedException e) { return; } for (int i = 0; i < buf.length; ++i) { buf[i] &= 0x80ffffff; } bcg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB); bcg.setRGB(0, 0, bcg.getWidth(), bcg.getHeight(), buf, 0, bcg.getWidth()); lab.setIcon(new ImageIcon(bcg)); }
void reverseBright() { brightFlag ^= true; int[] buf = new int[bcg.getWidth() * bcg.getHeight()]; bcg.getRGB(0, 0, bcg.getWidth(), bcg.getHeight(), buf, 0, bcg.getWidth()); if (brightFlag) { for (int i = 0; i < buf.length; i++) buf[i] |= 0xff000000; } else { for (int i = 0; i < buf.length; i++) buf[i] = buf[i] & 0x00ffffff | 0x80000000; } bcg.setRGB(0, 0, bcg.getWidth(), bcg.getHeight(), buf, 0, bcg.getWidth()); } class ScreenLabel extends JLabel { public void paint(Graphics g) { super.paint(g); if (brightFlag) return; g.setFont(new Font("Dialog", 1, 30)); g.setColor(Color.white); int row = 0; for (int a = 0; a < parags.length && a <= paragNo; a++) { String[] lines = parags[a].split("[\\n]"); for (int b = 0; b < lines.length; b++) { g.drawString(lines[b], 0, row++ * g.getFontMetrics().getHeight() + g.getFontMetrics().getAscent()); } } } } }
412 :
M.B. :04/11/28 22:26:12
……まずい(-_-!)。いいかげんに書いたら
定常振動のはずが発振しやがった。
それはさておきこの問題、拡張性を無視すればそう難しくなく書けるが、
パッケージ化とか考えると(とっくに公開されてはいるのだが)
正規形に直した式を渡す部分はともかくも(C でいうなら
値をセットする領域の配列と、その配列を対象とした
関数のポインタを渡すような形になる)、
初期値をセットする部分でけっこうプログラム的に
嬉しくないことになる。
なんかこう、「こういう形で書け」みたいな情報は
ないのか?
ついでに
>>407 は
×とりあえず、f(x) + 冉(x)*凅 で書いてもらって、
○とりあえず、f(t+冲) = f(t) + f'(t)*冲 の形で書いてもらって、
だ。
>>388 全部コピペしてコンパイル。
まず、String[] imageURLs に任意のイメージファイルのパスを入れてください。
String[] textDatas にも任意のテキストをいれてください。
左クリックでパラグラフが進みます。
右クリックで、テキストモードとイメージモードが切り替わります。
414 :
デフォルトの名無しさん :04/11/28 22:40:08
415 :
デフォルトの名無しさん :04/11/28 22:48:40
グラフィック「基礎」演習の通り、アプレットにするのは簡単なのだが 問題は計算・・・・ 計算部分の式だけでも書いてくれれば(普通の数式でいい) だれかがコードを書くと思うのだが
416 :
M.B. :04/11/28 22:53:27
>>414 とりあえずアニメーションをどうやってるかは把握した。
「th.sleep(10);」っておまえ厨房じゃ(ry) _| ̄|○
インタフェースに関してはなんの解決にもなっとらんので、
とりあえず考えてみる。
417 :
デフォルトの名無しさん :04/11/28 23:04:34
418 :
M.B. :04/11/28 23:17:40
>>415 とりあえず書いてはみたのだが、
通常f'(t)は x から直接に与えられているようで、
力学シミュレーションのようにf''(t)は x から分かっても
f'(t)は初期値に依存するもんで、
漏れの書いたプログラムが本当に Runge-Kutta になっとるかどうか
よくわからん。
とりあえず
k / m → K として、
x' = v
v' = K * x
つーところから出発して、考え直してみる。
419 :
デフォルトの名無しさん :04/11/29 01:25:45
『Javaでhttpクライアント作れ』みたいなのが出て困っています。 サーバにリクエスト送るまでは問題ないんですが、サーバからレスポンス受け取る段になって難儀しています。 該当部分のソースは… //ストリーム取得部分(sはクライアントへのソケット) InputStream in =s.getInputStream(); BufferedReader bin = new BufferedReader( new InputStreamReader(in)); (中略) //実際にレスポンスを受ける部分(buffはChar[128]) while((bin.read(buff,0,1))!=-1){ response.append(buff[0]); } と、スタンダードなソースです。 コンパイルし、適当なサーバにリクエストを送ると、ちゃんとレスポンスを、 HTTP/1.1 200 OK Content-Type: text/html; charset=iso-2022-jp <以下 ヘッダの残りやコンテンツの内容> みたいには返してくれるんですが、最後の最後、 すべての文字を読み取った後に更にreadしようとすると、完全にプログラムが停滞するんです。 リファレンスとか見てる限り、停滞せずにreadが-1を返してくれそうなものなんですが…。 しかも、www.yahoo.co.jpだと(ちゃんと-1が返ってきて)うまくwhileを抜けてくれるのに、 www.google.co.jpだと上記の現象(readの戻り値が帰ってこない)が起こるんです。 ちなみに、特にエラーメッセージは返ってきません。完全に停止します。 どなたか、何か原因に心当たりは有りませんでしょうか…。
420 :
383 :04/11/29 01:30:17
>>394 〜 400
有難うございます。動作しました。しかしコンパイルした所、
注: C\test\HW30.java は推奨されない API を使用
またはオーバーライドしています。
注: 詳細については、-deprecation
オプションを指定して再コンパイルしてください。
という警告がでました。これは無視しても平気ですよね?
あと、DESKeyをラッピングせずに送るにはどうすれば良いでしょうか?
ラッピングせずに鍵は送れるのですか?
421 :
デフォルトの名無しさん :04/11/29 02:43:53
古代帝國さんありがとうございます! しかしコンパイルしたら コンストラクター PixelGrabber(Image,int,int,int,int[],int,int)は未定義です インポートjava.net.URLは決して使用されません。 staticフィールドMouseEvent.BUTTON1には静的にアクセスする必要があります とエラーがでました
422 :
デフォルトの名無しさん :04/11/29 04:54:45
java最近始めたんですけど早速行き詰ってしまいました if文のなかに空白文字を検知するisSpaceをいれたいんですけど いろいろ調べても例とかがないんですよ;; エラーメッセージはclassがないって言われます。 空白文字をなくして表示するようにしたいんですけどどうすればいいでしょうか? お願いします。 import java.io.*; public class Kuhaku{ public static void main(String ar[]) throws Exception{ FileInputStream f=new FileInputStream("Kuhaku.java"); int i; while((i=f.read())!=-1){ if(Character.isSpace(char i)) System.out.print((char)i); } f.close(); } }
423 :
古代帝國富士皇朝総帥・伯壬旭 :04/11/29 05:58:08
>>421 >>コンストラクター PixelGrabber(Image,int,int,int,int[],int,int)は未定義です
上のエラー例では、コンストラクタの引数は7個であり
ソースでは
new PixelGrabber(img, 0, 0, img.getWidth(null), img.getHeight(null), buf, 0, img.getWidth(null));
と、8個書いてあるので、コピペを間違えてるかと思われます。
>>インポートjava.net.URLは決して使用されません。
これは実行上問題の無い警告です(あってもOK)。
単なる消し忘れです。消してください。
>>staticフィールドMouseEvent.BUTTON1には静的にアクセスする必要があります
これも実行上問題の無い警告です。
長い単語を書くのが面倒だったので・・・
e.BUTTON1の部分を、MouseEvent.BUTTON1と直してください。
424 :
古代帝國富士皇朝総帥・伯壬旭 :04/11/29 06:10:35
>>420 警告ですので、実行上問題ありません。
自分の知識では、Socket通信時には、1バイト文字をそのままゼロ拡張で
Stringに変換するDataInputStream.readLine()を使うのが一番便利ですので
そうしてます。
ラップしないでDES鍵を送るには
byte[] keyData = key.getEncoded();
out.write(keyData);
として、
それを受け取るのは
byte[] keyData = new byte[任意のサイズ];
in.read(keyData);
Key key = new SecretKeySpec(keyData, "DES");
としてください。
ただ、盗聴されても問題ないようにデータを暗号化してるのに、その
鍵をそのまま送ってしまうと、全くの無意味になってしまいますが・・・
425 :
デフォルトの名無しさん :04/11/29 08:47:08
iSspaceのなかのcharを消せ
426 :
383 420 :04/11/29 09:51:39
わかりました。 いつも有難うございます。
427 :
デフォルトの名無しさん :04/11/29 12:49:48
∫1/(1+x) dx =ln2 = 0.69314718 Gauss型積分でもとめよ。 プログラムは写すだけなのですが、コンパイルの方法がわかりません。 教えてください。 使用するのはfortran90らしいです。 おねがいします。
428 :
デフォルトの名無しさん :04/11/29 12:51:52
∫1/(1+x) dx =ln2 = 0.69314718 Gauss型積分でもとめよ。 プログラムは写すだけなのですが、コンパイルの方法がわかりません。 教えてください。 使用するのはfortran90らしいです。 おねがいします。
429 :
427 :04/11/29 12:58:22
教科書のプログラムはこうなってます。 rea*8 p(6),w(6),s,f,a write(*,*) 'Give number of points(2<= np <=6)' read(*,*) np call lgndre(np,p,w) s=0.0d0 do 10 i=1,np 10 s=s+f(p(i))*w(i) write(*,*) 'result of intergration is ',s a=dlog(2.0d0) write(*,*) 'the value of log(2.0) is ',a end real*8 function f(x) real*8 x f=1.0d0/(x+3.0d0) !関数 f(x)=1/(x+3) の定義 return end
430 :
427 :04/11/29 13:01:46
subroutine lgndre(np,p,w) real*8 p(np),w(np) if(np,gt.6) stop if(np,eq.2) then p(2)=0.57735026918962d0? !sqrt(1/3) w(2)=1.0 elseif(np.eq.3) then p(2)=0.0 p(3)=0.774596669241483d0 !sqrt(3/5) w(2)=0.888888888888889d0 w(3)=0.555555555555556d0 elseif(np.eq.4) then p(3)=0.339981043584856d0 !sqrt((15-2sqrt(30))/35) p(4)=0.861136311594053d0 !sqrt((15+2sqrt(30))/35) w(3)=0.652145154862546d0 w(4)=0.347854845137454d0 elseif(np.eq.5) then
面白い冗談だな、ははは
432 :
427 :04/11/29 13:09:54
p(3)=0.0d0 p(4)=0.538469310105683d0 p(5)=0.906179845938664d0 w(3)=0.568888888888889d0 w(4)=0.478628670499366d0 w(5)=0.236926885056189d0 else p(4)=0.238619186083197d0 p(5)=0.661209386466265d0 p(6)=o.467913934572691d0 w(4)=0.497913934572681d0 w(5)=0.360761573048139d0 w(6)=0.171324492379170d0 endif do 20 i=1,np/2 p(i)=-p(np+1-i) 20 w(i)=w(np+1-i) return end
433 :
427 :04/11/29 13:12:51
p(3)=0.0d0 p(4)=0.538469310105683d0 p(5)=0.906179845938664d0 w(3)=0.568888888888889d0 w(4)=0.478628670499366d0 w(5)=0.236926885056189d0 else p(4)=0.238619186083197d0 p(5)=0.661209386466265d0 p(6)=o.467913934572691d0 w(4)=0.497913934572681d0 w(5)=0.360761573048139d0 w(6)=0.171324492379170d0 endif do 20 i=1,np/2 p(i)=-p(np+1-i) 20 w(i)=w(np+1-i) return end
434 :
デフォルトの名無しさん :04/11/29 14:21:10
いきなりですが、質問させてください。 geometry = new LineStripArray(vertex.length, GeometryArray.COORDINATES | GeometryArray.COLOR_3, stripVertexCounts); geometry.setCoordinates(0, vertex); Color3f[] colors = { new Color3f(1.0f, 0.0f, 0.0f), new Color3f(1.0f, 0.0f, 0.0f), }; geometry.setColors(0, colors); shape = new Shape3D(geometry); tg.addChild(shape); と、定義した色をボタンが押されたときに任意の色に変更したいのですが bt_arrow.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ Color3f[] colors1 = { new Color3f(1.0f, 0.0f, 0.0f), new Color3f(0.0f, 0.5f, 0.0f), }; geometry.setColors(0, colors1); } }); だとエラーが出てしまいます。どうすればいいのでしょうか
エラーが出る行を直せばいいじゃない
import java.util.*; import java.util.Timer; import javax.swing.*; import java.awt.event.*; import java.awt.image.*; import java.awt.*; public class HW32 extends JApplet { double ans[]; double l = 200, g = 50, m = 32; JLabel lab = new JLabel(); BufferedImage img = new BufferedImage(600, 400, BufferedImage.TYPE_INT_ARGB); Timer tim = new Timer(); TimerTask task; public void init() { ans = comupte(); JPanel pal = new JPanel(); JButton btn_s = new JButton("再スタート"); final JSpinner spn_l = new JSpinner(new SpinnerNumberModel(200, 100, 300, 50)), spn_g = new JSpinner(new SpinnerNumberModel(50, 10, 100, 10)), spn_m = new JSpinner(new SpinnerNumberModel(32, 8, 64, 8)); pal.add(btn_s); pal.add(new JLabel("長さ")); pal.add(spn_l); pal.add(new JLabel("バネ定数")); pal.add(spn_g); pal.add(new JLabel("質量")); pal.add(spn_m); getContentPane().add(pal, BorderLayout.SOUTH); btn_s.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { task.cancel(); l = ((Number) spn_l.getValue()).intValue(); g = ((Number) spn_g.getValue()).intValue(); m = ((Number) spn_m.getValue()).intValue(); double t = 2 * Math.PI * Math.sqrt(l / g); task = new Task(); tim.schedule(task, 100, (int) t); } }); lab.setHorizontalAlignment(JLabel.LEFT); lab.setVerticalAlignment(JLabel.TOP); lab.setIcon(new ImageIcon(img)); getContentPane().add(lab); double t = 2 * Math.PI * Math.sqrt(l / g); task = new Task(); tim.schedule(task, 100, (int) (t / 2)); }
class Task extends TimerTask { int idx, csz, hcs; Graphics2D cg; Rectangle prevR = new Rectangle(); static final int HCEN = 300, VCEN = 200; Task() { cg = img.createGraphics(); cg.setBackground(new Color(240, 240, 255)); cg.clearRect(0, 0, img.getWidth(), img.getHeight()); cg.setColor(Color.black); csz = (int) m; hcs = csz / 2; int x = (int) (ans[idx++] * l + HCEN); cg.fillOval(x - hcs, VCEN - hcs, csz, csz); prevR.setBounds(x - hcs, VCEN - hcs, csz, csz); cg.drawLine(x, VCEN, HCEN, VCEN); lab.repaint(); } public void run() { cg.clearRect(prevR.x, prevR.y, prevR.width, prevR.height); int x = (int) (ans[idx++] * l + HCEN); cg.fillOval(x - hcs, VCEN - hcs, csz, csz); cg.drawLine(x, VCEN, HCEN, VCEN); if (idx == 100) { idx = 0; } prevR.setBounds(Math.min(prevR.x, x - hcs), prevR.y, Math.max(prevR.x + prevR.width, x - hcs + csz) - Math.min(prevR.x, x - hcs), prevR.height); lab.repaint(prevR); } }
public static double[] comupte() { double x = 1.0, v = 0, dt = 0.01, tmax = Math.PI * 2; double[] k1 = new double[2], k2 = new double[2], k3 = new double[2], k4 = new double[2]; double[] ans = new double[100]; double next = tmax / 100, add = tmax / 100; int idx = 0; ans[idx++] = x; for (double t = 0; t < tmax; t += dt) { k1[0] = dt * f1(t, x, v); k1[1] = dt * f2(t, x, v); k2[0] = dt * f1(t + dt / 2.0, x + k1[0] / 2.0, v + k1[1] / 2.0); k2[1] = dt * f2(t + dt / 2.0, x + k1[0] / 2.0, v + k1[1] / 2.0); k3[0] = dt * f1(t + dt / 2.0, x + k2[0] / 2.0, v + k2[1] / 2.0); k3[1] = dt * f2(t + dt / 2.0, x + k2[0] / 2.0, v + k2[1] / 2.0); k4[0] = dt * f1(t + dt, x + k3[0], v + k3[1]); k4[1] = dt * f2(t + dt, x + k3[0], v + k3[1]); x = x + (k1[0] + 2.0 * k2[0] + 2.0 * k3[0] + k4[0]) / 6.0; v = v + (k1[1] + 2.0 * k2[1] + 2.0 * k3[1] + k4[1]) / 6.0; if (t >= next) { ans[idx++] = x; next += add; } } return ans; } static double f1(double t, double x, double v) { return v; } static double f2(double t, double x, double v) { return (-x); } }
import java.util.*; import java.util.Timer; import javax.swing.*; import java.awt.event.*; import java.awt.image.*; import java.awt.*; public class HW33 extends JApplet { double ans[]; double l = 200, g = 10, m = 32, d = 45; JLabel lab = new JLabel(); BufferedImage img = new BufferedImage(600, 400, BufferedImage.TYPE_INT_ARGB); Timer tim = new Timer(); TimerTask task; public void init() { ans = comupte(); JPanel pal = new JPanel(); JButton btn_s = new JButton("再スタート"); final JSpinner spn_l = new JSpinner(new SpinnerNumberModel(200, 100, 300, 50)), spn_g = new JSpinner(new SpinnerNumberModel(10, 5, 20, 1)), spn_m = new JSpinner(new SpinnerNumberModel(32, 8, 64, 8)), spn_d = new JSpinner(new SpinnerNumberModel(45, 5, 90, 5)); pal.add(btn_s); pal.add(new JLabel("長さ")); pal.add(spn_l); pal.add(new JLabel("重力")); pal.add(spn_g); pal.add(new JLabel("質量")); pal.add(spn_m); pal.add(new JLabel("角度")); pal.add(spn_d); getContentPane().add(pal, BorderLayout.SOUTH); btn_s.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { task.cancel(); l = ((Number) spn_l.getValue()).intValue(); g = ((Number) spn_g.getValue()).intValue() * 5; m = ((Number) spn_m.getValue()).intValue(); d = ((Number) spn_d.getValue()).intValue(); double t = 2 * Math.PI * Math.sqrt(l / g); task = new Task(); tim.schedule(task, 100, (int) t); } }); lab.setHorizontalAlignment(JLabel.LEFT); lab.setVerticalAlignment(JLabel.TOP); lab.setIcon(new ImageIcon(img)); getContentPane().add(lab); double t = 2 * Math.PI * Math.sqrt(l / g); task = new Task(); tim.schedule(task, 100, (int) (t / 2)); }
class Task extends TimerTask { int idx, csz, hcs; Graphics2D cg; Rectangle prevR = new Rectangle(), allR = new Rectangle(); static final int HCEN = 300, VCEN = 0; Task() { cg = img.createGraphics(); cg.setBackground(new Color(240, 240, 255)); cg.clearRect(0, 0, img.getWidth(), img.getHeight()); cg.setColor(Color.black); csz = (int) m; hcs = csz / 2; double rad = Math.toRadians((int) (ans[idx++] * d)); int y = (int) (Math.cos(rad) * l); int x = (int) (Math.sin(rad) * l) + HCEN; cg.fillOval(x - hcs, y - hcs, csz, csz); cg.drawLine(x, y, HCEN, VCEN); prevR.setBounds(x - hcs, y - hcs, csz, csz); allR.setBounds((int) (HCEN - l - hcs), (int) (VCEN - l - hcs), (int) (l * 2 + csz), (int) (l * 2 + csz)); lab.repaint(); } public void run() { cg.clearRect(prevR.x, prevR.y, prevR.width, prevR.height); cg.setColor(cg.getBackground()); cg.drawLine(prevR.x + hcs, prevR.y + hcs, HCEN, VCEN); cg.setColor(Color.black); double rad = Math.toRadians((int) (ans[idx++] * d)); int y = (int) (Math.cos(rad) * l); int x = (int) (Math.sin(rad) * l) + HCEN; cg.fillOval(x - hcs, y - hcs, csz, csz); cg.drawLine(x, y, HCEN, VCEN); if (idx == 100) { idx = 0; } prevR.setBounds(x - hcs, y - hcs, csz, csz); lab.repaint(allR); } }
public static double[] comupte() { double x = 1.0, v = 0, dt = 0.01, tmax = Math.PI * 2; double[] k1 = new double[2], k2 = new double[2], k3 = new double[2], k4 = new double[2]; double[] ans = new double[100]; double next = tmax / 100, add = tmax / 100; int idx = 0; ans[idx++] = x; for (double t = 0; t < tmax; t += dt) { k1[0] = dt * f1(t, x, v); k1[1] = dt * f2(t, x, v); k2[0] = dt * f1(t + dt / 2.0, x + k1[0] / 2.0, v + k1[1] / 2.0); k2[1] = dt * f2(t + dt / 2.0, x + k1[0] / 2.0, v + k1[1] / 2.0); k3[0] = dt * f1(t + dt / 2.0, x + k2[0] / 2.0, v + k2[1] / 2.0); k3[1] = dt * f2(t + dt / 2.0, x + k2[0] / 2.0, v + k2[1] / 2.0); k4[0] = dt * f1(t + dt, x + k3[0], v + k3[1]); k4[1] = dt * f2(t + dt, x + k3[0], v + k3[1]); x = x + (k1[0] + 2.0 * k2[0] + 2.0 * k3[0] + k4[0]) / 6.0; v = v + (k1[1] + 2.0 * k2[1] + 2.0 * k3[1] + k4[1]) / 6.0; if (t >= next) { ans[idx++] = x; next += add; } } return ans; } static double f1(double t, double x, double v) { return v; } static double f2(double t, double x, double v) { return (-x); } }
>>392 >>414 全部コピペしてコンパイル。
アプレットサイズは、600×400 にしてください。
>>434 geometryがローカル変数なら、finalで宣言する。
444 :
383 420 :04/11/29 17:50:23
>>424 鍵をラップしないで送るプログラムを自分で組んでみたのですが、
エラーが出てしまいます。コンパイルは通るのですが、
例外エラーがでてしまいます。何でなのでしょうか?
ちなみにサーバーとクライアントは別々のプログラムにしています。
クライアントから暗号化したデータを送り、サーバで複合化するように
しています。暗号化するデータはint型の5678です。
プログラムを上げるので直して下さい。
445 :
444 サーバ1 :04/11/29 17:52:09
public class MS2 { public static void main(String args[]) { byte[] encAlgo = null, keyDate = null; byte[] buf = new byte[1000]; try { ServerSocket ss = new ServerSocket(5555); Socket sc = ss.accept(); System.out.println(sc.getInetAddress() +"から接続を受け付けました"); OutputStream out = sc.getOutputStream(); DataInputStream in = new DataInputStream(sc.getInputStream()); PrintWriter out2 = new PrintWriter(sc.getOutputStream(), true); BufferedReader in2 = new BufferedReader(new InputStreamReader(sc.getInputStream())); int f = Integer.parseInt(in2.readLine()); //まずは暗号化していない普通のデータのやりとり System.out.println(f + "と受け取りました。"); out2.println(1234); //次に暗号化したデータの受け渡し int size =in.read(buf); encAlgo = new byte[size]; System.out.println("クライアントから" + encAlgo + "と受け取りました。"); int size2 =in.read(buf); keyDate = new byte[size]; Key key = new SecretKeySpec(keyDate, "DES");
446 :
444 サーバ2 :04/11/29 17:53:32
System.out.println("kakuninn");//どこまでプログラムが動いているかの確認 Cipher cip = Cipher.getInstance("DES"); System.out.println("ka2");//どこまでプログラムが動いているかの確認 cip.init(Cipher.DECRYPT_MODE, key); System.out.println("ka3"); byte[] decodeDate = cip.doFinal(encAlgo); System.out.println(decodeDate); out2.println(0101); System.out.println("接続を切ります。"); out.close(); in.close(); sc.close(); ss.close(); } catch(IOException e) { e.printStackTrace(); } catch(Exception e) { System.out.println("error"); System.exit(0); } } }
447 :
444 クライアント1 :04/11/29 17:54:18
import java.net.*; import java.io.*; import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; import java.security.*; public class MC { public static void main(String args[]) { byte[] sourceDate = null, encodeDate = null, decodeDate = null; try { Socket sc = new Socket("localhost", 5555); OutputStream out = sc.getOutputStream(); DataInputStream in = new DataInputStream(sc.getInputStream()); PrintWriter out2 = new PrintWriter(sc.getOutputStream(), true); BufferedReader in2 = new BufferedReader(new InputStreamReader(sc.getInputStream())); KeyGenerator kg = KeyGenerator.getInstance("DES"); SecretKey key = kg.generateKey(); Cipher cip = Cipher.getInstance("DES"); cip.init(Cipher.ENCRYPT_MODE, key); String date = "5678"; sourceDate = date.getBytes(); encodeDate = cip.doFinal(sourceDate); System.out.println("サーバーに1234と送ります。");
448 :
444 クライアント2 :04/11/29 17:55:09
//まずは暗号化してない普通のデータのやりとり out2.println(1234); System.out.println(in.readLine()); //次に暗号化したデータの受け渡し System.out.println("サーバーに暗号5678と送ります。"); out.write(encodeDate); byte[] keyDate = key.getEncoded(); out.write(keyDate); System.out.println(in.readLine()); out.close(); in.close(); sc.close(); } catch(IOException e) { e.printStackTrace(); } catch(Exception e ) { System.out.println("エラー"); System.exit(0); } } }
449 :
444 :04/11/29 17:57:24
もし、直すのが面倒な場合、大変申し訳ないですが、 ラッピングしないでDESKeyを送るプログラムを作って頂けないでしょうか? その際、暗号化するデータはint型でお願いします。 何度も何度もすみません。宜しくお願いします。
450 :
デフォルトの名無しさん :04/11/29 19:24:09
System.out.println("クライアントから" + encAlgo + "と受け取りました。"); int size2 =in.read(buf); keyDate = new byte[size]; ← ここに、System.arraycopy(buf, 0, keyData, 0, size); を入れればOK。 Key key = new SecretKeySpec(keyDate, "DES");
451 :
444 :04/11/29 20:46:56
>>450 エラーメッセージが出てしまいました。
C:\so\MS2.java:29: シンボルを解決できません。
シンボル: 変数 keyData
場所 : MS2 の クラス
System.arraycopy(buf, 0, keyData, 0, size);
^
エラー 1 個
終了コード1で終了しました
452 :
444 :04/11/29 20:55:53
すみません。エラーメッセージは解決しました。 私のスペルミスでした。 しかし、その1行をいれても、同じ例外エラーになってしまいます。
453 :
デフォルトの名無しさん :04/11/29 20:57:25
System.out.println("クライアントから" + encAlgo + "と受け取りました。"); int size2 =in.read(buf); keyDate = new byte[size]; ← ここに、System.arraycopy(buf, 0, keyDate, 0, size); を入れればOK。 Key key = new SecretKeySpec(keyDate, "DES");
454 :
444 :04/11/29 21:07:49
はい。その1行をいれましたが、 /127.0.0.1から接続を受け付けました 1234と受け取りました。 クライアントから[B@1004901と受け取りました kakuninn ka2 ka3 error ←←←例外エラー 続行するには何かキーを押してください・・・ と例外エラーになってしまいます。
455 :
デフォルトの名無しさん :04/11/29 21:18:45
>>452 //次に暗号化したデータの受け渡し
int size =in.read(buf);
encAlgo = new byte[size];
System.out.println("クライアントから" + encAlgo + "と受け取りました。");
int size2 =in.read(buf);
keyDate = new byte[size];
を
//次に暗号化したデータの受け渡し
int size = in.readInt();
encAlgo = new byte[size];
in.read[encAlgo];
int size2 = in.readInt();
keyDate = new byte[size2];
in.read(keyDate);
とし、
System.out.println("サーバーに暗号5678と送ります。");
out.write(encodeDate);
byte[] keyDate = key.getEncoded();
out.write(keyDate);
を
System.out.println("サーバーに暗号5678と送ります。");
out.writeInt(encData.length);
out.write(encodeDate);
byte[] keyDate = key.getEncoded();
out.writeInt(keyDate.length);
out.write(keyDate);
としてみてください。
456 :
444 :04/11/29 21:30:01
サーバプログラムは C:\so\MS.java:26: 文ではありません。 in.read[encAlgo]; ^ エラー 1 個 終了コード1で終了しました クライアントプログラムは C:\Documents and Settings\takato\My Documents\kenkyu\so\MC.java:29: シンボルを解決できません。 シンボル: 変数 encDate 場所 : MC の クラス out.writeInt(encDate.length); ^ C:\so\MC.java:32: シンボルを解決できません。 シンボル: メソッド writeInt (int) 場所 : java.io.OutputStream の クラス out.writeInt(keyDate.length); ^ 注: C:\so\MC.java は推奨されない API を使用またはオーバーライドしています。 注: 詳細については、-deprecation オプションを指定して再コンパイルしてください。 エラー 2 個 終了コード1で終了しました とエラーメッセージが出てしまいました。
457 :
デフォルトの名無しさん :04/11/29 21:44:29
>>456 in.read[encAlgo]; → in.read(encAlgo);
out.writeInt(encDate.length); → out.writeInt(encodeDate.length);
OutputStream out = sc.getOutputStream();
↓
OutputStream out = new DataOutputStream(sc.getOutputStream());
458 :
デフォルトの名無しさん :04/11/29 21:45:46
>>456 in.read[encAlgo]; → in.read(encAlgo);
out.writeInt(encDate.length); → out.writeInt(encodeDate.length);
OutputStream out = sc.getOutputStream();
↓
DataOutputStream out = new DataOutputStream(sc.getOutputStream());
459 :
444 :04/11/29 21:51:35
即レスありがとうございます。 サーバプログラムはコンパイル通りました。 クライアントプログラムは C:\so\MC.java:29: シンボルを解決できません。 シンボル: メソッド writeInt (int) 場所 : java.io.OutputStream の クラス out.writeInt(encodeDate.length); ^ C:\so\MC.java:32: シンボルを解決できません。 シンボル: メソッド writeInt (int) 場所 : java.io.OutputStream の クラス out.writeInt(keyDate.length); ^ 注: C:\so\MC.java は推奨されない API を使用またはオーバーライドしています。 注: 詳細については、-deprecation オプションを指定して再コンパイルしてください。 エラー 2 個 終了コード1で終了しました とまだエラーがでます。
460 :
デフォルトの名無しさん :04/11/29 21:58:22
Socket sc = new Socket("localhost", 5555); OutputStream out = sc.getOutputStream(); DataInputStream in = new DataInputStream(sc.getInputStream()); ↓ Socket sc = new Socket("localhost", 5555); DataOutputStream out = new DataOutputStream(sc.getOutputStream()); DataInputStream in = new DataInputStream(sc.getInputStream());
>>419 connectionが張られっぱなしかもしれないと予想します。
とりあえずリクエストにConnection: closeを付けてみたりするとか
レスポンスのContent-lengthでもチェックするとか
readがバッファより小さかったら諦めるとかその辺じゃないかなぁと予想。
とりあえず試すことです。
462 :
444 :04/11/29 22:09:16
>>460 コンパイルは通りました。
しかし、例外エラーになって暗号を複合化できませんでした。
454に上げた症状とまったく同じです。
463 :
デフォルトの名無しさん :04/11/29 22:13:42
例外発生の行と、例外クラスを書いてください。
464 :
444 :04/11/29 22:18:13
これはサーバのプログラムです 例外発生の行 System.out.println("ka2");//どこまでプログラムが動いているかの確認 cip.init(Cipher.DECRYPT_MODE, key); System.out.println("ka3"); ←←この出力メッセージまでは表示されてます。 byte[] decodeDate = cip.doFinal(encAlgo); ←←多分ここで例外発生?? System.out.println(decodeDate); 例外クラス } catch(Exception e) { System.out.println("error"); ←←このエラーメッセージが表示されます。 System.exit(0); }
465 :
デフォルトの名無しさん :04/11/29 22:33:19
(他スレに書いたところあまりにも酷いレスばかりだったのでこちらで訊ねることにしました。
宿題では無いので大変申し訳ありません。)
Yahoo!GeocitiesでHPを作成したのですが、広告を表示させるフレームを指定したい。
そこで、HTML内に組み込むJava scriptを教えていただければと思います。
geoでは広告の形態には2種類あるのですが、
ttp://www.geocities.jp/power_seller_info/index.htm 自分の場合はこのページのような、縦型広告の形態です。
もしお答え頂けるようならお願いいたします。
>>466 マルチごくろうさま。
ほんとにわかってないのか釣りなのか知らないけど、マジレスしてみる。
「JavaとJavascriptは別物です。」
これを10回声に出して読んでください。
Java質問スレで散々
>>1 を読めって言われてたのに読んでないんですか?
JavaScriptの質問は、ここでは受け付けていません。
Web製作板をご利用ください。
http://pc5.2ch.net/hp/ と書かれてましたが。
釣り 本気で答えが欲しいなら、ここで質問するはずが無い。 そしてオレは2人目の釣られた人。
469 :
プログラム板 :04/11/30 07:04:13
ここは同じJAVAでも、学校から出された課題、宿題を丸投げ依頼して、
そのプログラムを書いてもらう宿題スレッドです。
普通の質問は絶対にやめてください。質問してもこれからは完全スルーします。
回答が分かっててもです。質問してもレスは無いと思ってください。
(宿題、課題とその回答プログラムに関する質問はOKですが)
質問スレッドは↓でお願いします。
【初心者】Java質問・相談スレッド57【大歓迎】
http://pc5.2ch.net/test/read.cgi/tech/1101077884/l50 質問は、この本スレでお願いします。ここには書かないでください。
470 :
デフォルトの名無しさん :04/11/30 12:20:50
String str = 10.3; から、double型で0.103という値を返すプログラムを教えてください。 自分で調べたところ、valueOfというのを見つけたのですが、 ラッパクラスがどうとか、よくわかりませんでした。 携帯からなのでコードはれません、ごめんなさい。 よろしくお願いします。
>>470 String str = "10.3";
Double d = Double.valueOf( str );
472 :
470 :04/11/30 12:49:28
即レスありがとうございます。 でも、欲しい値は0.103なんですよ。 これだと10.3のままですよね?
double d = Double.parseDouble(str) / 100.0;
475 :
野田☆ :04/11/30 14:17:16
大学で、会議室の予約システムを作成する課題が出たのですが どのようなプログラムを作ればいいのでしょうか? よろしくお願いします。
また変な奴が....
どうしてこういう頭の悪い質問ができるんだろう。
474さんありがとうございます。 無事動きましたので、これで提出できます。 本当に助かりました。
>>475 一つのビルに5個の会議室があるとか、もう少し具体的に条件を
書いてください。
480 :
デフォルトの名無しさん :04/11/30 21:58:09
483 :
デフォルトの名無しさん :04/11/30 22:36:04
484 :
デフォルトの名無しさん :04/11/30 22:37:40
>>480 問題は1番だけ解いてもらえばいいです。
アホばっかだな
俺が一番びっくりしてるのは、質問の仕方もわかってなさそうな
>>475 が大学生ってことかな。
import java.applet.Applet; import java.awt.*; public class Kadai9_1 extends Applet implements Runnable { public Kadai9_1() { th = null; dt = 0.01D; L = 2D; M = 1.0D; G = 1.0D; } double[] f(double d, double ad[]) { double ad1[] = new double[ad.length]; double d1 = Math.sqrt(ad[0] * ad[0] + ad[1] * ad[1]); ad1[0] = ad[2]; ad1[1] = ad[3]; ad1[2] = ((-G / M) * ad[0]) / (d1 * d1 * d1); ad1[3] = ((-G / M) * ad[1]) / (d1 * d1 * d1); return ad1; } public void start() { if(th == null) { th = new Thread(this); th.start(); } }
public void stop() { if(th != null) { th.stop(); th = null; } } public void run() { int i = 0; do { double d = (double)i * dt; double ad4[] = new double[x.length]; double ad[] = f(d, x); for(int j = 0; j < x.length; j++) ad4[j] = x[j] + (dt * ad[j]) / 2D;
double ad1[] = f(d + dt / 2D, ad4); for(int k = 0; k < x.length; k++) ad4[k] = x[k] + (dt * ad1[k]) / 2D; double ad2[] = f(d + dt / 2D, ad4); for(int l = 0; l < x.length; l++) ad4[l] = x[l] + dt * ad2[l]; double ad3[] = f(d + dt, ad4); for(int i1 = 0; i1 < x.length; i1++) x[i1] += (dt / 6D) * (ad[i1] + 2D * ad1[i1] + 2D * ad2[i1] + ad3[i1]); repaint(); i++; try { Kadai9_1 _tmp = this; Thread.sleep(10L); } catch(InterruptedException interruptedexception) { } } while(true); } int trans_x(double d) { return (int)(((d - -2D) / 4D) * (double)getSize().width); }
int trans_y(double d) { return (int)(((2D - d) / 4D) * (double)getSize().height); } public void update(Graphics g) { paint(g); } public void paint(Graphics g) { setBackground(new Color(230, 255, 255)); g.drawString("第9回課題 T000000 龍谷 太郎", getSize().width - getFont().getSize() * 15, getFont().getSize()); g.fillOval(trans_x(x[0]) - 2, trans_y(x[1]) - 2, 3, 3); } static final double XMIN = -2D; static final double XMAX = 2D; static final double YMIN = -2D; static final double YMAX = 2D; Thread th; double x[] = { 1.5D, 0.5D, 0.0D, -0.40000000000000002D }; double dt; double L; double M; double G; }
問題1の「〜.class」から「〜.java」を作っただけ。 簡単に言うと問題1で動いてるものと全く同じもの。
492 :
デフォルトの名無しさん :04/11/30 22:56:08
494 :
デフォルトの名無しさん :04/12/01 00:59:48
この問題がわかんないんですー!どなたかお願いします。。 for 文を使って次のアプリケーションを作成してください。 1*1, 11*11, 111*111, 1111*1111, 11111*11111, 111111*111111 を計算してください。
495 :
デフォルトの名無しさん :04/12/01 01:50:30
>>494 String str="1";
long val=Long.parseLong( str );
System.out.println( val*val );
str = str + "1";
をfor文で5回まわせばいいのかな?
10進数なの〜
497 :
デフォルトの名無しさん :04/12/01 08:32:38
すみません、よくわからないので教えてもらいたいのですが。 以下のようなクラスを作成し、コンパイル実行せよ。という課題で、 【型がStringクラスであるような_idと_nameという2つのフィールドを持つ。 なお、これらのフィールドはこのクラスのオブジェクト以外からはアクセス不能とする】 という指示の部分です(;´Д`) ホント簡単な事でスミマセン・・・_| ̄|
privateでgoogleに頼む。
>>480 >ホームページにあるのと同じ感じで動いて、スタートやストップ、
>値を変更したりするボタン設定はいりません。
ワラタ。つまり以前の解答が・・・w
502 :
Java Student :04/12/01 11:53:32
このコードがなぜコンパイルできないのか、何処がなぜ間違っているのか知りたいのですが。教えてください。 public class test4 { public static int min(int x, int y){ if(x < y){ return x; }else{ return y; } } public static int min(String s, String t){ if(s.length() < t.length()){ return s.length(); }else{ return t.length(); } } public static void testMin(){ System.out.println(min(3, "hello")); } }
503 :
デフォルトの名無しさん :04/12/01 12:01:35
>>502 printlnのかっこ内で呼び出すメソッド、min(int i, String s)は
存在しないから。
504 :
デフォルトの名無しさん :04/12/01 15:17:54
>>494 class towNumber{
public static void main(String args[]){
for(int i = 1;i<=127;i=(i<<1)+1){
System.out.println(i*i);
}
}
}
505 :
デフォルトの名無しさん :04/12/01 22:13:35
","を区切り文字として、キーボードから11,22,33と入力された場合、 11+22+33をするプログラムを作りたいのですが、","の扱いに困っています。 どのようにして区切り文字を判断して、足すことができるようにするか教えてください。
507 :
M.B. :04/12/01 23:23:03
そこで String クラスの split メソッドですよ
508 :
デフォルトの名無しさん :04/12/02 05:17:11
>>505 もう課題提出日を過ぎてるので、無駄だと思われますが・・・
509 :
お願いします! :04/12/02 09:42:33
C://xxx/xxx/xxx/の中にあるファイルをファイル名昇順に読み込み、 内容を画面に出力しなさい。 もう全然わかりません。
510 :
デフォルトの名無しさん :04/12/02 10:21:40
>>509 String dirName = "C:\\Tmp";
File dir = new File( dirName );
File[] files = dir.listFiles();
Arrays.sort( files, new Comparator() {
public int compare( Object o1, Object o2 ) {
File f1 = (File)o1;
File f2 = (File)o2;
return f1.getName().compareTo( f2.getName() );
}
} );
for ( int i = 0; i < files.length; i++ ) {
if ( files[i].isFile() ) {
BufferedReader reader = new BufferedReader( new FileReader( files[i] ) );
String line;
while ( ( line = reader.readLine() ) != null ) {
System.out.println( line );
}
reader.close();
}
}
512 :
デフォルトの名無しさん :04/12/02 10:54:25
ふぇあ
/* ============================================================================ 問題 PixelViewerの機能を拡張するPixelDrawクラスを作成せよ。 PixelDrawの機能は以下の通り 1) drawRect四角形描画(左下点、幅、高さ、色を指定) 2) drawPointCircle円を点で描画(中心、半径、色を指定) 3) drawLine直線を描画(始点、終点、色を指定) 4) drawCircle円を描画(中心、半径、色を指定) 円の描画について drawPointCircle-180度から180度まで1度刻みに円周の点を求め点を描画 drawCircle-180度から180度まで1度刻みに円周の点を求め点を直線で結んで描画 なお、クラスの動作を確認するためのプログラムは、PixelDrawTest.classとして提供されている。 従って、PixelDrawクラスのみを作成すれば良い。 コンパイルおよび動作確認は、PixelDraw.batを実行して行うこと。
どなたか上の問題を12時までにお願いします!m(__)m
仕様です PixelDrawクラス仕様 ファイル名 PixelDraw.java フィールド PixelViewer コンストラクタ public PixelDraw( PixelViewer viewer// 描画を行う PixelViewer ) メソッド public void drawRect( int row,// 四角形の左下点行位置 int col,// 四角形の左下点列位置 int width,// 四角形の幅 int height,// 四角形の高さ int R,// 四角形の色の R 成分 int G,// 四角形の色の G 成分 int B// 四角形の色の B 成分 ) 四角形を描画 public void drawPointCircle( int row,// 円の中心の行位置 int col,// 円の中心の列位置 int r,// 円の半径 int R,// 円の色の R 成分 int G// 円の色の G 成分 int B// 円の色の B 成分 ) 円を-180度〜180度まで1度刻みの点で描画
仕様の続きです。 public void drawLine( int rs,// 直線の始点の行位置 int cs,// 直線の始点の列位置 int re,// 直線の終点の行位置 int ce,// 直線の終点の列位置 int R,// 直線の色の R 成分 int G,// 直線の色の G 成分 int B// 直線の色の B 成分 ) 直線を描画 public void drawCircle( int row,// 円の中心の行位置 int col,// 円の中心の列位置 int r,// 円の半径 int R,// 円の色の R 成分 int G,// 円の色の G 成分 int B// 円の色の B 成分 ) 円を-180度〜180度まで1度刻みの点をdrawLineで結んで描画 public PixelViewer getPixelViewer() 戻り値 PixelViewer 描画対象となっているPixelViewerを取得
517 :
デフォルトの名無しさん :04/12/02 11:35:01
>>510 その1
import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class PreProblem2 extends JApplet {
private int num = 0;
public void init() {
JPanel pal = new JPanel();
JButton btn = new JButton("redraw");
final JTextField tfd = new JTextField("0");
tfd.setPreferredSize(new Dimension(50, 20));
pal.add(btn);
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
num = Integer.parseInt(tfd.getText().trim());
} catch (NumberFormatException e1) {
return;
}
repaint();
}
});
pal.add(tfd);
getContentPane().add(pal, BorderLayout.NORTH);
}
public void paint(Graphics g) {
super.paint(g);
int init = 1;
if (num >= 1 && num <= 5) {
init = num;
}
518 :
デフォルトの名無しさん :04/12/02 11:35:30
>>510 その2
int x = 100;
int y = 50;
int width = 200;
int height = 200;
for (int index = init; index <= 5; index++) {
fillOval(g, index, x, y, width, height);
}
}
private void fillOval(Graphics g, int number, int x, int y, int width,
int height) {
int scale1 = number - 1;
int scale2 = 6 - number;
x = x + width / 2 * scale1 / 5;
y = y + width / 2 * scale1 / 5;
width = width * scale2 / 5;
height = height * scale2 / 5;
if (number == 1) {
g.setColor(Color.green);
} else if (number == 2) {
g.setColor(Color.yellow);
} else if (number == 3) {
g.setColor(Color.magenta);
} else if (number == 4) {
g.setColor(Color.pink);
} else if (number == 5) {
g.setColor(Color.blue);
}
g.fillOval(x, y, width, height);
}
}
519 :
デフォルトの名無しさん :04/12/02 11:54:05
>>513 PixelViewerが何なのか分からないとどうしようもない・・・
どうも皆さんお騒がせしてすいませんでした。m(__)m
とくに
>>519 さん、レスしてくれて本当にありがとうございました。
確かに説明不足でしたね。一応自力で出来ました。
本当に皆さんありがとうございました。
521 :
デフォルトの名無しさん :04/12/02 18:49:20
640*480のJPG写真のそれぞれの画素からS(彩度)をとりました。 (double S[] = S[640*480]) Sは0〜1までの実数値で、その間を0.001刻みで1000分割し それぞれのS値のピクセル数を出力させるにはどのような書き方をすればよいでしょうか? 私は小数点の任意の位以下の切り捨て方がわからなかったので まず得られたS値を1000倍し、intに型変換することで小数点第3位までを取り出すことにしました (for count_S[] = 0;count_s[]<1000,count_s[]++)
522 :
デフォルトの名無しさん :04/12/02 19:17:03
こんばんは。GUIの質問なのですが・・・ JFrameを使っています。 親フレームにボタンを付け、ボタンを押すと子フレームを生成するようにしています。 また、その際に子フレームしか触れないようにモーダルにしています。 親フレームに付けたボタンにsetEnabled(false);で親フレームを編集不可にしてます。 子フレームを消したときにまた親フレームを編集できるようにしたいんです。 子フレームにもボタンを付けて、そのボタンにイベント処理でsetEnabled(true); で、親フレームをまた編集できるようにソースを書いたのですが、うまくいきません。 わかるかたいらっしゃいますか?どうぞよろしくお願いします(;´Д`)!!
523 :
M.B. :04/12/02 20:39:36
524 :
デフォルトの名無しさん :04/12/02 21:49:49
御礼が遅くなってどうもすいませんでした。 227様、古代帝國富士皇朝総帥・伯壬旭様どうもありがとうございました。 あのプログラムを参考に勉強しようと思います。 またお世話になるかと思いますが、その時はよろしくお願いします。
526 :
M.B. :04/12/02 22:23:58
> またお世話になるかと思いますが、その時はよろしくお願いします。 若者よ、 「次は回答する側で登場したいと思います。」 くらいのことは言っていいんだぞ。
527 :
デフォルトの名無しさん :04/12/02 22:32:17
ttp://www.morikita.co.jp/soft/8444/Answers/ans05.html の問題1について
(1)上記のプログラムにクイックソートで配列をソートするメソッドquickSort()を追加するとともにランダムなデータ
(fillRandomData()により初期化)を中心に実行時間を計測し、考察しなさい
(2)メソッドquickSortは2回の再帰呼び出しを行っているが2回目の再帰呼び出しを行わずに
繰り返しとして実現できる。このようにプログラムを変更せよ
(3)ヒープソートを実現するメソッドを上記のプログラムに追加しヒープソートの実行速度を測定しなさい
どうかよろしくお願いします。
528 :
M.B. :04/12/02 22:54:01
>>527 > 考察しなさい
> 測定しなさい
すでにプログラミングの問題ですらないぞw
529 :
名無し :04/12/02 23:01:10
あの、Javaで Microsoftのパワーポイントのオートシェイプのような 機能って実現出来ますか?
530 :
デフォルトの名無しさん :04/12/02 23:09:47
public class tec12_lun{ public double f(double t,double u){ return t*u;} public void run(String arg){ double N=Double.parseDouble(arg); double h=1/N; double u_init=1.0; double t,u; u=u_init; t=0; for(int k=0;k<=N;k++){ double k1,k2,k3,k4; k1=h*f(t,u); k2=h*f(t+h*0.5,u+k1*0.5); k3=h*f(t+h*0.5,u+k2*0.5); k4=h*f(t+h,u+k3); double u_new=u+(k1+2*k2+2*k3+k4)/6; u=u_new; t+=h;} double e=Math.exp(0.5); u-=e; if(u<0) u*=-1; System.out.println(u);} public static void main(String[] args){ tec12_lun ex=new tec12_lun(); ex.run(args[0]);}} 一次四位四段のルンゲクッタ法のt=1での誤差評価のプログラムですが これであってるでしょうか?自信なくて・・・ du(t)/dt=t*u(t) u(t)=exp(t*t/2) 0<=t<=1 argsには10,20,50,100・・・・・を入力
531 :
デフォルトの名無しさん :04/12/02 23:12:08
>>527 計測は、currentTimeMillis()を用いてやってください。
問題(1)の追加メソッド
static void quickSort(int[] data, int left, int right) {
if (left >= right) {
return;
}
int center = left + (right - left) / 2;
int num = data[center];
int idx = left;
data[center] = data[left];
for (int i = left + 1; i <= right; i++) {
if (data[i] < num) {
int swap = data[++idx];
data[idx] = data[i];
data[i] = swap;
}
}
data[left] = data[idx];
data[idx] = num;
quickSort(data, left, idx - 1);
quickSort(data, idx + 1, right);
}
↑の一番呼び出しは、quickSort(data, 0, data.length - 1); で。
dataは、int[] の配列データ。
>>527 問題(2)の追加メソッド
static void quickSortByLoop(int[] data) {
LinkedList list = new LinkedList();
int left = 0;
int right = data.length - 1;
while (true) {
if (left >= right) {
if (list.isEmpty())
return;
right = ((Integer)list.removeLast()).intValue();
left = ((Integer)list.removeLast()).intValue();
continue;
}
int center = left + (right - left) / 2;
int num = data[center];
int idx = left;
data[center] = data[left];
for (int i = left + 1; i <= right; i++) {
if (data[i] < num) {
int swap = data[++idx];
data[idx] = data[i];
data[i] = swap;
}
}
data[left] = data[idx];
data[idx] = num;
list.addLast(new Integer(idx + 1));
list.addLast(new Integer(right));
right = idx - 1;
}
}
static void heapSort(int[] data) { for (int i = (data.length - 2) / 2; i >= 0; i--) { int idx = i, src = data[idx], child = 0; while (true) { child = idx * 2 + 1; if (child > data.length - 1) { break; } if (child < data.length - 1) { if (data[child] < data[child + 1]) { ++child; } } if (src > data[child]) { break; } data[idx] = data[child]; idx = child; } data[idx] = src; } for (int i = data.length - 1; i > 0; i--) { int swap = data[0]; data[0] = data[i]; data[i] = swap; int idx = 0, src = data[idx], child = 0; while (true) { child = idx * 2 + 1; if (child > i - 1) { break; } if (child < i - 1) { if (data[child] < data[child + 1]) { ++child; } } if (src > data[child]) { break; } data[idx] = data[child]; idx = child; } data[idx] = src; } }
535 :
デフォルトの名無しさん :04/12/02 23:43:50
11 2 1 0 -3 0 0 0 0 0 2 12 2 1 0 -3 0 0 0 0 1 2 13 2 1 0 -3 0 0 0 0 1 2 14 2 1 0 -3 0 0 A= -3 0 1 2 15 2 1 0 -3 0 0 -3 0 1 2 16 2 1 0 -3 0 0 -3 0 1 2 17 2 1 0 0 0 0 -3 0 1 2 18 2 1 0 0 0 0 -3 0 1 2 19 2 0 0 0 0 0 -3 0 1 2 20 1 -1 1 b= -1 1 -1 1 -1 1 -1 x(0)=b 収束判定‖x(k+1)-x(k)‖∞<10^-5 最大反復回数 100回 この時、連立一次方程式Ax=bの解を求めるJacobi法、Gauss-Seidel法のプログラムを作成せよ という明日までの宿題です。どうかよろしくお願いします
536 :
デフォルトの名無しさん :04/12/03 00:10:25
数学問題は、解の為の数式を書いてくれれば、解答率がアップするのだが・・・
537 :
デフォルトの名無しさん :04/12/03 00:13:19
数学問題は、〜法でせよと書くだけでなく、その解の為の具体的な数式を 書いてくれれば、プログラム回答率がアップするのだが・・・
538 :
535 :04/12/03 00:26:11
a11 a12 a13 A= a21 a22 a23 a31 a32 a33 に対して 0 0 0 a11 0 0 0 a12 a13 L= a21 0 0 D= 0 a22 0 U= 0 0 a23 a31 a32 0 0 0 a33 0 0 0 としたとき Jacobi法 x(k+1) =−D^(−1){L+U}x(k)+D^(−1)b Gauss-Seidel法 x(k+1) =−{L+D}^(−1)Ux(k)+{L+D}^(−1)b という反復式で解xが求まります。 判りにくいですがD^(−1)、{L+D}^(−1)は逆行列です
539 :
>>535 Jacobi法、Gauss-Seidel法 その1 :04/12/03 03:56:48
public class HW37 { public static void main(String[] args) { double[][] A = { {11,2,1,0,-3,0,0,0,0,0}, {2,12,2,1,0,-3,0,0,0,0}, {1,2,13,2,1,0,-3,0,0,0}, {0,1,2,14,2,1,0,-3,0,0}, {-3,0,1,2,15,2,1,0,-3,0}, {0,-3,0,1,2,16,2,1,0,-3}, {0,0,-3,0,1,2,17,2,1,0}, {0,0,0,-3,0,1,2,18,2,1}, {0,0,0,0,-3,0,1,2,19,2}, {0,0,0,0,0,-3,0,1,2,20} }; double[][] b = { {1}, {-1}, {1}, {-1}, {1}, {-1}, {1}, {-1}, {1}, {-1} };
540 :
>>535 Jacobi法、Gauss-Seidel法 その2 :04/12/03 03:57:31
double[][] ans = jacobi(A, b); System.out.println("Jacobi法による行列xの解"); for (int y = 0; y < ans.length; ++y) { for (int x = 0; x < ans[y].length; ++x) { System.out.print(ans[y][x] + " "); } System.out.println(); } System.out.println(); double[][] demo = multiple(A, ans); System.out.println("(Jacobi法の解) Ax="); for (int y = 0; y < demo.length; ++y) { for (int x = 0; x < demo[y].length; ++x) { System.out.print(demo[y][x] + " "); } System.out.println(); } System.out.println(); System.out.println(); ans = gauss_seidel(A, b); System.out.println("gauss_seidel法による行列xの解"); for (int y = 0; y < ans.length; ++y) { for (int x = 0; x < ans[y].length; ++x) { System.out.print(ans[y][x] + " "); } System.out.println(); } System.out.println(); demo = multiple(A, ans); System.out.println("(gauss_seidel法の解) Ax="); for (int y = 0; y < demo.length; ++y) { for (int x = 0; x < demo[y].length; ++x) { System.out.print(demo[y][x] + " "); } System.out.println(); } System.out.println(); }
541 :
>>535 Jacobi法、Gauss-Seidel法 その3 :04/12/03 03:58:10
static double[][] jacobi(double[][] A, double[][] b) { double[][][] dets = makeLUD(A); double[][] L = dets[0], U = dets[1], D = dets[2]; double[][] x = new double[b.length][b[0].length]; for (int i = 0; i < b.length; ++i) { System.arraycopy(b[i], 0, x[i], 0, b[i].length); } for (int cnt = 0 ; cnt < 100; ++cnt) { double[][] ans1 = minus(D); ans1 = reverse(ans1); double[][] ans2 = add(L, U); ans1 = multiple(ans1, ans2); ans1 = multiple(ans1, x); double[][] ans3 = reverse(D); ans3 = multiple(ans3, b); ans1 = add(ans1, ans3); if(compare(ans1, x)) { x = ans1; break; } x = ans1; } return x; } static double[][] gauss_seidel(double[][] A, double[][] b) { double[][][] dets = makeLUD(A); double[][] L = dets[0], U = dets[1], D = dets[2]; double[][] x = new double[b.length][b[0].length]; for (int i = 0; i < b.length; ++i) { System.arraycopy(b[i], 0, x[i], 0, b[i].length); } for (int cnt = 0 ; cnt < 100; ++cnt) { double[][] ans1 = add(L, D); ans1 = minus(ans1); ans1 = reverse(ans1); ans1 = multiple(ans1, U); ans1 = multiple(ans1, x); double[][] ans2 = add(L, D); ans2 = reverse(ans2); ans2 = multiple(ans2, b); ans1 = add(ans1, ans2); if(compare(ans1, x)) { x = ans1; break; } x = ans1; } return x; }
542 :
:>>535 Jacobi法、Gauss-Seidel法 その4 :04/12/03 03:59:09
static double[][][] makeLUD(double[][] src) { double[][] L = new double[src.length][src[0].length]; double[][] U = new double[src.length][src[0].length]; double[][] D = new double[src.length][src[0].length]; for (int a = 0; a < src.length; ++a) { System.arraycopy(src[a], 0, L[a], 0, a); System.arraycopy(src[a], a + 1, U[a], a + 1, src[a].length - 1 - a); System.arraycopy(src[a], a, D[a], a, 1); } return new double[][][] {L, U, D}; } static boolean compare(double[][] src, double[][] dst) { double[][] ans = new double[src.length][src[0].length]; for (int y = 0; y < src.length; ++y) { for (int x = 0; x < src[y].length; ++x) { ans[y][x] = src[y][x] - dst[y][x]; } } for (int y = 0; y < src.length; ++y) { for (int x = 0; x < src[y].length; ++x) { if(Math.abs(ans[y][x]) >= 0.00001) return false; } } return true; }
543 :
>>535 Jacobi法、Gauss-Seidel法 その5 :04/12/03 04:00:42
static double[][] multiple(double[][] src, double[][] dst) { double[][] ans = new double[src.length][dst[0].length]; for (int z = 0; z < ans[0].length; ++z) { for (int y = 0; y < ans.length; ++y) { double num = 0; for (int x = 0; x < ans[y].length; ++x) { num += dst[y][x] * src[x][z]; } ans[y][z] = num; } } return ans; } static double[][] add(double[][] src, double[][] dst) { double[][] ans = new double[src.length][src[0].length]; for (int y = 0; y < src.length; ++y) { for (int x = 0; x < src[y].length; ++x) { ans[y][x] = src[y][x] + dst[y][x]; } } return ans; } static double[][] minus(double[][] src) { double[][] ans = new double[src.length][src[0].length]; for (int y = 0; y < src.length; ++y) { for (int x = 0; x < src[y].length; ++x) { ans[y][x] = -src[y][x]; } } return ans; }
544 :
>>535 Jacobi法、Gauss-Seidel法 その6 :04/12/03 04:01:17
static double[][] reverse(double[][] src) { double[][] ans = new double[src.length][src[0].length]; for (int a = 0; a < src.length; ++a) { System.arraycopy(src[a], 0, ans[a], 0, src[a].length); } int ip = ans.length; double epsinv = 0.00001; int i, j, k; double t, b; int[] l = new int[ip], m = new int[ip]; for (k = 0; k < ip; k++) { m[k] = l[k] = k; b = ans[k][k]; for (j = k; j < ip; j++) { for (i = k; i < ip; i++) { if (Math.abs(ans[j][i]) > Math.abs(b)) { b = ans[j][i]; l[k] = i; m[k] = j; } } } if (Math.abs(b) < epsinv) { return ans; } j = l[k]; if (j > k) { for (i = 0; i < ip; i++) { t = -ans[i][k]; ans[i][k] = ans[i][j]; ans[i][j] = t; } } i = m[k]; if (i > k) { for (j = 0; j < ip; j++) { t = -ans[k][j]; ans[k][j] = ans[i][j]; ans[i][j] = t; } }
545 :
デフォルトの名無しさん :04/12/03 05:33:14
>>425 422ですけど
KadaiA1.java:8: java.lang.CharacterのisSpace(char) は (int) に適用できません。
if(Character.isSpace(i))
^
とでます;;
int i ってのは間違いないのでどう直していいかわかんないです。
546 :
デフォルトの名無しさん :04/12/03 05:51:56
キャストの仕方間違い。 isSpace(char i) じゃなくて isSpace((char) i) が正解ぽ あとこれだと空白文字「だけ」出力しちゃうんでない?
547 :
>>535 Jacobi法、Gauss-Seidel法 その7 :04/12/03 08:14:15
for (i = 0; i < ip; i++) { if (i != k) { ans[k][i] /= -b; } } for (i = 0; i < ip; i++) { for (j = 0; j < ip; j++) { if (i != k && j != k) { ans[j][i] += ans[k][i] * ans[j][k]; } } } for (j = 0; j < ip; j++) { if (j != k) { ans[j][k] /= b; } } ans[k][k] = 1.0 / b; } for (k = ip - 2; k >= 0; k--) { i = l[k]; if (i > k) { for (j = 0; j < ip; j++) { t = ans[k][j]; ans[k][j] = -ans[i][j]; ans[i][j] = t; } } j = m[k]; if (j > k) { for (i = 0; i < ip; i++) { t = ans[i][k]; ans[i][k] = -ans[i][j]; ans[i][j] = t; } } } return ans; } }
548 :
古代帝國富士皇朝総帥・伯壬旭 :04/12/03 08:16:26
>>535 上の7つのコードを全部コピペしてコンパイル。
敷き詰めて書いてるのでフォーマットしなおしてください。
549 :
デフォルトの名無しさん :04/12/03 08:19:10
>>546 とりあえずコンパイルしてみました。
>注: KadaiA1.java は推奨されない API を使用またはオーバーライドしています。
>注: 詳細については、-deprecation オプションを指定して再コンパイルしてください。
とでたので、-deprecation オプションを指定したら
KadaiA1.java:8: 警告: java.lang.Character の isSpace(char) は推奨されません。
if(Character.isSpace((char)i))
警告 1 個
とでました (´〜`)
警告だったので動かしてみたら・・・空白だけ出力されました
空白文字以外出力するにはどうすればいいでしょうか?
if(Character.isSpace((char)i))を偽にすればいいと思うのですが
クラスがif文に入るといまいちわからないです。
お願いします。
550の言うとおりなんだけど
暇なのでちょっと説明。型の話は置いといて、なるべく簡単に。
まず、if に続く括弧の中には、true か false のどちらかの値が入る。
trueなら直後の文を実行するし、
falseなら実行しない。
それから、
Character.isSpace((char)i)
という式は、
iが空白文字ならtrueという値に、
そうじゃなければfalseという値になる。
値の前に ! を付けると
true は false に、
false は true になる。
だから答えは…
あと、クラスが入ろうが入るまいが全く関係ないよ。
ifにクラスが入ると、じゃなくて
クラスそのものの扱い方があんまり分かってないんでない?
それから、警告が出るのは
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/Character.html を見れば理由が書いてある。
読んでも
>>422 には意味わからんかもしれないけど、どうすれば警告出なくなるかは分かるはず
552 :
デフォルトの名無しさん :04/12/03 13:46:27
>>551 ども!いろいろ試行錯誤した結果。できました
if(!(Character.isWhitespace((char)i)))このようにしました。
最初はiのみが値なのかなぁと思ってたのですが
Character.isWhitespace((char)i))コレ全部で値なんですね
出力結果は見事空白がなくなって出力されました。
使い道があるのかビミョウですが
次の問題やってきます!
なんていうか閃いた時と動いた時の嬉しさがたまりませんね。
>>550 サソにここまで書かせてしまって閃いたって言うのもなんですが;;
553 :
デフォルトの名無しさん :04/12/03 21:50:30
失礼しました。紹介されたスレに行ってきます
556 :
M.B. :04/12/03 22:51:38
Tomcat + Java サーブレットで 『2ちゃんねる』サブセットの掲示板を実装したとかいう ネタを披露しようと思ったら、どうやら そういう マターリ な雰囲気ではないらしいな ∧_∧ ∧_∧ (´<_` ) いかにも回答者面して余裕かましてると ( ´_ゝ`) / ⌒i いいかげん嫌われるぞ兄者 / \ | | / / ̄ ̄ ̄ ̄/ | __(__ニつ/ IBM / .| .|____ \/____/ (u ⊃
IBMがパソコン部門を売却
558 :
M.B. :04/12/03 22:59:52
ところでメッセージをポストした後に掲示板に飛ぶというのは バッドな仕様なのではないだろうか。 できればスレ表示画面が更新されてほしいのだが。 ∧_∧ ∧_∧ (´<_` ) それは2ちゃんの広告収入とかに ( ´_ゝ`) / ⌒i 全然配慮してない発言だぞ兄者 / \ | | / / ̄ ̄ ̄ ̄/ | __(__ニつ/ IBM / .| .|____ \/____/ (u ⊃
>>558 あの仕様は広告を見せる為だったのか。勉強になりました。
561 :
M.B. :04/12/03 23:23:34
> あの仕様は広告を見せる為だったのか。勉強になりました。 いや、そういってしまうと実も蓋もないのだが。orz 漏れも草の根 BBS のオーナー兼ホストをやっていて思うのだが、 「練達の書き手」というのは「のめりこみ」が激しいので 一つのスレに集中しがちなのだが、見識が広いので(←漏れがいうと いかにも厭味だな)なるべく多くの板&スレで発言し、 盛り上げて欲しいのだ(それが広告収入につながる部分もあるわけだが)。 そのためにも板全体を見通してもらうというのは大事だと思う。
562 :
M.B. :04/12/03 23:39:23
Tomcat 最高。 ∧_∧ ∧_∧ (´<_` メ ) 言うことはそれだけかゴルァ ( #´_ゝ`) / ⌒i / \ | | / / ̄ ̄ ̄ ̄/ | __(__ニつ/ IBM / .| .|____ \/____/ (u ⊃
563 :
ジョンソン :04/12/04 01:15:42
Javaのネットワークプログラミングで、魚雷当てゲームをグループで作ることになりました。 以下がゲームの内容のクラスなのですが、自分の担当部分はplayメソッドですので そこの部分だけで構いません。どなたかよろしくお願いします。 //ゲーム開始(メインループ) void play(){ プレイヤー1のクライアントに攻撃地点指定を要求(out1を使用) プレイヤー1のクライアントから攻撃地点を取得(in1を使用) bool attackHit = player2.checkDamage(<攻撃地点>); if(attackHit){ プレイヤー1のクライアントに攻撃が当たったことを報告(out1を使用) プレイヤー2のクライアントにダメージを食らったことを報告(out2を使用) }else{ プレイヤー1のクライアントに攻撃が当たらなかったことを報告(out1を使用) プレイヤー2のクライアントにダメージをくらわなかったことを報告(out2を使用) } player2.checkAllDeath(); // プレイヤー2の全滅判定 以上の処理をプレイヤー1と2を入れ替えて実行 以上の処理をどちらかが全滅するまで繰り返す } //もう一回やるか終了するか //もう一回やるならtrue、終了ならfalse bool replayOrEnd(){ }
564 :
M.B. :04/12/04 07:54:29
>>563 > Javaのネットワークプログラミングで、
> 魚雷当てゲームをグループで作ることになりました。
プレイ環境を明示しる。
でないと要求や報告の方法がわからん。
オープンで行なうのか LAN 環境下でプレイするのか。
判定などを行なうクライアントの下にサーバがぶら下がってるのか、
それともプレイヤーだけで構成されていて
全体を見るタスクが存在しなくてもいいのか。
プレイ状況は誰がどんなふうに見るのか。
LAN で乱打戦がありなら、まず戦場の情報をセットして戦闘に参加し、
攻撃側はブロードキャストで攻撃に関する情報を投げ、
各プレイヤーは被害状況を監視用のタスクに投げ、
監視用タスクはネットから見えるような形で戦況を表示する
(ただし観客用であり、プレイヤーはこの情報を利用してはならない)
というのが、スタンダードなやりかただと思うが。
565 :
M.B. :04/12/04 08:28:37
スレ立て用画面からスレ管理用 JSP を生成するとか、 真面目に掲示板を作ろうと思うとけっこう大変だな ∧_∧ ∧_∧ (´<_` ) ただいきあたりばったりに開発するのを ( ´_ゝ`) / ⌒i アジャイル手法とは呼ばないぞ兄者 / \ | | / / ̄ ̄ ̄ ̄/ | __(__ニつ/ IBM / .| .|____ \/____/ (u ⊃
566 :
M.B. :04/12/04 08:49:53
【Java + Tomcat による『2ちゃんねる』ライクな掲示板システムの開発手順】 1)スレ表示用の Java サーブレットを書く。 2)駆動部を JSP として別立てし、そこに板ID とスレID を埋め込むようにする。 3)「スレ用のディレクトリを作成し、(2)の JSP を生成してそこにセットする」、 スレ立て用サーブレット(またはJSP)を書く。 4)板表示用サーブレット(またはJSP)index.* を書く。 5)板立て用の管理者向け Java アプリケーションを書く。 6)掲示板ホームページ用 HTML index.* を書く。 道は遠かった _| ̄|○
567 :
ジョンソン :04/12/04 12:20:02
>>564 サーバー内にゲームを処理するプログラムがあって、それにクライアント1と
クライアント2が接続します。クライアント1がどこを攻撃するか
を決めてそれをサーバーに送り、サーバーがそれを処理して当たったかどうかを
クライアント1,2に送るって感じですね。
いっしょに作ってるやつに教えてもらえよ
569 :
デフォルトの名無しさん :04/12/04 14:54:46
今、他の事やってて、もう少し待っててくださ〜い
571 :
Java暦3日 :04/12/04 17:44:28
都市A - 都市B : 距離 のフォーマットで書かれたデータが与えられて スタートとゴールが都市'1'で 全ての都市を巡回するルートのうち距離がなるべく小さくなるような 経路を求めるプログラムを提出しろとのことなんですが 誰かヘルプミー 1-2:1 1-3:2 1-4:3 2-3:4 2-4:5 3-4:6 1>4>3>2>1 の順で周ると距離は3+6+4+1=14です。
572 :
古代帝國富士皇朝総帥・伯壬旭 :04/12/04 18:47:23
>>569 public class Problem2 extends DrawCircle2 {
public void init() {
super.init();
setBackground(Color.lightGray);
}
public void paint(Graphics g) {
int value = 5;
if (number >= 1 && number <= 5) {
value = 6 - number;
}
for (int i = value; i > 0; i--) {
int width = 50 * i;
int height = 50 * i;
int x = 200 - (width / 2);
int y = 180 - (height / 2);
if (i == 5) {
g.setColor(Color.green);
} else if (i == 4) {
g.setColor(Color.yellow);
} else if (i == 3) {
g.setColor(Color.magenta);
} else if (i == 2) {
g.setColor(Color.pink);
} else if (i == 1) {
g.setColor(Color.blue);
}
g.fillOval(x, y, width, height);
}
}
}
JAVAの勉強をしたいのですがどの本がお勧めですか
574 :
デフォルトの名無しさん :04/12/04 19:18:19
>>517 そのフォーマットで書かれたデータというのは
1-2:1
1-3:2
1-4:3
2-3:4
2-4:5
3-4:6
に対してだけなんですか?
それとも、そのフォーマットで書かれた様々なデータを
解析して、最短経路を示せるようにするプログラムを
作れとの事なのですか?
575 :
デフォルトの名無しさん :04/12/04 19:30:21
課題でロードランナーを作成しているのですが、敵アルゴリズムで詰まりました。 課題の条件を満たすために、敵からプレーヤーまでの最短距離である経路を見つけなければなりません。 画面は16×16マスで、プレーヤー、敵、ブロック、はしご、何も無い空間があります。 プレーヤーの座標、敵の座標、フィールドオブジェクトの位置関係が解る時、どうすれば最短距離を出せるのでしょうか? 以下、自分で考えたり用意したりしたこと。 up[i][j] = 1; //座標(i,j)から上に行く重みは1(行ける) down[i][j] = 1000; //座標(i,j)から下に行く重みは1000(行けない) right[i][j] = 1; //座標(i,j)から右に行く重みは1(行ける) left[i][j] = 1; //座標(i,j)から左に行く重みは1(行ける) あと最初全てのマスはtrueで、通った後falseを返すとか。 同じマスに通らずにプレーヤーの座標まで辿り着くルートを可能な限り出して、 その距離を比較し、最短距離の経路を配列で出せればいいのですが。 お願いします。
576 :
敵はロボット :04/12/04 19:31:02
課題でロードランナーを作成しているのですが、敵アルゴリズムで詰まりました。 課題の条件を満たすために、敵からプレーヤーまでの最短距離である経路を見つけなければなりません。 画面は16×16マスで、プレーヤー、敵、ブロック、はしご、何も無い空間があります。 プレーヤーの座標、敵の座標、フィールドオブジェクトの位置関係が解る時、どうすれば最短距離を出せるのでしょうか? 以下、自分で考えたり用意したりしたこと。 up[i][j] = 1; //座標(i,j)から上に行く重みは1(行ける) down[i][j] = 1000; //座標(i,j)から下に行く重みは1000(行けない) right[i][j] = 1; //座標(i,j)から右に行く重みは1(行ける) left[i][j] = 1; //座標(i,j)から左に行く重みは1(行ける) あと最初全てのマスはtrueで、通った後falseを返すとか。 同じマスに通らずにプレーヤーの座標まで辿り着くルートを可能な限り出して、 その距離を比較し、最短距離の経路を配列で出せればいいのですが。 お願いします。
577 :
M.B. :04/12/04 20:10:51
>>575 あいつら馬鹿だからホントに最短距離で来るぞ。
壁の向こうで待ってたりするし。
明らかに到達できないのに接近しようと
上から落っこってくる奴の頭を踏んづけて通らないと
クリアできない面とかあったはずだが。
(ちなみに百五十面すべてクリアした経験あり)
578 :
敵はロボット :04/12/04 20:27:08
>>577 課題用敵アルゴリズムを用意したいんです。
すんごい追ってくるスーパーエネミーを一体作成したくて。
本家は敵とプレーヤーの座標位置で近寄ってきますけど、
あくまで本家とは違うモノとしてお願いします。
上記のような経路の重みの情報を基に、
プレーヤーを最短距離で追うようなプログラム、お願いします。
>>578 >>240-244 に、作成した迷路の最短経路を求めるプログラムがある。
スタート地点(迷路の左上)を敵座標。ゴール地点(迷路の右下)を
プレイヤー座標と置き換えて読んでみるとか・・・
580 :
M.B. :04/12/04 20:42:57
>>578 「落ちる」「掘る」という要素があるので、
通常の迷路探索アルゴリズムは素直に適用できない。
まず推移的閉包を求めておいて、
プレイヤーがその中に入っていれば最短経路を通り、
そうでなければプレイヤーの脱出経路と推移的閉閉が
重なる点に移動するとかいった手段が必要と思われ。
推移的閉包を求める効率のいいアルゴリズムに関しては、
『プログラミング・セミナー』(共立出版)の、
『ちょっと珍しい算法の話』に記述あり。
581 :
M.B. :04/12/04 20:52:46
> プレーヤー、敵、ブロック、はしご、何も無い空間があります。 ブロックにも掘れる奴と掘れない奴(「石」っつーのかな)があるので 「掘る」の場合でもちょっと工夫が必要。 なお、「見た目ブロックだが実際には何もない空間」っつー ダミーブロックがあるので、「すんごい追ってくるスーパーエネミー」という ことであれば、「引っかけ」という戦術的な要素も導入すると 面白いと思われ。
582 :
敵はロボット :04/12/04 20:55:22
>>579 解りました、一生懸命読んでみます。
理解できない部分があったら質問させて下さい。
というよりします。容赦なく。
>>580 推移的閉包、ですか…(な、なんだそれは!?)
明日、図書館行きますっ!
でも下に足場が無い落ちるマスは下方向に一方通行で、
プレーヤーが掘る穴については、無視でいいかな? とか考えていたんですけど。
そうしないと本当に敵から逃げられないし。
…中途半端にスーパーエネミーじゃないですね。
583 :
敵はロボット :04/12/04 21:02:46
>>581 あーうー、やることがだんだん増えていくー。
『敵にとって掘れるブロックも掘れないブロックも同じだろー』とか考えてたので。
584 :
M.B. :04/12/04 21:10:24
>>582 べつに難しい概念じゃないから安心しる。
ネットワーク理論で、「自分のいる地点から到達できる場所」のことを
すなわち、n 個の状態(位置)があるとして、
点 x から 点 y に移動できる(そういう通路がある)ということは、
n × n の boolean の配列 (x, y) が true であることで表される
(この配列を A としよう)。
で、任意の点 p から任意の点 q に到達できるかどうかを
表す配列 B を、この A から作り出す手続きが、
「推移的閉包を求めるアルゴリズム」なのだ。
日本語がちょっと壊れてるあるね
586 :
M.B. :04/12/04 21:28:35
編集中に一行飛ばした。 > 「推移的閉包」という。 の一行を適宜挿入せよ。
587 :
敵はロボット :04/12/04 21:29:36
>>584 n×nのマス目があって、
A:(x,y) = true ⇒行ける
B:(p,q) = true or false??
これをAをもって判断する?
これが推移的閉包を求めるアルゴリズム?
…今の俺にそれが可能なのだろうか。
いや、それより今はその『A』が行けるかどうか判断するので手一杯なのでは、俺は。
588 :
敵はロボット :04/12/04 21:31:46
あ、n×nのマス目じゃねぇや
計算量的にゲームが成り立たない悪寒
import java.util.*; public class HW40 { static class Town { int myNo; List nextList = new ArrayList(), distList = new ArrayList(); Town(int myNo) { this.myNo = myNo; } public boolean equals(Object obj) { if (!(obj instanceof Town)) return false; return myNo == ((Town) obj).myNo; } } static List townList = new ArrayList(); static List shortRoute; static int shortDist = 1000; static String text = "1-2:1\n" + "1-3:2\n" + "1-4:3\n" + "2-3:4\n" + "2-4:5\n" + "3-4:6";
public static void main(String[] args) { StringTokenizer st = new StringTokenizer(text, ":\n"); while (st.hasMoreTokens()) { String token = st.nextToken(); String[] noText = token.split("-"); int no1 = Integer.parseInt(noText[0]); Town town1 = new Town(no1); if (!townList.contains(town1)) { townList.add(town1); } else { int idx = townList.indexOf(new Town(no1)); town1 = (Town) townList.get(idx); } int no2 = Integer.parseInt(noText[1]); town1.nextList.add(new Integer(no2)); Town town2 = new Town(no2); if (!townList.contains(town2)) { townList.add(town2); } else { int idx = townList.indexOf(new Town(no2)); town2 = (Town) townList.get(idx); } town2.nextList.add(new Integer(no1)); token = st.nextToken(); int no3 = Integer.parseInt(token); town1.distList.add(new Integer(no3)); town2.distList.add(new Integer(no3)); } int idx = townList.indexOf(new Town(1)); Town start = (Town) townList.get(idx); List route = new ArrayList(); route.add(new Integer(start.myNo)); move(start, route, 0); System.out.print(((Integer) shortRoute.get(0)).intValue()); for (int i = 1; i < shortRoute.size(); i++) { int no = ((Integer) shortRoute.get(i)).intValue(); System.out.print(" - " + no); } System.out.print("\n最短距離 " + shortDist); }
static void move(Town town, List route, int dist) { if (route.size() > townList.size() * 2) { return; } block: if (town.myNo == 1) { for (int i = 0; i < townList.size(); i++) { Town prevTown = (Town) townList.get(i); if (!route.contains(new Integer(prevTown.myNo))) { break block; } } if (dist <= shortDist) { shortDist = dist; shortRoute = route; } return; } for (int i = 0; i < town.nextList.size(); i++) { int dis = ((Integer) town.distList.get(i)).intValue(); int no = ((Integer) town.nextList.get(i)).intValue(); int idx = townList.indexOf(new Town(no)); Town nextTown = (Town) townList.get(idx); List nextRoute = new ArrayList(route); nextRoute.add(new Integer(nextTown.myNo)); move(nextTown, nextRoute, dist + dis); } } }
593 :
古代帝國富士皇朝総帥・伯壬旭 :04/12/04 21:54:06
>>571 全部コピペしてコンパイル。
敷き詰めて書いてるのでフォーマットしなおしてください。
全部巡回して元に戻るって事で、ダイクストラとはちょっと違うのかと
思って普通の再帰にしました。(アルゴリズムの選択ミスだったらスマソ)
ちなみに、
>>571 の経路パターンだと
1>4>3>2>1 距離14
よりも
1 - 4 - 1 - 3 - 1 - 2 - 1
最短距離 12
となってしまいます・・・
594 :
M.B. :04/12/04 21:54:58
>>589 作業領域は 256 × 256、
計算量も n に比例だから、
ちょっとした画像処理程度の手間であって、
問題ないと思われ。
それに、プレイ開始前に計算して
テーブルで持っときゃいい話だから、
何時間かかろうが問題なし。
595 :
古代帝國富士皇朝総帥・伯壬旭 :04/12/04 21:59:59
>>571 あと、都市経路のフォーマットは
都市A - 都市B : 距離(改行コード=\n)
・
・
としてください。
596 :
M.B. :04/12/04 22:18:41
> 計算量も n に比例だから、 スマソ 。 n の二乗に比例だったはず。
597 :
デフォルトの名無しさん :04/12/04 22:27:01
>>593 各都市は1回だけ訪問するような問題の気もする
巡回セールスマン問題みたいなものじゃないのかな?
例えばこういう地図だと、ある都市は2回、回らないといけなくなる・・・ 4 | 3−2 | 1
ちょいとレベルの低い質問かもしれませんがお知恵拝借 自然対数を求めたいのですが、超高精度演算とやらで小数点以下100桁まで出力するプログラムを考えています。 この場合問題になるのがdouble型変数だとせいぜい十数桁までしか表示できません。 小数点以下100桁まで表示となると、どういう手法が考えられるのでしょうか? よろしくお願いします。
600 :
デフォルトの名無しさん :04/12/04 23:17:15
BigDecimalクラスを使えばOK
Cの宿題スレとJavaの宿題スレだと 宿題の内容が圧倒的にJavaのほうが上だと思うのですが、それはどういう風の吹き回しですか?
604 :
599 :04/12/04 23:30:02
>倍精度型変数 全然違いました ちょっと読んでみます。 すいません。。。
配列つかうとまで知っててピンとこないって
多倍長でヤフれ
607 :
デフォルトの名無しさん :04/12/04 23:57:18
569です。 古代帝國富士皇朝総帥・伯壬旭さん。 ありがとうございました。
何となく見えてきました >BigDecimal 配列はなんか感覚的にしっくり来なくて。 ちょっとやってきてみます。 ありがとうございました。
609 :
敵はロボット :04/12/05 00:10:51
上の迷路探索のpathListとdrawPathを読んだら とりあえずはなんとか応用出来そうです。 どちらにしても明日『プログラミングセミナー』って本、探してみますけど。
Servletでどツボにはまっています。よくある話なのですが、 1. EUCで書かれた"〜"がソースに含まれる 2. それをコンパイル 3. Windows上でSJISで"〜"を出力させようとすると化ける EUCの"〜"をUnicodeに変換したものと、SJISの"〜"をUnicodeに変換したもが異なるのが原因のようですね。 「だったらソースを最初からSJISでコンパイルすればいいじゃん」 はい、その通りです。でも、今日出た指令では 1. OracleからEUCの文字列をJDBC経由で拾ってきて (以下同じ) DBの内容をいじることはできません。 「だったらEUCでコンパイルしてWindows側でEUCで出せばいいじゃん」 はい、そうなんですが、使っている帳票ミドルウェアの関係でSJIS以外利用できないのです。 扱う文字列をいちいちチェックして、地道に16進で置き換えるしかないのでしょうか・・・_| ̄|○
611 :
デフォルトの名無しさん :04/12/05 06:27:11
JARファイル内容の抽出で、クラス名が以上に長い60文字位のクラスは 抽出できないのかな。 エラーが出てしまうんじゃ。 % jar -xf hogehoge.jar でダメ。 % jar -tf hogehoge.jar でみるとエラーのクラスは以上に長い。 質問の板が違っていたらゴメン。
614 :
敵はロボット1 :04/12/05 17:40:37
上の迷路探索を参考に応用してみました。 コンパイルは通ったのですが、いざ組み込むと全員の動きが止まります。 どうやら自分で作ったgoPath()が原因のようなのですが、どうすればいいでしょうか? あと最短経路でgoPath()を動かしたいのですが、ansList.get(index)をどのようにいじれば最短経路を出せるのかも教えてください。 ansList.get(index).length 、とかやったらエラーが出まくったので。 敵や味方、各クラスのmove()を同時に処理します。 public void move() { ox = sprite.getPlanePosX(gos.ownPlnNo) / CELL; /*敵味方の座標位置*/ oy = sprite.getPlanePosY(gos.ownPlnNo) / CELL; ex = sprite.getPlanePosX(gos.ePlnNo) / CELL; ey = sprite.getPlanePosY(gos.ePlnNo) / CELL; for (int i = 0; i < wall.length; ++i) { for (int k = 0; k < wall.length; ++k) { wall[i][k] = new Wall(); } } setwall();/*座標ごとの上に行けるか行けないかを設定するやつ*/ ansList.clear(); searchPath(ex, ey, ox, oy, new ArrayList()); goPath(0); //←原因 sprite.setPlaneView(plnNo, true); }
615 :
敵はロボット2 :04/12/05 17:41:12
static void searchPath(int x, int y, int p, int q, List pathList) { Point point = new Point(x, y); if(pathList.contains(point)) return; pathList.add(point); if(x == p && y == q) { ansList.add(pathList); return; } for(int i = 0; i < 4; ++i) { switch (i) { case NORTH: if(!wall[x][y].north) searchPath(x, y - 1, p, q, new ArrayList(pathList)); break; case SOUTH: if(!wall[x][y].south) searchPath(x, y + 1, p, q, new ArrayList(pathList)); break; case WEST: if(!wall[x][y].west) searchPath(x - 1, y, p, q, new ArrayList(pathList)); break; case EAST: if(!wall[x][y].east) searchPath(x + 1, y, p, q, new ArrayList(pathList)); break; } } } void goPath(int index) { List list = (List) ansList.get(index); if(ex < ((Point)list.get(1)).x) sprite.setPlaneMov(plnNo, CELL, 0); //右に行く if(ex > ((Point)list.get(1)).x) sprite.setPlaneMov(plnNo, -CELL, 0); if(ey < ((Point)list.get(1)).y) sprite.setPlaneMov(plnNo, 0, CELL); //下に行く if(ey > ((Point)list.get(1)).y) sprite.setPlaneMov(plnNo, 0, -CELL); }
―――――――― ■天智天皇 ―――――――― 秋の田のかりほの庵の苫をあらみ わが衣手は露にぬれつつ ―――――――― ■持統天皇 ―――――――― 春すぎて夏来にけらし白妙の 衣ほすてふ天の香具山 〜〜〜〜〜〜〜〜〜〜 上記のテキストファイルを読み込み、ファイル名を天智天皇.txt、持統天皇.txt…… として中に歌の入ったファイルを作成せよ。 ファイル名が同じ場合はファイル名の最後に_01、_02と番号を振る。 よろしくです。
617 :
デフォルトの名無しさん :04/12/05 18:07:54
>>614 int idx = 0, minleng = Integer.MAX_VALUE;
for (int i = 0; i < ansList.size(); i++) {
if (((List)ansList.get(i)).size() < minleng) {
idx = i;
}
}
List pathList = (List) ansList.get(idx);
で、最短経路のリストpathListが出ます。
618 :
デフォルトの名無しさん :04/12/05 18:18:08
>>614 goPathは、
まずsetPlaneMovを
Point prevPt;
void setPlaneMov(Point pt) {
if (prevPt != null) {
clearCharacter(prevPt); //ここで前座標のキャラクターイメージを消す
}
drawCharacter(pt); //ここで現座標にキャラクターイメージを書く
prevPt = pt;
}
として、
void goPath(int index) {
Point pt = (Point) pathList.get(index);
setPlaneMove(pt);
}
とした方がいいと思います。(goPathは、各タスクごとに味方キャラ、敵キャラ
と交互に呼び出される)
国士舘大学=創価学会の犯行
http://www.sankei.co.jp/news/041201/sha076.htm 濱野が人気のない公園に呼び出す(「町田を歩けなくしてやる」と脅迫して呼び出す)
↓
濱野が少女をレイプ(待ち伏せしてた仲間(笹川)と一緒に集団レイプの可能性も?)
↓
放心状態で抵抗不能の女の子を、濱野と笹川が(車で?)笹川の6畳1間のマンションへ運ぶ
↓
携帯メールを大量に送信し仲間を呼ぶ。
↓
実際にマンションに集合したのは20人。濱野ら到着の前に既に7、8人が待ち構える。
↓
見張りをつけて20人で集団レイプ(実際に強姦したのは15人。5人は見物)
↓
当然4人目で失神するも、ローションをつけて続ける(この辺りも常習性をにおわせる)
↓
その強姦の様子を携帯で撮影。画像が残る。
↓
妊娠or膣に大きな裂傷。
↓
PTSDのために、吐き気や眩暈、過呼吸などで苦しむ。登校拒否。
↓
不審に思った母親が事情を聞く。警察へ通報
620 :
M.B. :04/12/05 20:49:21
>>616 つまり仕様としては、
1)■で始まる行はファイル名
2)タブ、半角空白のみからなる行は空行を含めて無視
3)二文字以上の同一文字からなる行も無視
4)「■で始まる行」から、次の「■で始まる行」または
ファイル終端までがデータ。最初の「■で始まる行」までの
データは無視。
でいいのけ?
perlでやれ
>>620 1)奇数番目に現れる「――――――――」の次の行がファイル名
2)空行は無視
3)偶数番目に現れる「――――――――」の次の行から空行まで
(またはファイルの終わりまで)がデータ
でおながいします。
623 :
M.B. :04/12/05 21:09:37
> ・ウゼェ問題設定と屑コードの穴埋め問題は徹底糾弾
> 出題者は謝罪しる
>>622 仕様がうざいからヤダ。
「――――――――」の後に空白が入ったり、
'―' の個数が変わったり、
'―' の代わりに別の文字を使っただけで使い物にならなくなるような
再利用性の低いプログラムは書きとうない。
624 :
M.B. :04/12/05 21:19:20
まったく実用的価値のなさそうな Hello World だって、 C で書けばちょっと直しただけで CGI のプログラムになるし、 (Java だと java.exe に渡す引数だとか環境変数だとかの関係で うまくいかない)演習の定番である detab にしろ entab にしろ cat にしろ、 ときどき思い出したように必要になる場面がある。 出題者は「実際に使える」ことに配慮して出題してほしいあるぞ。
625 :
☆その1 :04/12/05 21:56:19
是非力を貸してください。 以下のプログラムを実行して、マイクから自分の声を吹き込むとwavファイルが生成されます。 このプログラムを加工して、出力した声が改変して(長くとか短くとかなんでもいいんですけど) 保存されるようにしないといけないのですが、さっぱりわかりません。 よろしくおねがいします。 import java.io.*; import javax.sound.sampled.*; public class Capture{ Capture capture = new Capture(); AudioInputStream audioInputStream; AudioFormat format; static String fileName = "untitled"; File file; String errStr; int frequency = 16000; int bytesInFrameShift = 320; public Capture() { AudioFormat.Encoding encoding = AudioFormat.Encoding.PCM_SIGNED; String signedString = "signed"; int sampleSize = 8; boolean bigEndian = false; int channels = 1;
626 :
☆その2 :04/12/05 21:58:53
format = new AudioFormat(encoding, frequency, sampleSize, channels, (sampleSize/8)*channels, frequency, bigEndian); capture.start(); } public void open() { } public void close() { } class Capture implements Runnable { TargetDataLine line; Thread thread; public void start() { errStr = null; thread = new Thread(this); thread.setName("Capture"); thread.start(); } public void stop() { thread = null; }
627 :
☆その3 :04/12/05 21:59:24
private void shutDown(String message) { if ((errStr = message) != null && thread != null) { thread = null; System.err.println(errStr); } } public void run() { DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); if (!AudioSystem.isLineSupported(info)) { shutDown("Line matching " + info + " not supported."); return; } try { line = (TargetDataLine) AudioSystem.getLine(info); line.open(format, line.getBufferSize()); } catch (LineUnavailableException ex) { shutDown("Unable to open the line: " + ex); return; } catch (SecurityException ex) { shutDown(ex.toString()); return; } catch (Exception ex) { shutDown(ex.toString()); return; }
628 :
☆その4 :04/12/05 22:00:10
ByteArrayOutputStream out = new ByteArrayOutputStream(); int frameSizeInBytes = format.getFrameSize(); byte[] data = new byte[bytesInFrameShift]; int numBytesRead; int i = 0; line.start(); try{ while (thread != null) { if((numBytesRead = line.read(data, 0, bytesInFrameShift)) == -1) { break; } if(i >= 5*frequency*1/bytesInFrameShift){ break; } out.write(data, 0, numBytesRead); System.out.print("*"); i++; }
629 :
☆その5 :04/12/05 22:00:38
file = new File("test.wav"); out.flush(); out.close(); byte audioBytes[] = out.toByteArray(); ByteArrayInputStream bais = new ByteArrayInputStream(audioBytes); audioInputStream = new AudioInputStream(bais, format, audioBytes.length / frameSizeInBytes); if (AudioSystem.write(audioInputStream, AudioFileFormat.Type.WAVE, file) == -1) { throw new IOException("Problems writing to file"); } }catch(FileNotFoundException e){ System.err.println("File doesn't exist."); }catch(IOException e){ System.err.println("IO error occured."); } line.stop(); line.close(); line = null; } } public static void main(String s[]) { Capture Capture = new Capture(); } } 長くてごめんなさい。。。
何を聞きたいのかがわかりません
631 :
敵はロボット :04/12/05 23:23:41
レス遅れてすいません。 上記を参考に以下のように修正しました。 Point prevPt; void setPlaneMov(Point pt) { if (prevPt != null) { clearCharacter(prevPt); /*ここで前座標のキャラクターイメージを消す*/ } drawCharacter(pt); /*ここで現座標にキャラクターイメージを書く*/ prevPt = pt; } void clearCharacter(Point pt){ sprite.setPlaneView(plnNo, false); //問答無用で消える。 } void drawCharacter(Point pt){ int u = pt.x * CELL; int t = pt.y * CELL; sprite.setPlanePos(plnNo, u, t);//(u,t)の位置に書き込む。 }
632 :
敵はロボット :04/12/05 23:24:15
void goPath(int index) { int idx = 0, minleng = Integer.MAX_VALUE; for (int i = 0; i < ansList.size(); i++) { if (((List)ansList.get(i)).size() < minleng) { idx = i; } } List pathList = (List) ansList.get(idx); Point pt = (Point) pathList.get(index); setPlaneMov(pt); }
633 :
敵はロボット :04/12/05 23:24:50
これでもやっぱりgoPath()の存在のせいで全員動きません。 だから一度基本的なところから質問させてください。 敵が(2,2)からプレーヤーがいる(5,5)に行くとき、 List pathList には List pathList = [(2,2),(2,3),(3,3),(4,3),(4,4),(4,5),(5,5)] という風に入るんですよね? だから敵の一歩目は、 x座標が、(Point)pathList.get(1)).x y座標が、(Point)pathList.get(1)).y これで間違いないですか? 間違いないのなら、最初のgoPath()でも問題ないと思ってしまうのですが、 誰も動けなくなる理由が解らないです。動けよー。
634 :
敵はロボット1 :04/12/05 23:27:46
import java.util.*; import javax.swing.*; import java.awt.image.*; import java.awt.*; import java.util.List; import java.awt.event.*; public class Enemy3 extends GameObject { static class Wall { boolean north = true, south = true, west = true, east = true, mark= false; } public Enemy3(int plnNo, Sprite sprite, Queue keyQ, int x, int y, GameObjects gos, int targetPlnNo) { super(plnNo, sprite, keyQ, x, y, gos, targetPlnNo); attribute = ENEMY; sprite.setPlaneGrp(plnNo, 0, 4); sprite.setPlanePos(plnNo, x, y); }
635 :
敵はロボット2 :04/12/05 23:28:18
static Wall[][] wall = new Wall[16][16]; static List ansList = new ArrayList(); static final int NORTH = 0, SOUTH = 1, WEST = 2, EAST = 3, CELL = 20, HCELL = 10; int ox, oy, ex, ey; public void move() { ox = sprite.getPlanePosX(gos.ownPlnNo) / CELL; oy = sprite.getPlanePosY(gos.ownPlnNo) / CELL; ex = sprite.getPlanePosX(gos.ePlnNo) / CELL; ey = sprite.getPlanePosY(gos.ePlnNo) / CELL; for (int i = 0; i < wall.length; ++i) { for (int k = 0; k < wall.length; ++k) { wall[i][k] = new Wall(); } } setwall(); ansList.clear(); searchPath(ex, ey, ox, oy, new ArrayList()); goPath(1); sprite.setPlaneView(plnNo, true); }
636 :
敵はロボット3 :04/12/05 23:31:37
static void searchPath(int x, int y, int p, int q, List pathList) { Point point = new Point(x, y); if(pathList.contains(point)) return; pathList.add(point); if(x == p && y == q) { ansList.add(pathList); return; } for(int i = 0; i < 4; ++i) { switch (i) { case NORTH: if(!wall[x][y].north) searchPath(x, y - 1, p, q, new ArrayList(pathList)); break; case SOUTH: if(!wall[x][y].south) searchPath(x, y + 1, p, q, new ArrayList(pathList)); break; case WEST: if(!wall[x][y].west) searchPath(x - 1, y, p, q, new ArrayList(pathList)); break; case EAST: if(!wall[x][y].east) searchPath(x + 1, y, p, q, new ArrayList(pathList)); break; } } }
637 :
敵はロボット4 :04/12/05 23:32:22
static void setwall(){ Field1 fie = new Field1(); int field[][] = new int[16][16]; int stage = 1; field = fie.stage(stage); /*1=レンガ、2=石、3=ハシゴ*/ for(int x=1; x<15; x++){ for(int y=1; y<15; y++){ if(field[x][y] != 2){ wall[x][y].north = true; } if(field[x][y + 1] == 0 || field[x][y] == 1){ wall[x][y].south = true; } if((field[x - 1][y] == 0 || field[x - 1][y] == 1) || (field[x][y + 1] != 0 || field[x][y + 1] != 1 || field[x][y + 1] != 2 || field[x][y] != 2)){ wall[x][y].west = true; } if((field[x + 1][y] == 0 || field[x + 1][y] == 1) || (field[x][y + 1] != 0 || field[x][y + 1] != 1 || field[x][y + 1] != 2 || field[x][y] != 2)){ wall[x][y].east = true; } } } }
638 :
敵はロボット5 :04/12/05 23:33:44
Point prevPt; void setPlaneMov(Point pt) { if (prevPt != null) { clearCharacter(prevPt); /*ここで前座標のキャラクターイメージを消す*/ } drawCharacter(pt); /*ここで現座標にキャラクターイメージを書く*/ prevPt = pt; } void goPath(int index) { int idx = 0, minleng = Integer.MAX_VALUE; for (int i = 0; i < ansList.size(); i++) { if (((List)ansList.get(i)).size() < minleng) { idx = i; } } List pathList = (List) ansList.get(idx); Point pt = (Point) pathList.get(index); setPlaneMov(pt); } void clearCharacter(Point pt){ sprite.setPlaneView(plnNo, false); } void drawCharacter(Point pt){ int u = pt.x * CELL; int t = pt.y * CELL; sprite.setPlanePos(plnNo, u, t); } }
639 :
敵はロボット5 :04/12/05 23:42:26
現時点のEnemy3.javaです…
641 :
527 :04/12/06 00:52:27
>>M.B. 様 すいません、問題文をそのままよく考えもせずに書いてしまいました。 考察うんぬんはもちろん自分でやります。ツッコミサンクスです。 >>古代帝國富士皇朝総帥・伯壬旭様 これはそれぞれ SortableDataに追加すればいいんでしょうか? そのまま追加するとエラーが出たので、頭にpublicをつけたのですが結果に反映 されてるのかいまいちわかりませんでした。
642 :
デフォルトの名無しさん :04/12/06 01:38:51
質問です。。 ---a.txt--- あ い う ---------- があったとき、4行目から新しく書き込みする ためにはどうしたらよいでしょうか? どなたかサンプルプログラムを書いていただけるとうれしいです。
風呂釜を綺麗にしたいときにはジャバ、と聞いたことがあるのですが いっこうに綺麗になりません。なんでですか。
>>644 今時ジャバを使うような風呂釜使ってるおまえさんちが悪い。
さっさと釜ごと取り替えろ。
課題5で作成した住所録管理システムのユーザインタフェースに機能を追加して、個人データの追加や削除の操作ができるようにしなさい。ただし、機能の実現にあたっては、プログラムが以下の構造を持つように注意しなさい。なお、デモプログラムが回答例からアクセスできる。 (1) クラスAddressの定義 このプログラムは、氏名と住所、電話番号が記録されている個人データを管理する。住所録リスト中の個人データは次のクラスAddressで定義する。 class Address { private String name; /* 氏名 */ private String address; /* 住所 */ private String phone; /* 電話番号 */ public Address(String name, String address, String phone) { ... } /* コンストラクタ */ public int setName(String name) { ... } /* 氏名を変更 */ public int setAddress(String address) { ...} /* 住所を変更 */ public int setPhone(String phone) { ... } /* 電話番号を変更 */ public String getName() { ... } /* 氏名を取得 */ public String getAddress() { ... } /* 住所を取得 */ public String getPhone() { ... } /* 電話番号を取得 */ } Addressの各メソッドは次に示す値を返す。 setName 0 正常終了したとき setAddress 0 正常終了したとき setPhone 0 正常終了したとき -1 電話番号に数字とハイフン以外を使用したとき getName 住所録中の名前 getAddress 住所録中の住所 getPhone 住所録中の電話番号
2) クラスAddressBookの構造 AddressBookは、住所録のリストをもつ。住所録リストは、各個人データのHashtable(ハッシュテーブル)として定義されている(HashtableのAPIについてはドキュメントを参照すること)。AddressBookは、次のクラスで表される。ただし、privateなメソッドは追加しても良い。 import java.util.Hashtable; class AddressBook { Hashtable book; /* 住所録 */ public AddressBook() { ... } /* 住所録を初期化し、空の住所録を作る */ public int insert(String name, String address, String phone) { ... } /* 個人データの登録 */ public int remove(String name) { ... } /* 個人データの削除 */ public int changeAddress(String oldname, String newname, String newaddress, String newphone) { ... } /* 個人データを変更 */ public Address getAddress(String name) { ... } /* nameで指定された個人データを返す */ public Address[] getAddress() { ... } /* 全個人データの一覧を返す */ } AddressBookの各メソッドは次に示す値を返す。 insert 0 正常終了したとき -1 電話番号で数字とハイフン以外を使用した場合とき -2 住所録リストにある氏名で再び個人データを登録したとき remove 0 正常終了したとき -3 住所録リストにない氏名が指定されたとき changeAddress 0 正常終了したとき -1 電話番号に数字とハイフン以外を使用した場合とき -2 住所録リストにある氏名で新しい個人データを登録したとき -3 住所録リストにない氏名が指定されたとき getAddress(String name) null 住所録リストにない氏名が指定されたとき null以外 nameで指定された個人データ getAddress() null 住所録が空の時 null以外 住所録にある全ての個人データの配列
648 :
デフォルトの名無しさん :04/12/06 19:14:29
その 課題5で作成した住所録管理システムのユーザインタフェース とは何なのか・・・
つーか腐った仕様だな。 アクセサメソッドのエラーを整数で返すからコンストラクタで使うと握りつぶされる。 どうせなら例外を投げるようにしろっての。
lim_[x→∞]{log_{2} (x^2+ax+b)-2log_{2} (ax+b)}=-2 aの値を求めるプログラムを作成しなさい。 なお、a、bは0<a,0<b<1を満たす定数とする。 またaの値を使って lim_[x→∞]{log_{2} {(x^2+ax+b)-(ax/2+b)} /log_{2} (x) の極限値を求めるプログラムを作成せよ。 よろしくおねがいします。
>649 ありがとうございます。参考にさせてもらいますねん
>649 ありがとうございます。参考にさせてもらいますねん
655 :
デフォルトの名無しさん :04/12/07 01:29:27
import java.applet.Applet; import java.awt.*; public class Kadai9_1 extends Applet implements Runnable { final static double XMIN = -5.0, XMAX=5.0, YMIN=-5.0, YMAX=5.0; int transX(double x) { return (int)((x-XMIN)/(XMAX - XMIN)*getSize().width); } int transY(double y) { return (int)((YMAX-y)/(YMAX - YMIN)*getSize().height); } double f1(double t, double vx, double x, double vy, double y) { return vx; } double f2(double t, double vx, double x, double vy, double y) { return -G*M*x/Math.pow(x*x+y*y,3/2); } double f3(double t, double vx, double x, double vy, double y) { return vy; } double f4(double t, double vx, double x, double vy, double y) { return -G*M*y/Math.pow(x*x+y*y,3/2); } Thread th = null; double G=1, M=1; double vx = 50, x = 5, vy = 50, y = 5;
656 :
デフォルトの名無しさん :04/12/07 01:30:50
public void init(){} public void start(){ if(th == null){ th = new Thread(this); th.start(); } } public void stop(){ if (th != null) { th.stop(); th = null; } } public void run() { while (true) { double t; double T = 1.0; double N = 100; double dt = T/N; double k11,k12,k13,k14,k21,k22,k23,k24,k31,k32,k33,k34,k41,k42,k43,k44;
657 :
デフォルトの名無しさん :04/12/07 01:31:24
for (int j = 0;j < N; j++){ t = j * dt; k11 = f1(t,vx,x,vy,y); k12 = f2(t,vx,x,vy,y); k13 = f3(t,vx,x,vy,y); k14 = f4(t,vx,x,vy,y); k21 = f1(t+dt/2.0, vx+dt/2.0*k11, x+dt/2.0*k12, vy+dt/2.0*k13, y+dt/2.0*k14); k22 = f2(t+dt/2.0, vx+dt/2.0*k11, x+dt/2.0*k12, vy+dt/2.0*k13, y+dt/2.0*k14); k23 = f3(t+dt/2.0, vx+dt/2.0*k11, x+dt/2.0*k12, vy+dt/2.0*k13, y+dt/2.0*k14); k24 = f4(t+dt/2.0, vx+dt/2.0*k11, x+dt/2.0*k12, vy+dt/2.0*k13, y+dt/2.0*k14); k31 = f1(t+dt/2.0, vx+dt/2.0*k21, x+dt/2.0*k22, vy+dt/2.0*k23, y+dt/2.0*k24); k32 = f2(t+dt/2.0, vx+dt/2.0*k21, x+dt/2.0*k22, vy+dt/2.0*k23, y+dt/2.0*k24); k33 = f3(t+dt/2.0, vx+dt/2.0*k21, x+dt/2.0*k22, vy+dt/2.0*k23, y+dt/2.0*k24); k34 = f4(t+dt/2.0, vx+dt/2.0*k21, x+dt/2.0*k22, vy+dt/2.0*k23, y+dt/2.0*k24); k41 = f1(t+dt, vx+dt*k31, x+dt*k32, vy+dt*k33, y+dt*k34); k42 = f2(t+dt, vx+dt*k31, x+dt*k32, vy+dt*k33, y+dt*k34); k43 = f3(t+dt, vx+dt*k31, x+dt*k32, vy+dt*k33, y+dt*k34); k44 = f4(t+dt, vx+dt*k31, x+dt*k32, vy+dt*k33, y+dt*k34); vx = vx+dt/6.0*(k11+2.0*k21+2.0*k31+k41); x = x+dt/6.0*(k12+2.0*k22+2.0*k32+k42); vy = vy+dt/6.0*(k13+2.0*k23+2.0*k33+k43); y = y+dt/6.0*(k14+2.0*k24+2.0*k34+k44); repaint();
658 :
デフォルトの名無しさん :04/12/07 01:32:34
try { th.sleep(10); } catch (InterruptedException e) {} } } } public void paint(Graphics g) { g.drawString("第6回課題 T000000 龍谷 太郎", getSize().width - getFont().getSize()*15, getFont().getSize()); g.fillOval(transX(x), transY(y), 10, 10); } }
659 :
デフォルトの名無しさん :04/12/07 01:38:31
660 :
571 :04/12/07 02:20:39
古代帝國富士皇朝総帥・伯壬旭様 名前の読み方がわかりませんが、 5分前に提出できました。 ありがとうございます。 10人くらい救われました。 こんな短いプログラムで最短経路が求まってしまうのに驚きです。 今はレポート書きと改良をやってます。 都市の数が10個くらいの時にもっと高速に計算する方法ってあるんでしょうか?
>>660 > 名前の読み方がわかりませんが、
ワラタ
俺も分からんけど。
そういう時は神と呼ぶのが簡単です。
665 :
デフォルトの名無しさん :04/12/07 09:54:59
以下のクラスを見て下さい public class Text extends Contents{ public Text(int i){ } public Text(int i, int j){ } } このクラスをインスタンス化するのに適切な記述を全て選んでください。 Text t = new Text(); Text t = new Text(1); Text t = new Text(1,2); Text t = new Text(1,2,3); Text t = (new Contents()).new Text(1); お願いします
666 :
デフォルトの名無しさん :04/12/07 10:45:58
以下のクラスを見て下さい public class Outer{ public int a = 1; private int b = 2; public void method(final int c){ int d = 3; class Inner{ private void innerMethod(int e){ } } } } innerMethodの内部において参照可能な変数を全て選択してください a b c d e これもお願いします
答えだけ教えてもらってどうなるというのか
668 :
デフォルトの名無しさん :04/12/07 14:44:08
じゃあ何故そうなるのか? も踏まえてお願いします
>>665 定義されているコンストラクタならどれでも呼べるし、
定義されていないなら呼べるはずがない。
Text t = (new Contents()).new Text(1);はまったく意味不明。
よって答えは(ry
>>666 内側のスコープからは外側のスコープの変数は全部丸見え。
if ブロックだろうと内部クラスだろうと。
よって答えは(ry
テキストフィールドからハッシュテーブルにボタンを押すたびに読み込んで、 そのハッシュテーブルの内容をテキストエリアに一覧として表示する、 方法を教えてください
671 :
デフォルトの名無しさん :04/12/07 18:28:47
672 :
デフォルトの名無しさん :04/12/07 18:32:13
>>659 の課題9の事?
それなら確か逆コンパイルしたソースで完全解答が出たはずだけど・・・
そのソースをちょっと改造すれば大丈夫なのでは?
673 :
敵はロボット :04/12/07 20:07:46
なんとかなりました。 ありがとうございます。 でも別件でまた来るかもしれないっす。
>>670 ハッシュテーブルのキーはどうするの?
あとAWTでやるのかSwingでやるのかも書いてくれ
675 :
デフォルトの名無しさん :04/12/07 20:31:19
>>672 それじゃだめなんです。ルンゲクッタほうをつかわないと。
課題提出のときに教授の質問に答えないとだめなんです。
どなたかお願いします。
676 :
デフォルトの名無しさん :04/12/07 20:36:35
たとえば 文字列に「あいうえおあお」 とあった場合に、それぞれの文字列を一文字ずつカウントさせて あ=2 い=1 う=1 え=1 お=2 hashmapなど使おうとしたのですが なかなかうまくいきませんので教えてください。
AWTです。 ハッシュテーブルのキーとは何のことでしょう・・・ すいません初心者なもので;
678 :
M.B. :04/12/07 21:16:45
>> 課題提出のときに教授の質問に答えないとだめなんです。 いや、だからそれはプログラミングの問題ではないのだとorz
679 :
M.B. :04/12/07 21:32:52
>>676 HashMap のキーは Object なので、
for (int cnt = 0;cnt < str.length();cnt += 1) {
Integer key = new Integer((int)str.charAt(cnt));
// ここでごちゃごちゃ
// Integer だからたぶん add() メソッドかなんか使う
}
かなんかしる。
680 :
デフォルトの名無しさん :04/12/07 21:51:09
681 :
デフォルトの名無しさん :04/12/07 22:07:40
>>679 そこまでいってなくて
HashMapのputで
文字列を一つずつ読み込んでいって
あ→+1
い→+1
…
二回目のあ→+2
というのがよくわかりません
682 :
M.B. :04/12/07 22:10:17
>>681 私はあなたの説明がよくわかりません(´・ω・`)
683 :
ケン :04/12/07 23:59:09
UNIXで作成した*.tar.gzファイルの展開を行いたいのですが gzipの解凍はできたのですが、tarファイルの展開ができません。 と言いますかやり方がわかりません。 いろいろ探したのですが見つかりませんでした。 JAVA初心者なので探し方も悪いのだと思いますが なにとどご教授お願いします。
>>681 「二回目」が分からないのであれば、たぶんこういうこと
例えば "あ" を読み込んだら、
"あ" のキーで get して返ってきた値に 1 を足して
putし直す。
null が返ってきたら、1 を入れる。
Integerみたく作ったら変更できないオブジェクトでは
↑みたいにするしかないけど、
こんなクラスつくって
class Counter {
private int val;
public Counter() {
val = 1;
}
public void inc() {
val += 1;
}
public int get() {
return val;
}
}
もし "あ" のキーでnullじゃないのが返ってきたら、
返ってきた値を Counter 型にキャストして inc を呼ぶ。putとかはしない。
返ってこなかったら、new Counter() を putする。
個人的にはこっちがおすすめ。
というわけで、
>>679 が省略した部分を書いてみた
685 :
デフォルトの名無しさん :04/12/08 00:38:41
>>684 なるほど
hashmapだけでやろうとしてました
考えたらクラスをもう一つ作った方が早いですね
ありがとうございます
>>683 それがJavaの質問だと思っているなら氏んでね。
違うとわかってて質問しているなら消えてね。
>>686 javaでtarばらすプログラム書きたいのかも知れんぞ。
>>680 俺はやってみたいが、残念なことに高校言ってないのと同じだからなぁ
二階微分方程式だっけ? 計算の仕方とかわかれば作ってみたいんだが
逆コンパイルで一応見てみるができれば数学の参考になるとこ教えて下さい
690 :
ケン :04/12/08 01:46:06
言葉足らずですみません。 683は JAVAのプログラム上で展開したいんです。
692 :
ケン :04/12/08 02:05:15
>>688 ありがとうございました。
参考にさせていただきます。
>>691 知ってはいたんですが、javaの掲示板てことで
私が言葉足らずになってしまったために
687様のようにある程度理解できない人がいたみたいなので
念のため書かせていただきました。
691様ご丁寧にありがとうございました。
俺マカーだけど、
>>688 の表の一番下のコメントにワロタ
695 :
デフォルトの名無しさん :04/12/08 20:18:34
age
696 :
デフォルトの名無しさん :04/12/08 21:34:48
しつもーんです 文字列が String[] a={"あい","うえ","お","かか","きき","こ"} String[] b={"あい","け","お","こ","ちち","た"} と二つあるとき,bに対してaの文字列を引いた文字列 だけを取得するためのサンプルプログラムをおせえてちょ−だい この場合は、結果的に{"け","ちち","た"}のみになりまちょ 下にサンプルを書きます。しかしエラーが発生してしまいます。 Arrayの所です。どなたか正しく直してくださいまし・・・ public class www extends DefaultHandler { public static void main(String[] argv) { String[] a={"あ"}; String[] b={"あ","い","さ","し","す","か","そ"}; ArrayList k = new ArrayList(Arrays.asList(b)); k.removeAll(Arrays.asList(a)); String[] c = (String[])k.toarray(new String[k.size()]); for(int i=0;i<c.length;i++){ System.out.println("key:"+c[i]);} } } 後は宿題掲示板の方で聴いて見ます。。ありがとです。
面白いギャグだな 教えてもらったプログラムすらまともに打ち込めないなんて
698 :
M.B. :04/12/08 21:44:35
>>696 "こ" - "かか" がゼロになる理屈を教えてくれ。
正直、漏れにはさっぱりわからん。
たぶん漏れの頭が悪いせいなのだと思うが。
699 :
デフォルトの名無しさん :04/12/08 22:30:01
>>698 696 ではないが
bを文字列の集合と考えて
aの文字列の集合との差を求めたいんだと思うよ
700 :
M.B. :04/12/08 22:49:37
>>699 つまり世間では「差集合」とか「差分マージ」とかいうアレのことか。
そういう場合には通常ソートしてから処理するので、
配列や ArrayList ではなくて、
TreeMap かなんかで出題していただきたかった。
701 :
696 :04/12/08 23:35:29
>>697 すみません。全然解らなくて
とりあえず教えていただいてから(動いてから)
勉強しようかと思っていまして・・
どなたかご存知でしたらお力を・・・
702 :
デフォルトの名無しさん :04/12/09 01:00:26
すみません、今日の午後12時までにこの課題を提出しないといけないのですが 難しすぎて全然わからないんです。・゚・(ノД`)・゚・。 うゎぁ〜ん 助けてください。お願いしますo_ _)o ペコ 電話帳を作成しなさい。 電話帳に登録される情報は、 名前、登録、年齢、電話番号とする。 プログラムを起動すると、メニューが表示される。 メニューには「0:表示」、「1:登録」、「2:削除」、「9:終了」 がある。メニューは数字を入力することにより選択できる。 「0:表示」を選択すると、プログラムは登録されている情報を 一覧で表示する。このとき年齢の若い順に 情報が表示されるようにしなさい。 「1:登録」を選択すると、プログラムは情報の入力を促すメッセージを表示する。 情報は、名前、年齢、電話番号を一項目ずつ入力する。 「2:削除」を選択すると、プログラムは登録されている情報を一覧で表示して、 どの人の情報を削除するのか問うメッセージを表示する。 表示の順番は問わないが、各人毎にid番号をつけて表示すること。 ユーザはこのid番号を入力して削除する情報を指定する。 「9:終了」を選択するとプログラムは終了する。 ただし、プログラムを終了しても登録されている情報は保存されていて、 次に起動した時も同じ情報が表示されること。(保存はテキストメモに保存しておく) ☆続く☆ 次に仕様を書きます
703 :
デフォルトの名無しさん :04/12/09 01:01:30
☆続きです☆ 仕様1 プログラムの起動は以下のようにする java TelDirectory 仕様2 このプログラムの使い方は次のようにする 1,ユーザーがプログラムを起動する。 2,プログラムはメニューを表示する。 3,ユーザーはメニューを選択し、番号を入力する。 4,プログラムはメニューに応じた情報を表示し、ユーザに操作を促す。 5,ユーザーはメニューに応じた情報を入力する 6,プログラムメニューに応じて情報を操作し、メニュー画面に戻る。 仕様3 以下のエラーチェック・対策は必須とする。 ・メニュー選択時に存在しないメニューを選択した場合、メッセージを表示して メニュー画面に戻る ・「1:登録」時、名前、年齢、電話番号を入力しなかった場合、 もしくは年齢に数字以外の値を入力した場合、メッセージを表示して再度入力させる ・「2:削除」時、存在しないidを選択した場合、メッセージを表示して再度入力させる ・全ての操作において、何らかの理由で保存してあるデータの取得や データの保存に失敗した場合はメッセージを表示して、メニュー画面に戻る。 仕様4 ソースコードには他人が読んで理解できるように わかりやすいコメントをつけること。 仕様5 ソースコードはクラスごとにファイルを作成する。 一つのファイルに複数のクラスを記述してはいけない、 また、ファイル名とクラス名を同じにする事
>仕様4 ソースコードには他人が読んで理解できるように > わかりやすいコメントをつけること。
705 :
>>703 その1 :04/12/09 10:16:46
import java.io.*; import java.text.*; import java.util.*; public class TelDirectory { static class Member implements Comparable { int id; String name; int age; String tel; Member(String name, int age, String tel) throws Exception { if (name.trim().length() == 0 || tel.trim().length() == 0) throw new Exception(); this.id = data.size(); this.name = name.trim(); this.age = age; this.tel = tel.trim(); } Member(String id, String name, String age, String tel) throws Exception { this.id = Integer.parseInt(id); this.name = name; this.age = Integer.parseInt(age); this.tel = tel; } public int compareTo(Object o) { if (age < ((Member)o).age) return -1; else if (age > ((Member)o).age) return +1; else return 0; } public String toString() { return (new DecimalFormat("0000")).format(id) + ": " + name + " " + age + "歳 Tel" + tel; } public String toFile() { return (new DecimalFormat("0000")).format(id) + ": " + name + " " + age + "歳 Tel" + tel + "\r\n"; } } static Map data = new TreeMap(); static final String filename = "テキストメモ.txt";
706 :
>>703 その2 :04/12/09 10:18:10
public static void main(String[] args) { load(); boolean run = true; while (run) { run = menu(); } } static void out(String text, boolean feed) { System.out.print(text); if (feed) { System.out.println(); } } static String in(String text) throws IOException { System.out.print(text); return new BufferedReader(new InputStreamReader(System.in)).readLine(); } static boolean menu() { out("\nメニュー", true); out("0:表示 1:登録 2:削除 9:終了", true); int no; try { String line = in("入力=>"); no = Integer.parseInt(line); } catch (Exception ex) { out("メニュー入力が不正", true); return true; } switch (no) { case 0: show(); break; case 1: entry(); break; case 2: delete(); break; case 9: out("終了します", true); return false; default: out("メニュー入力が不正", true); } return true; }
707 :
>>703 その3 :04/12/09 10:18:41
static void show() { out("\n名簿表", true); List list = new ArrayList(data.values()); Collections.sort(list); for (int i = 0; i < list.size(); i++) { out(list.get(i).toString(), true); } out("", true); } static void entry() { while (true) { try { out("\n登録(enterで抜ける)", true); String name = in("名前の入力=>"); if (name.length() == 0) break; String aget = in("年齢の入力=>"); if (aget.length() == 0) break; int age = Integer.parseInt(aget); String tel = in("電話番号の入力=>"); if (tel.length() == 0) break; Member mem = new Member(name, age, tel); data.put(new Integer(mem.id), mem); out(mem.toString() + "を登録", true); save(); break; } catch (Exception e) { out("入力が不正", true); continue; } } out("", true); }
708 :
>>703 その4 :04/12/09 10:19:54
static void delete() { while (true) { try { out("\n削除(enterで抜ける)", true); String idt = in("削除IDの入力=>"); if (idt.length() == 0) break; int id = Integer.parseInt(idt); Object flag = data.remove(new Integer(id)); if (flag != null) { out(flag.toString() + "を削除", true); save(); } else { out("そのIDは存在しない", true); continue; } break; } catch (Exception e) { out("入力が不正", true); continue; } } out("", true); } static void save() { try { FileWriter w = new FileWriter(filename); Iterator it = data.values().iterator(); while (it.hasNext()) { w.write(((Member)it.next()).toFile()); } w.close(); } catch (IOException e) { out("ファイル書き込みエラー発生", true); } }
709 :
>>703 その5 :04/12/09 10:20:24
static void load() { try { if (!(new File(filename).exists())) { return; } FileReader r = new FileReader(filename); CharArrayWriter cw = new CharArrayWriter(); char[] buf = new char[1000]; int size = 0; while ((size = r.read(buf)) != -1) { cw.write(buf, 0, size); } r.close(); StringTokenizer st = new StringTokenizer(new String(cw.toCharArray())); while (st.hasMoreTokens()) { String token = st.nextToken(); int idx = token.indexOf(":"); String id = token.substring(0, idx); String name = st.nextToken(); token = st.nextToken(); idx = token.indexOf("歳"); String age = token.substring(0, idx); String tel = st.nextToken().substring(3); Member mem = new Member(id, name, age, tel); data.put(new Integer(mem.id), mem); } } catch (Exception e) { out("データロードエラー発生", true); } } }
710 :
デフォルトの名無しさん :04/12/09 10:29:25
何度もすみません どうしても解らなくて・・・ 文字列が String[] a={"あい","うえ","お","かか","きき","こ"} String[] b={"あい","け","お","こ","ちち","た"} と二つあるとき,bに対してaの文字列を引いた文字列 だけを取得するためのサンプルプログラムをおせえてちょ−だい この場合は、結果的に{"け","ちち","た"}のみになりまちょ 下にサンプルを書きます。しかしエラーが発生してしまいます。 Arrayの所です。どなたか正しく直してくださいまし・・・ public class www extends DefaultHandler { public static void main(String[] argv) { String[] a={"あ"}; String[] b={"あ","い","さ","し","す","か","そ"}; ArrayList k = new ArrayList(Arrays.asList(b)); k.removeAll(Arrays.asList(a)); String[] c = (String[])k.toarray(new String[k.size()]); for(int i=0;i<c.length;i++){ System.out.println("key:"+c[i]);} } }
>>710 君は心底間抜けなヤツだな。
toarray と toArrayが同じとでも思っているのか?
712 :
古代帝國富士皇帝総帥・伯壬旭 :04/12/09 10:38:35
>>710 public static void main(String[] args) {
String[] a = {"あい","うえ","お","かか","きき","こ"} ;
String[] b = {"あい","け","お","こ","ちち","た"} ;
Set setA = new LinkedHashSet(Arrays.asList(a));
Set setB = new LinkedHashSet(Arrays.asList(b));
setB.removeAll(setA);
Iterator it = setB.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
713 :
古代帝國富士皇朝総帥・伯壬旭 :04/12/09 10:40:46
>>703 全部コピペしてコンパイル。
敷き詰めて書いてるのでフォーマットし直してください。
714 :
デフォルトの名無しさん :04/12/09 11:02:55
>>712 ありがとうございます。
コピペさせていただきました。
しかしやはり
エラーが起こってしまいます。
エラー内容は、
LinkedHashSetのシンボルが解決できない
Arraysのシンボルが解決できない
Iteratorのシンボルが解決できない
などです。もしかしたらすごい単純な所で引っ掛かっているのかもしれませんが
すみませんが宜しくお願いします。
>>714 import java.util.*;
インポートぐらい自分でやれよ。
あなたね、もっともっと基本的なところからやったほうがいいよ。
大体何で
>>710 でDefaultHandler継承してんの?
まったくわかってないでしょ。
716 :
デフォルトの名無しさん :04/12/09 11:27:52
>>715 全く持ってすみません。。
ふがいない私に(TOT)
基本的なところから勉強し直します。
ご指導有難うございます。
この時期にこんなレベルのアホが来るなんて珍しいな。 だいたい4、5月が多いのに。
kusoresu
Java Swing 作成 YMCAのロゴマークをJava Swingアプレットを使って描きなさい。 デキネェヨOTZ...nurupo........
720 :
kamema :04/12/09 14:17:29
メッセージはクライアントプログラムから投げられ、受け取り側でサーバプログラムを立ち上げ、複数のサーバでメッセージをリング状に回すプログラム教えて下さい。 サーバープログラムがクライアントプログラムから受け取ったら他のサーバープログラムに回せません。socketを使ってやっています。サーバプログラムを先に立ち上げ待ち状態にしています。 //実行結果 /*サーバの用意始めます 受信を待ちうけます サーバ呼び出しました サーバ稼動中 読み込んだメッセージはHello World サーバスレッド呼び出し完了 IPとポートを指定する sougou2-2 6666 クライアントスレッド呼び出し完了 OException main java.net.BindException: Address already in use: JVM_Bind -- Press any key to exit (Input "c" to continue) -- */
721 :
kamema :04/12/09 14:24:31
import java.io.*; import java.net*; class revp2p2 { public static void main (String args[]) { try { System.out.println("サーバの用意始めます"); while(true){ ServerSocket ss = new ServerSocket(5555); System.out.println("受信を待ちうけます"); Socket socket = ss.accept();//クライアントから要求を受け取る Server server = new Server (socket); server.start(); System.out.println("サーバスレッド呼び出し完了"); System.out.println("IPとポートを指定する"); BufferedReader d = new BufferedReader(new InputStreamReader(System.in)); String ip = d.readLine(); int port = Integer.parseInt(d.readLine()); socket.close(); Client client = new Client(ip,port); client.start(); System.out.println("クライアントスレッド呼び出し完了"); } } catch(IOException e){ System.out.println("IOException main "+e); } catch(Exception e){ System.out.println("Exception main "+e); } } }
722 :
kamema :04/12/09 14:26:13
class Server extends Thread{ Socket socket; Client client; public Server(Socket socket) { this.socket = socket; } public void start() { System.out.println("サーバ呼び出しました"); try{ //debug System.out.println("サーバ稼動中"); BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream())); String message = in.readLine(); System.out.println("読み込んだメッセージは" + message); socket.close(); in.close(); } catch(Exception e){ System.out.println("Exception "+e); } } }
723 :
kamema :04/12/09 14:27:54
class Client extends Thread { String ip; int port; String message; public Client(String ip, int port) { this.message =message; this.ip =ip; this.port = port; } public void start(String message) { try{ Socket socket = new Socket(ip,port); DataOutputStream out = new DataOutputStream(socket.getOutputStream()); out.writeChars(message); socket.close(); out.close(); } catch(Exception e){ System.out.println("Exception "+ e); } } }
724 :
kamema :04/12/09 14:32:33
以上サーバ側プログラムです。クライアントプログラムはHelloWorldSocketClientからです。よろしくお願いします import java.net.*; import java.io.*; public class HelloWorldSocketClient { public static void main(String[] args){ try{ // ソケットを生成 Socket socket = new Socket("sougou2-2", 5555); // 出力ストリームを取得 PrintWriter out = new PrintWriter(socket.getOutputStream(), true); // 入力ストリームを取得 BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream())); // 「Hello World」をサーバーに送る out.println("Hello World"); // 読み込んだデータを表示 System.out.println(in.readLine()); // 入出力ストリームを閉じる out.close(); in.close(); // ソケットを閉じる socket.close(); } catch(IOException e){ e.printStackTrace(); } }
725 :
デフォルトの名無しさん :04/12/09 15:56:17
全くの初心者です。 明日までにやらなくてはいけないので 何方か力を下さいお願いします。 文字列が String[]a={"あ","い","う","え","お","か","き"} String[]b={"1:あ","1:い","2:う","2:ん","3:た","か","き"} この場合bの @「1:」のみの文字列「1:あ」「1:い」 A「2:」のみの文字列「2:う」「2:ん」 B「3:」のみの文字列「3:た」 C「:」がない文字列「か」「き」 @〜Bは、「:」の右側の文字だけ抽出する @'文字列「あ」「い」 A'文字列「う」「ん」 B'文字列「た」 C文字列「か」「き」 となる。 @'〜B'とCは、それぞれandでaの文字集合とを比較する。 比較した結果、@'〜B'とCの何れか一つでも一致するものがあれば tureとなる。 ・条件 bの文字列集合の「1:」等の数値は、nという数値の場合がある。「n:」(nは整数) ☆比較例として@'とA'を例にしてみる。 @'の場合、「あ」「い」である。aの文字集合の中に「あ」「い」があるので この場合一致していると見なす。 A'の場合、「う」「ん」である。aの文字集合の中に「う」はあるが、「ん」は ないので一致しないと見なす。 このようなプログラムです。どうぞ宜しくお願いします。
726 :
spaz :04/12/09 15:58:58
エイトクイーン問題を解くjavaプログラムを教えてください!!
728 :
デフォルトの名無しさん :04/12/09 16:34:09
バイナリデータから ランダムアクセスで文字列を読み込む方法誰か教えて!!
729 :
デフォルトの名無しさん :04/12/09 17:19:07
すいません680の件なんですが、明日までにできないとかなりまずいんですが、本当にどなたかお願いします。
自分でやればいいじゃない と身も蓋もないことを言ってみる
>>729 m9(^Д^)プギャーーーーー
どんなまずいことがおきたか報告待ってるよw
732 :
デフォルトの名無しさん :04/12/09 18:27:41
>>729 具体的な数式を書けばプログラミング回答率がアップするのだが・・・
課題…難しい…助力頼みます… 問題 ○○○○年、○○月、○曜日(その月の1日の曜日。数化したもの)を入力し、 2次元配列を利用してカレンダーを作成し6行7列の配列で出力せよ。 うるう年は28日とする。 前提として、自分が習った範囲(if do switch、while for 配列)を使って作成しないといけません。 ヒントだけでもお願いします…。
スレ間違えてました…。スレ汚し失礼。
問題の意味がわからん
>>733 は誤爆だろ、Cの宿題スレと間違えたんだと思われ
737 :
725 :04/12/09 23:16:01
725です。 皆さん、宜しくです。。 難しくて・・・
>>725 すごく理解しようという気になれない問題文だ。
739 :
M.B. :04/12/09 23:54:41
>>738 これ言っちゃうと差しさわりがあるように思うが
漏 れ も 禿 死 苦 そ う 思 う
宿題っていうか質問なんですが、ビットをシフトしてマスクかけるときなど、 符号ビットがたたないように、Cではunsigned を使用してましたがJAVAには それがないのでどうすればいいのでしょうか?
741 :
725 :04/12/10 00:17:54
>>738 >>739 すみません。わかりずらかったでしょうか?
やる気を損ねる問題文ですみません・・・
・・・
自分でも色々考えてはいるんです。しかしなかなか難しくて。
@bの配列から「1:」となる文字列のみを抽出し⇒cの配列にいれて
その後にaとcを比較してOKならそのままブレイク
Anoなら「2:」の文字列を抽出して@を繰り返す
B「数値:」(最大値)が無くなったところで終了
C次に:の個数が0である文字列を探す。(つまりもともと数値:がついていないもの)
そしてaと比較・・・
一つでもOKがあれば、trueとなる。
しかしそれをプログラムに反映させようとすると、
難しいです。どなたかお力添えを・・
中途半端に単純化した処理内容を中途半端に書かれるから訳分からん。 課題文そのものを見せてほしい。
とはいえ、なんとか理解できたのでちょっと待ってろ。
744 :
M.B. :04/12/10 01:00:17
>>741 つーか「藻前は何がやりたいんだ」と出題者に問いたい。
745 :
デフォルトの名無しさん :04/12/10 01:07:35
お願いします。 テキストファイルには任意の個数の数値が保存されています。 数値は1行に1つあります。 このファイルを読み込み、配列に置きたいんです。(最終的にはそれを使って計算します) ファイルの読み込み自体教えてもらえなかったので、何をしたらいいのかもわかりません。 使うソフトはeclipse3.0です。
>>745 ごっめーん、おれ Java 書くとき eclipse 使ってないんだよねー
748 :
725 :04/12/10 01:23:43
>>742 了解しました。
問題は、aの文字列集合とbの文字列集合の比較です。
比較の結果真偽を決めます。
またaの文字列集合とbの文字列集合は、固定された集合ではありません。
変更される事も有ります。
下の例は、aの文字列集合とbの文字列集合の例を記述しています。
次に例題を踏まえ説明します。
aの文字列集合には、以下のような文字列が入っています。
String[]a={"あ","い","う","え","お","か","き"}
bの文字列集合には,以下の文字列が入っています。(今は例として下のようになっているが、別の場合もある)
String[]b={"1:あ","1:い","2:う","2:ん","3:た","か","き"}
bの文字列集合には,
「数値:文字列」または「文字列」の2通りが存在します。(数値は、整数の何れか)
「数値:」は、andを示すIDのようなものになっています。
「数値:」がないただの文字列同士もandとなります。
例:bの文字列集合だと、「あ」と「い」がandの一つとなります。「1:」がandのIDとなっている。
つまりbの文字列集合の意味は、以下のようになります。
(「あ」and「い」)or(「う」and「ん」)or「た」or(「か」and「き」)
これとaの文字列集合を比較します。
このときの比較条件は、一つの条件でもクリアしていれば、trueとなります。
この場合aの文字列集合に「あ」and「い」が成立しているのでtureです。
これで如何でしょうか?問題文が解りやすくなったでしょうか?
これにてお願い致します。また問題文について解らないことがあったら仰って下さい。
宜しくお願いします。
>>748 いきなり間違ってたので直した。
main の中に boolean allIndexContained があるのは間違い版。
boolean someIndexContained があるのが訂正版。
>749 ありがとうございました。 いろいろ足りなくてすみませんでした。 もしこの先質問することがあったら気をつけます。
752 :
725 :04/12/10 02:06:18
>>750 ありがとうございます。。
実行してみた結果、ですが
static String[] a = {"cat", "dog", "bird", "fish", "turtle", "sneak"};
static String[] b = {"2:ああ", "2:あs", "1:きd", "fish"};
このように変更して結果を出したらfalseになってしまいました。
この場合「fish」が入っているのでtureになります。
どうやら、すべてのbの文字列集合が一致していないとtureにならない仕組みになっているようです。
754 :
725 :04/12/10 02:17:23
すみません。修正版でやってみました。 そしたら今度は、 static String[] a = {"cat", "dog", "bird", "fish", "turtle", "sneak"}; static String[] b = {"2:ct", "2:dg", "1:brd", "fih", "human"}; 全く一致しているものがないのにtureになってしまったのです。。 やはり難しいのでしょうか・・
>>754 ちょっとは自分でも直してみようって気はないのか?
757 :
725 :04/12/10 02:24:36
>>756 ほんとに有難うございます。。親身になってくださって・・
感謝ですう。。
759 :
725 :04/12/10 02:41:16
>>758 すごいです!!もう完璧です。。
有難うございます。。758さんが作って下さった。プログラムを例に
勉強します。。ありがtぽ(ToT)
すごい人だよ〜ほんとに
760 :
デフォルトの名無しさん :04/12/10 03:22:21
ある指定のフォルダの中の全てのクラスファイル、JSPファイル一覧を JSPなどで画面上に開くたびに最新のファイル名を表示させて そこにリンクをはっつけて 押下するとそれぞれのファイルの処理に飛ばせたいのですが ファイル名をリスト化させるのはなんとか出来るのですが、 それをJSPなどに読み込ませて一覧に出すのができません 教えてください
761 :
デフォルトの名無しさん :04/12/10 09:09:29
762 :
講師 :04/12/10 09:26:02
goodです。
763 :
デフォルトの名無しさん :04/12/10 09:27:45
>>760 jspから、ただファイル名を出力すればいいのでは・・・
あと、それぞれのファイルの処理に飛ばすとは
そのJSPかサーブレットを実行するとの事ですか?
765 :
M.B. :04/12/10 20:30:24
>>760 Tomcat のインストールと JSP の動作確認は成功しとるのか?
JSP が一本動けばあとは一本道のはずだが……
ついでに言っとくと下手に WEB-INF の下のファイルに触ろうとすると、
例外が発生して、いいかげんに作ったプログラムだと
Tomcat ごと落ちるが。どこのファイルに触ろうとしている?
766 :
デフォルトの名無しさん :04/12/10 23:16:22
こんな課題が出ました。 2次方程式y=ax^2+bx+cの解を求めるプログラムを作成せよ。 解は判別式D=b^2-4acを用いて判断し以下のように表示すること。 ・2実根ならば2つの解を表示する ・重根ならば重根であることを示す。説明とともに解を1つ表示する。 ・2虚根であることを表示する。解は不要 D=Math,sqrt(a+b); a+bの結果の平方根を求めDに代入する。 なおa,b,cはDouble型の変数である。 というものなのですが、正直さっぱりです。違う学科の友人にも聞いてみましたが 全然わからんとのことで・・・。 ヒントでもいいのでよろしくお願いします。
767 :
M.B. :04/12/10 23:52:29
>>766 public class P {
public static void main( String [] args ) throws Exception {
double a = 1.0;double b = - 4.0;double c = 3.0;
double D = b * b - 4 * a * c;
do { // 分岐のためのダミー
if (D < 0.0) { // 虚根
System.out.println("虚根。");break;
}
if (D == 0.0) { // 重根
double r = - b / (2.0 * a);
System.out.println("重根: " + r);break;
}
// default
double r = - b / (2.0 * a);
System.out.println(
" " + ((- b + Math.sqrt(D))/ (2.0 * a)) +
", " + ((- b - Math.sqrt(D))/ (2.0 * a)));
} while (false);
}
}
>>766 > ヒントでもいいのでよろしくお願いします。
× Math,sqrt(a+b);
○ Math.sqrt(a+b);
769 :
M.B. :04/12/10 23:55:48
一行変なのが入った。 > // default の次の、 > double r = - b / (2.0 * a); は不要。
a, b, c をユーザに入力させる。 D = b*b - 4*a*c の符号によって場合分け。 D < 0 なら「2虚根です」と表示。 D == 0 なら x = b*b/(2*a) を計算して「重根 x = ...」と表示。 D > 0 なら x1, x2 を解の公式で計算して「2実根 x1 = ... x2 = ...」と表示。 終了。
くっ・・・3人で重婚しようか
772 :
M.B. :04/12/11 00:11:34
> D == 0 なら x = b*b/(2*a) を計算して「重根 x = ...」と表示。 ……だそうだ。知ってたか弟。 ∧_∧ ∧_∧ (´<_` ) 死者を鞭打つことに ( ´_ゝ`) / ⌒i 痛痒を感じないか兄者? / \ | | / / ̄ ̄ ̄ ̄/ | __(__ニつ/ IBM / .| .|____ \/____/ (u ⊃ ヽ(`Д´)ノ ウワァァァン
しかし、CならともかくJavaでも数学問題が多いとはね。 数学なら問題の作り方も簡単だから出してるのだろうが、これは コーディングよりも数学の力だけが要求されるから、プログラミングの 学習に全然なってないと思うのだがね。
774 :
デフォルトの名無しさん :04/12/11 04:10:59
>>767 〜770さん
ありがとうございます。これを見て勉強したいと思います。
全然わからなかったorz
>>772 IBMのノートももうすぐなくなりますね。
ハードディスク部門の売却も意外だったけど、
これからはハードでは儲からない時代なのかな。
776 :
デフォルトの名無しさん :04/12/11 10:49:24
メソッド power は2つのint引数a,bを持ち、aのb乗を戻す。 powerメソッドを定義し、mainではpowerを使って、 2つの数値x,yをキーボードから入力し, xのy乗を表示する プログラムを作れ。 実行例: xxx>java K1 x? 2 y? 3 8 お願いします!
メールを送信するときに、半角76文字で折り返し(改行を入れる)したいのですが、 半角・全角が混ざった文字列で半角76文字分の箇所に改行を入れるには どうしたらいいのでしょうか?
>>777 unicodeではやりにくいようなので一度sjisなりeucなりに変換してからチェックするのがいいかと
779 :
デフォルトの名無しさん :04/12/11 11:33:52
776です。 自力で出来たので大丈夫です。 応援ありがとうございました!
int型の変数を「a,b.c」で宣言する。 aにはIDを代入する。(6桁) 除算演算子と剰余演算子を使い、bにはaの上3桁が、cには下3桁が代入されるようにする。 char型の変数をzとし、IDの下3桁が40以下なら"A"、41以上なら"B"を代入する。 ただし上3桁を確認し、123ではない場合には"B"となるようにする。 char型変数の結果を使って、「あなたはクラス○です」と表示させる。(○はAかB) 更に、char型変数の結果をチェックし、「教室はROOM○です。」(○は1か2)と表示させる。(AはROOM1,BはROOM2) 上の条件でIDが 124010の場合と、1230481の場合の結果を表示させなさい。
class kadai { public static void main(String args[]) { int a,b,c; a = 124010;//ID(6桁)の代入 b = a???;//aの上3桁を表示させる計算 c = a???;//aの下3桁を表示させる計算 //IDの確認 System.out.println("IDは"+a); System.out.println("ID上3桁は"+b); System.out.println("ID下3桁は"+c);
char z; //IDを確認して、zにAかBを代入 if (? ? ?){ z = 'A'; } else { z = 'B'; } //クラス分けの表示 System.out.println("あなたはクラス"+ z +"です。"); //zを確認して、教室を表示 if (? ? ?) { System.out.println("教室はROOM1です。"); } else { System.out.println("教室はROOM2です。"); } } }
下三桁: c = a % 1000; 上三桁(aは三桁以上なのが前提): b = a; while(b >= 1000) b /= 10;
お約束 「JAVAで風呂釜が綺麗になるそうですが」 「JAVAって死亡遊戯に出てきたベァスケボー選手ですよね」
>>784 ありがとうございます!
>>782 の?の部分がわからないのですがどうしたらいいでしょう。
>782の最初の条件式は、IDの下3桁、つまりbが40以下 2つ目の条件式は、zが'A'と等しい ここまで言ってもわからん?
最初の条件式は
>>780 の条件だとcが下3桁だからcが40以下かつbが123
じゃない?
すいません。 プログラムを書いていただけませんか? 図々しいですよね。すいません。
790 :
M.B. :04/12/11 21:29:06
>>789 このスレでは
>>1 にあるように、
> ・ウゼェ問題設定と屑コードの穴埋め問題は徹底糾弾 出題者は謝罪しる
ということになっておる。
> char型の変数をzとし、IDの下3桁が40以下なら"A"、41以上なら"B"を代入する。
とか言うておるが、文字列で比較すると「050」<「40」だったりするのだ。
本来「0-9の文字からなる長さ6の文字列」であるべきものを、
整数に置きかえてから処理しようなどという愚劣な問題を出す香具師が
プログラミングを教えていることに漏れは怒りを感じる。
791 :
M.B. :04/12/11 21:50:42
>>772 > IBMのノートももうすぐなくなりますね。
国産機なので、なんら問題なし
∧_∧
∧_∧ (´<_` ) それより OS/2 を
( ´_ゝ`) / ⌒i 復活させてほしいよな兄者
/ \ | |
/ / ̄ ̄ ̄ ̄/ |
__(__ニつ/日本IBM / .| .|____
\/____/ (u ⊃
792 :
ナナ :04/12/12 04:08:32
JAVAでXMLの要素を追加及び変更のプログラムを作成しようとしているのですが 非常に難しく、どうすればよいのかが解らないのです。。 例えば ---あ.xml---- <a> <b> <c> </c> </b> <d> </d> </a> ------------ 特定のタグ例えば<c>の下に -- <k> <g>あああ</g> </k> -- を追加することは出来るでしょうか? このような特定のタグを指定して 追加するプログラムを作成するためには、どうすればよいのか教えてください。 また、特定のタグ名を指定してその要素名を変更する事はできるでしょうか? 例えば <g></g>を<年齢></年齢>に変更するためにはどうすればよいのでしょうか? おしえてくらはい。。
マルチかよ、真面目にレス書いてたのにorz
795 :
伯壬旭 :04/12/12 09:19:20
>>792 サンプル
static void appendAndRename() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new FileInputStream("あ.xml"));
Element root = doc.getDocumentElement();
NodeList list = root.getElementsByTagName("c");
Node node = list.item(0);
Node child1 = doc.createElement("k");
Node child2 = doc.createElement("g");
Node child3 = doc.createTextNode("あああ");
child2.appendChild(child3);
child1.appendChild(child2);
node.appendChild(child1);
list = root.getElementsByTagName("g");
node = list.item(0);
node = doc.renameNode(node, node.getNamespaceURI(), "年齢");
FileOutputStream out = new FileOutputStream("newあ.xml");
DOMSource src = new DOMSource(root);
StreamResult dst = new StreamResult(out);
Transformer tfm = TransformerFactory.newInstance().newTransformer();
tfm.transform(src, dst);
out.close();
}
796 :
ナナ :04/12/12 12:40:37
>>795 ありがとうございます。
>>793 >>794 すみません。ずっと考えていたんですが、結局無理でして・・このような質問するなら
宿題の方に言って下さいと言われたので、ここの書き込みをしてしまった次第です。
もう一つ質問です。
要素名の変更のrenameNodeメソッドだけどうしてもシンボルを解決できない
というエラーメッセージが出てしまいます。
どこかのパッケージにあるのでしょうか?
このエラーを解決するにはどうすればよいか教えてください。
797 :
デフォルトの名無しさん :04/12/12 13:26:36
java.awt.Rectangle を二つ組み合わせて一つの java.awt.Shape を作りたいのですが、どうすりゃいいですか
798 :
デフォルトの名無しさん :04/12/12 15:59:06
>>797 Shape sh = Rectangle.union(Rectangle)
799 :
カナ :04/12/12 17:03:00
宿題丸投げすみません。。。よろしくお願いします。 1. ファイルの一覧データを生成し、ファイルpex2.txt に書き出すプログラムを定義しなさい。ソースファイルとファイルpex2.txt を提出しなさい。 条件: (1) main メソッドを含むクラス名はDirList、指定したファイルに文字列を書き出すクラスのクラス名はDirWriter とする。その他のクラス構成は自由とする。 (2) main メソッドの第一引数は一覧を生成するディレクトリ名、第二引数は出力ファイル名とする。 (3) パッケージを作成しているので、ディレクトリが深くなっているところも辿って一覧とする。 一覧は指定したディレクトリ名をルートとする木構造を幅優先の順序で表示する。以下に例を示す。 探索中にディレクトリ名を保持するためにQueue を利用せよ。 実行例: Directory: src BoardExample はディレクトリです。 ClockExample はディレクトリです。 Equivalence.java examination はディレクトリです。 ExceptionTest.java Exercise.java ...
800 :
カナ :04/12/12 17:03:32
(続き・・・) Directory: BoardExample Applet はディレクトリです。 Board.java Constant.java Event はディレクトリです。 Event2 はディレクトリです。 Position.java Standard はディレクトリです。 Directory: ClockExample AnalogClock.java (4) pex2.txt の先頭に、コンパイルのコマンドラインならびに実行のコマンドラインの文字列を含めよ。 ヒント: 指定したdirname でディレクトリの一覧を求めるには File dir = new File(dirname); String[] dirlist = dir.list(); またはFile[] dirlist = dir.listFiles();であるが、得られるオブジェクトの型が違うので注意する。 また、オブジェクトがディレクトリであるか否かを判定するメソッドはisDirectory() である。(これはFile 型オブジェクトに適用することができる)
802 :
デフォルトの名無しさん :04/12/12 18:07:18
>>796 org.w3c.dom.Documentをインポートしてくださいませ。
お願いします・・・m(__)m
803 :
ナナ :04/12/12 18:40:39
有難うございます。しかしそれについては、
インポートしているんですけが、やはりエラーが起こってしまいます。。
下に全体のプログラムを記述します。もしかしたら単純なミスかもしれませんが
宜しくお願いします。←(どうしても解らなくて)
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.io.*;
import java.util.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import javax.xml.transform.dom.*;
import org.w3c.dom.*;
import org.w3c.dom.Document.*;
public class f {
>>795 さんが記述してくださったプログラム
}
804 :
デフォルトの名無しさん :04/12/12 18:52:42
import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.dom.*; import javax.xml.transform.stream.*; import org.w3c.dom.*; import java.io.*; いんぼーとはこれでいいはずなんですがね・・・ renameNodeは、JDK1.5で追加された新メソッドかもしれません・・・ JDK1.5をインストールしてくださいませ・・・
805 :
ナナ :04/12/12 19:35:14
>>804 有難うございます。。
JDK1.5は、何処にあるのでしょうか?
SUNのホームページに言ったのですが、英語だらけで・・
JDK1.5のインストール方法などのホームページがありましたら
それもあわせて教えてくださいな。。
807 :
カナ :04/12/12 19:55:33
>>806 様、ありがとうございました!!
無事コンパイルし、実行することができました。
2時間以上もかけて考えて頂いて本当に感謝しています。
本当にありがとうございましたm(_ _)m
>2時間以上もかけて考えて頂いて 「思考速度が遅いんだよカスが」と言ってるように聴こえる漏れは人間不信
809 :
sage :04/12/12 20:22:15
カナです。
いや、単純に>>801-
>>806 まで2時間程あっただけで
勝手にそう解釈しちゃいました。
私なんて課題出されてから1週間以上悩んでいたのに全く解けなかったですし
・・・って釣られてしまったのでしょうか。。。
810 :
ナナ :04/12/12 22:19:34
JDK1.5なんとか インストールしました!! しかし,急に動かなくなってしまいました。 解らないよ・・ コンパイルさえ出来なくなってしまいました・・実行も・・
エラーメッセージを書けやコラ
812 :
M.B. :04/12/12 22:33:25
>>810 おとなしく 1.4.2_06 かなんかに戻すんだな。
ベータと格闘して悪戦苦闘するのが趣味、というならともかくも、
ダウンロードにて手こずるような素人が
最新バージョンに手を出すのは剣呑。
813 :
ナナ :04/12/12 23:12:07
>>812 有難うございました。再び直しました・・
となると結局・・renameNode問題が残ってしまいます・・
どうすればいいのだろう・・・
何度もすみません。。
正直、あきらめるしかないかと。
815 :
デフォルトの名無しさん :04/12/12 23:27:27
>>813 子ノードを削除して、追加すればどうですか。
816 :
古代帝國富士皇朝総帥・伯壬旭 :04/12/12 23:48:03
>>313 追加はこうして
static void append() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new FileInputStream("あ.xml"));
Element root = doc.getDocumentElement();
NodeList list = root.getElementsByTagName("c");
Node node = list.item(0);
Node child1 = doc.createElement("k");
Node child2 = doc.createElement("g");
Node child3 = doc.createTextNode("あああ");
child2.appendChild(child3);
child1.appendChild(child2);
node.appendChild(child1);
FileOutputStream out = new FileOutputStream("あ2.xml");
DOMSource src = new DOMSource(root);
StreamResult dst = new StreamResult(out);
Transformer tfm = TransformerFactory.newInstance().newTransformer();
tfm.transform(src, dst);
out.close();
}
817 :
古代帝國富士皇朝総帥・伯壬旭 :04/12/12 23:48:58
>>313 その後の、改名はこうしてください。
static void rename() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new FileInputStream("あ2.xml"));
Element root = doc.getDocumentElement();
NodeList list = root.getElementsByTagName("g");
Node node = list.item(0);
Element el = doc.createElement("年齢");
NamedNodeMap map = node.getAttributes();
for (int i = 0; i < map.getLength(); i++) {
el.setAttributeNode((Attr)map.item(i));
}
NodeList child = node.getChildNodes();
for (int i = 0; i < child.getLength(); i++) {
el.appendChild(child.item(i));
}
node.getParentNode().replaceChild(el, node);
FileOutputStream out = new FileOutputStream("あ3.xml");
DOMSource src = new DOMSource(root);
StreamResult dst = new StreamResult(out);
Transformer tfm = TransformerFactory.newInstance().newTransformer();
tfm.transform(src, dst);
out.close();
}
818 :
デフォルトの名無しさん :04/12/13 02:08:05
お願いします。もう一個のウィンドウを出すやり方とかさっぱりわからなかったので 入力された文字を表示する表示ウィンドウ、文字を入力する入力ウィンドウの 2つのウィンドウを持ったアプリケーションを考える。起動直後は表示ウィンドウが表示される が文字は何も表示されていない。 表示ウィンドウにある「新規入力」ボタンを押すと、 入力ウィンドウが表示される。 この入力ウィンドウにはテキストを入力するところと反映ボタンがある。 テキストを入力し、「反映」ボタンををおすと入力ウィンドウは閉じ、 表示ウィンドウに入力した文字が反映され表示されるようなアプリケーションを作りなさい。 (仕様1)プログラムの起動は以下のようにする。 java GUINote (仕様2)このプログラムの使い方は次のようにする 1.ユーザーがプログラムを起動する。 2.プログラムは表示ウィンドウを表示する。 3.ユーザーは「新規登録」ボタンを押す。 4.プログラムは入力ウィンドウを表示する。 5.ユーザーは入力ウィンドウに文字を入力し「反映」ボタンを押す。 6.プログラムは入力ウィンドウを閉じ、表示ウィンドウに入力された 文字を表示する。 7.ユーザーはウィンドウ右上の閉じる(×)をクリックする。 8.プログラムは表示ウィンドウを閉じて終了する。
819 :
デフォルトの名無しさん :04/12/13 02:16:23
コンテナを利用したプログラムではない MQやJMSぽいシステムを作れと言われたんですが どうすればいいか悩んでいます 僕自身の設計としては ・受け取り側のデータベースサーバに命令となる情報(コマンドクラスオブジェクトでもいいかも)を入れる ・受け取り側はそれをバッチで定時処理する
820 :
デフォルトの名無しさん :04/12/13 02:43:03
>>819 面白そうな問題なので、もう少し具体的に環境、条件を書いてください。
821 :
デフォルトの名無しさん :04/12/13 03:06:07
ありがとうございます 環境といっても2台のWindowsマシンがあって LAN経由でいいのでって言う話です DBは別に何でもいいけど(ていうかDBの案は自分が出したので特に問題としては制限決められていない) また、これを使って何がしたいっていうわけでもないので(問題には決まっていない) つまりは非同期に何かをやるっていう話です インターフェース的にはvoid execute()見たいなのが一個あればよい感じです なので送信者にはエラーがあったかどうかは(その時点では)わからなくていい 単純に、送った命令を受信側が処理するみたいな で、メッセージ(メッセージオブジェクトとでもいうのか)の置き場所は どちらでもいいのです で、コンテナを利用しないっていうのはAPサーバとかTomcatとかああいうものを利用しないということで ひつようならそういうものも自分で作れと言うことです で、僕の場合はそういうサーバ的なものはちょっと作る自身があんまり無いので DBサーバを利用しようかなと思ったのです(他の人はメールサーバ使う奴もいるらしい) ソケットで待ち構えていてもいいのですが非同期なので 結局どこかに置いておかなければならないので、ついでだからDBに入れちゃおうと・・・ この問題としてはそういったある意味フレームワーク的なものを作れと言う方向のようで そうなってくると当然汎用性をもたせるようなクラス設計をしていかないと 高得点は望めないと思います で、こういう設計で出来るんですかね? オブジェクトをDBから取り出してクラスロードするのがめんどくさそう(ていうか自分の技術的にできるのか不安) DBに値だけいれて、処理側で取り出すって言う手もありますが 前述のような汎用性というものがなくなるような気がして点数低くなりそうです
822 :
spaz :04/12/13 13:25:29
エイトクイーン問題を解くプログラムを教えてください(>_<)
823 :
ナナ :04/12/13 13:59:20
>>815 さん
古代帝國富士皇朝総帥・伯壬旭さん
なんとかできました。色々有難うございます。
もう一つだけ質問なのですが、ちょっと同じような質問です。
---あ.xml----
<愛 id=1>
<b>
<c>
</c>
</b>
<愛 ID=2>
</愛>
</愛>
------------
特定のタグの属性の下に
--
<k>
<g>あああ</g>
</k>
を記述することは出来ますでしょうか。
例えば、愛の属性の1を指定してその下に記述したり
愛の属性の2を指定してその下に記述したり
などです。宜しくお願いします。。
825 :
デフォルトの名無しさん :04/12/13 16:29:50
アクティブなウインドウでスクリプトを実行するのはどうすればいい?
スクリプトってなんだ?
827 :
古代帝國富士皇朝総帥・伯壬旭 :04/12/13 17:01:51
>>823 static void selectionAppend() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new FileInputStream("あ.xml"));
NodeList list = doc.getElementsByTagName("愛");
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
if (!(node instanceof Element))
continue;
String value = ((Element)node).getAttribute("ID"); //ここで対象属性名を指定し
if (value != null && value.equals("2")) { //ここで対象属性値を指定する
Node child1 = doc.createElement("k");
Node child2 = doc.createElement("g");
Node child3 = doc.createTextNode("あああ");
child2.appendChild(child3);
child1.appendChild(child2);
node.appendChild(child1);
}
}
FileOutputStream out = new FileOutputStream("あ2.xml");
DOMSource src = new DOMSource(doc.getDocumentElement());
StreamResult dst = new StreamResult(out);
Transformer tfm = TransformerFactory.newInstance().newTransformer();
tfm.transform(src, dst);
out.close();
}
828 :
古代帝國富士皇朝総帥・伯壬旭 :04/12/13 17:04:47
>>818 import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class GUINote {
public static void main(String[] args) {
final JFrame frame = new JFrame();
JPanel pal = new JPanel(new GridLayout(2, 1, 16, 16));
pal.setBorder(BorderFactory.createEmptyBorder(16, 16, 16, 16));
final JTextField lab = new JTextField(40);
lab.setEditable(false); lab.setBackground(Color.white); pal.add(lab);
JButton btn1 = new JButton("新規入力");
btn1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final JDialog dlg = new JDialog(frame, true);
JPanel pal = new JPanel(new GridLayout(2, 1, 16, 16));
pal.setBorder(BorderFactory.createEmptyBorder(16, 16, 16, 16));
final JTextField tfd = new JTextField(40); pal.add(tfd);
JButton btn2 = new JButton("反映");
btn2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
lab.setText(tfd.getText());
dlg.dispose();
}
});
pal.add(btn2);
dlg.getContentPane().add(pal); dlg.setLocationRelativeTo(frame);
dlg.pack(); dlg.setVisible(true);
}
});
pal.add(btn1);
frame.getContentPane().add(pal); frame.pack(); frame.setVisible(true);
}
}
829 :
デフォルトの名無しさん :04/12/13 17:26:13
830 :
デフォルトの名無しさん :04/12/13 18:47:48
>>829 すいません
わかりづらいとは思いますが
口頭での出題だったのです
もし、理解できないところがあれば聞いてください(としか言いようがありませんが・・・)
831 :
ナナ :04/12/13 18:58:03
古代帝國富士皇朝総帥・伯壬旭さんありがとうございます^^
すみません後もう一つ問題が発覚してしまいました。(何度もすみません)
>>823 の問題ですが
<k>
<g>あああ</g>
</k>
この追加するタグ群に特定の属性を記述したいのです。
例えば
<k>
<g ID=3>あああ</g>
</k>
というような感じです。
setAttributeを書き加えようとしたのですが、エラーがを起こってしまいました。
(私の記述方法がまずい可能性が大)
createElementで作成したタグに属性をくっつける方法を教えて下さいな。
また<g>あああ</g>の「あああ」の部分のみを削除することはできるでしょうか?
832 :
デフォルトの名無しさん :04/12/13 19:10:17
833 :
デフォルトの名無しさん :04/12/13 19:13:35
>>831 static void addAttrAndDeleteText() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new FileInputStream("あ2.xml"));
NodeList list = doc.getElementsByTagName("g");
Element el = (Element)list.item(0);
el.setAttribute("ID", "3");
list = el.getChildNodes();
for (int i = 0; i < list.getLength(); i++) {
if (list.item(i).getNodeType() == Node.TEXT_NODE) {
el.removeChild(list.item(i));
break;
}
}
FileOutputStream out = new FileOutputStream("い2.xml");
DOMSource src = new DOMSource(doc.getDocumentElement());
StreamResult dst = new StreamResult(out);
Transformer tfm = TransformerFactory.newInstance().newTransformer();
tfm.transform(src, dst);
out.close();
}
また龍谷か。 龍谷はダメ学生しかおらんな。
835 :
デフォルトの名無しさん :04/12/13 19:29:20
今、一つのXMLファイルから指定したタグのみ抽出して別のXMLファイルに挿入・保存する 方法を考えているんですが、上手くいきません。良い方法がありましたら助言お願いします。 ※xmlFile1、xmlFile2はそれぞれ ・xmlFile1 <a> <b id="1"></b> <b id="2"></b> </a> ・xmlFile2 <a> <b id="3"></b> </a> となっていて、処理後に <a> <b id="3"></b> <b id="1"></b> </a> のようなファイルをxmlFile2として保存することを目標としています。 xmlFile1は処理後も元のままです。
836 :
835 :04/12/13 19:35:43
自作のコードです。 ファイルを両方開いて該当するタグをappendChildでコピーしているのですが、xmlFile2が 更新されませんでした。 public void insertOtherTag(String xmlFile1, String xmlFile2, String chkNum[]){ try{ //xmlFile1の展開 FileReader objFR=new FileReader(xmlFile1); BufferedReader objBR=new BufferedReader(objFR); InputSource objSrc=new InputSource(objBR); DOMParser objPrs=new DOMParser(); objPrs.parse(objSrc); Document objDoc=objPrs.getDocument(); Element objRoot=objDoc.getDocumentElement(); NodeList clnNod=objRoot.getChildNodes(); //xmlFile2の展開 FileReader objFR2=new FileReader(xmlFile2); BufferedReader objBR2=new BufferedReader(objFR2); InputSource objSrc2=new InputSource(objBR2); DOMParser objPrs2=new DOMParser(); objPrs2.parse(objSrc2); Document objDoc2=objPrs2.getDocument(); Element objRoot2=objDoc2.getDocumentElement();
837 :
835 :04/12/13 19:36:14
続きです。 //該当タグのみコピーしてxmlFile2に追加 for(int i=0;i<chkNum.length;i++) { Node addNode=clnNod.item(Integer.parseInt(chkNum[i])).cloneNode(true); objRoot2.appendchild(addNode); } OutputFormat objOF=new OutputFormat(objDoc2); objOF.setEncoding("Shift_JIS"); FileWriter objFW=new FileWriter(xmlFile2); BufferedWriter objBW=new BufferedWriter(objFW,10); XMLSerializer objXS=new XMLSerializer(objBW,objOF); objXS.asDOMSerializer(); objXS.serialize(objDoc2.getDocumentElement()); objBW.close(); }catch(Exception e) { e.printStackTrace(); } }
>>839 エッチだと思った理由を原稿用紙1枚以上にまとめて提出。明日9:00までな。
841 :
古代帝國富士皇朝総帥・伯壬旭 :04/12/13 20:41:42
>>835 こうしてみてください。
static void move() throws Exception {
DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
DocumentBuilder db = fac.newDocumentBuilder();
Document doc1 = db.parse(new FileInputStream("xmlFile1.xml"));
NodeList list = doc1.getElementsByTagName("b");
Node target = null;
for (int i = 0; i < list.getLength(); i++) {
if (((Element)list.item(i)).getAttribute("id").equals("1")) {
target = list.item(i);
break;
}
}
Document doc2 = db.parse(new FileInputStream("xmlFile2.xml"));
list = doc2.getElementsByTagName("a");
if (target != null && list.getLength() > 0) {
DOMSource src = new DOMSource(target);
DOMResult dst = new DOMResult(list.item(0));
Transformer tfm = TransformerFactory.newInstance().newTransformer();
tfm.transform(src, dst);
}
FileOutputStream out = new FileOutputStream("xmlFile2.xml");
DOMSource src = new DOMSource(doc2.getDocumentElement());
StreamResult dst = new StreamResult(out);
Transformer tfm = TransformerFactory.newInstance().newTransformer();
tfm.transform(src, dst);
out.close();
}
>>832 それはプログラミングの問題と言うより、数学の問題だからね・・・
自分にとってはムズすぎ
843 :
ナナ :04/12/14 11:44:49
>>833 さん有難うございます。しかしそのプログラムだと、
一定の場所を指定しているので、複数<g>がある場合は、対応が出来ないわけです。
つまり古代帝國富士皇朝総帥・伯壬旭 さんが作成してくださったプログラム。
static void selectionAppend() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new FileInputStream("あ.xml"));
NodeList list = doc.getElementsByTagName("愛");
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
if (!(node instanceof Element))
continue;
String value = ((Element)node).getAttribute("ID");
if (value != null && value.equals("2")) {
Node child1 = doc.createElement("k");
Node child2 = doc.createElement("g");
//↑この<g>のタグにcreateElementと同時に属性を追加したいのです
//この特定の<g>は、特定の愛の下にあるので、仮にあ.xmlに<g>のタグが
//たくさんあっても、ピンポイントでこの<g>に属性を追加できることになります。
Node child3 = doc.createTextNode("あああ");
child2.appendChild(child3);
child1.appendChild(child2);
node.appendChild(child1);}}
FileOutputStream out = new FileOutputStream("あ2.xml");
DOMSource src = new DOMSource(doc.getDocumentElement());
StreamResult dst = new StreamResult(out);
Transformer tfm = TransformerFactory.newInstance().newTransformer();
tfm.transform(src, dst);
out.close();}
度々すみませんがどうぞ宜しくお願い致します。
844 :
ボタンを使ったゲーム :04/12/14 11:48:27
すいません。説明わかりずらいかもですがお願いしますm(_)m 縦6つ×横5つの、30個のボタンを(長方形にくっつけて)作成して ボタンのラベルは、1〜30の数字でランダムにつけて 1から順番に、30まで押すゲームの、アプレットを作りたいです。 (間違えて違うボタンを押した時はmissを数えて表示したいです) (あとで時間制限などを加えてゲーム制を出そうと思ってます) 自分の実力は、ボタンやテキストフールドが作れるくらいです 長方形なるように作成したり、ラベルをランダムに付けたりする所が できないです。お手数ですが宜しくお願いしますm(_)m
#include <stdio.h> #include <math.h> #define DIM6 #define TIMES8 void inv (double mat[2][2]); void iterate(double t, double y[DIM]); void func(double t, double x[DIM], double f[DIM]); void poincare(double t, double r, double x[DIM]); double h = 2.0 * M_PI / 120.0; double r = 50; double X, Y, Z; int main(void) { int n, i, l; double x[DIM], u, v; double pqrs[2][2], tmp[2]; double init[TIMES][2]; scanf("%lf", init[0]); scanf("%lf", init[0]+1);
846 :
古代帝國富士皇朝総帥・伯壬旭 :04/12/14 14:47:58
>>844 その1
import java.awt.*; import java.awt.event.*; import javax.swing.*;
import java.util.*; import java.util.List; import java.util.Timer;
public class HW46 extends JApplet {
static final int HOR = 5, VER = 6;
JPanel pal1 = new JPanel(new GridLayout(HOR, VER, 4, 4));
JLabel lab = new JLabel();
JButton btn = new JButton("開始");
int hit, miss, sec;
public void init() {
for (int i = 0; i < HOR * VER; i++) {
JButton b = new JButton(String.valueOf("?"));
b.setFont(new Font("Dialog", 0, 20));
b.setEnabled(false); pal1.add(b);
}
JPanel pal2 = new JPanel();
lab.setOpaque(true); lab.setBackground(Color.white);
lab.setPreferredSize(new Dimension(300, 20));
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btn.setEnabled(false);
game();
}
});
pal2.add(lab); pal2.add(btn);
((BorderLayout) getContentPane().getLayout()).setVgap(8);
getContentPane().add(pal1);
getContentPane().add(pal2, BorderLayout.NORTH);
}
847 :
古代帝國富士皇朝総帥・伯壬旭 :04/12/14 14:48:46
>>844 その2
void game() {
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (sec == 0) return;
JButton b = (JButton) e.getSource();
if (b.getText().equals(String.valueOf(hit + 1))) { b.setEnabled(false); ++hit; }
else { lab.setText("残り時間" + sec + "秒 ミス" + ++miss + "回"); }
}
};
pal1.removeAll(); List list = new ArrayList();
for (int i = 0; i < HOR * VER; i++) {
JButton b = new JButton(String.valueOf(i + 1));
b.setFont(new Font("Dialog", 0, 20)); b.addActionListener(al); list.add(b);
}
Collections.shuffle(list);
for (int i = 0; i < HOR * VER; i++) pal1.add((JButton) list.get(i));
pal1.validate(); sec = HOR * VER; miss = 0; hit = 0; Timer tim = new Timer();
tim.schedule(new TimerTask() {
public void run() {
if (sec == 0) {
if (hit == HOR * VER) { lab.setText("ゲームクリア ミス" + miss + "回"); }
else { lab.setText("時間切れ ミス" + miss + "回"); }
cancel(); btn.setEnabled(true);
} else {
lab.setText("残り時間" + --sec + "秒 ミス" + miss + "回");
}
}
}, 0, 1000);
}
}
848 :
古代帝國富士皇朝総帥・伯壬旭 :04/12/14 14:51:28
>>844 アプレットサイズは、横400、縦300にしてください。
>>843 Node child2 = doc.createElement("g");
の下に
child2.setAttribute("ID", "3");
を挿入してください。
849 :
古代帝國富士皇朝総帥・伯壬旭 :04/12/14 15:17:45
>>844 失礼。
>>847 のコードを間違えました。
>>847 は、これにしてください。↓
void game() {
final Timer tim = new Timer();
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (sec == 0) return;
JButton b = (JButton) e.getSource();
if (b.getText().equals(String.valueOf(hit + 1))) {
b.setEnabled(false); ++hit;
if (hit == HOR * VER) {
lab.setText("ゲームクリア ミス" + miss + "回"); tim.cancel(); btn.setEnabled(true);
}
} else { lab.setText("残り時間" + sec + "秒 ミス" + ++miss + "回"); }
}
};
pal1.removeAll(); List list = new ArrayList();
for (int i = 0; i < HOR * VER; i++) {
JButton b = new JButton(String.valueOf(i + 1));
b.setFont(new Font("Dialog", 0, 20)); b.addActionListener(al); list.add(b);
}
Collections.shuffle(list);
for (int i = 0; i < HOR * VER; i++) pal1.add((JButton) list.get(i));
pal1.validate(); sec = HOR * VER; miss = 0; hit = 0;
tim.schedule(new TimerTask() {
public void run() {
if (sec == 0) {
lab.setText("時間切れ ミス" + miss + "回"); cancel(); btn.setEnabled(true);
} else {
lab.setText("残り時間" + --sec + "秒 ミス" + miss + "回");
}
} }, 0, 1000);
} }
850 :
844 :04/12/14 15:51:55
>古代帝國富士皇朝総帥・伯壬旭さん 激しくありがとうございますm(_)m まさにこれです。感謝です。
852 :
デフォルトの名無しさん :04/12/14 16:48:00
う〜ん、特に必要ないようにも思うが・・・ どこかでwait()を使ってる訳でもないし・・・・ しかし、プロが書くコードだから何か意味があるに違いない。 とりあえず、notifyAll()を外して実行して結果を確かめてみるとか。
853 :
ナナ :04/12/15 01:45:30
>>843 です。自力で何とかしようとしたのですが、未だ出来ずです。
すみませんが何方か宜しくお願いします。
854 :
デフォルトの名無しさん :04/12/15 07:50:28
>>853 すいません。回答は
>>848 に書いたのですが・・・
もう一度、質問とその条件を書いてください。
855 :
ナナ :04/12/15 09:13:51
>>854 さん
こちらこそ、すみません。ありがとうございます。
問題文と条件きっちり書きます。
---あ.xml----
<愛 id=1>
<b></b>
<c>
<愛 id=2>
<b></b>
<c>null</c>
</愛>
</c>
</愛>
<愛 id=3>
<b></b>
<c>null</c>
</愛>
------------
特定の<愛>及び属性の下位にある<c>下に
--
<愛 id=5>
<b></b>
<c>null</c>
</愛>
を挿入します。この時、挿入される場所<c>にはnullという文字列がある場合があります
のでその文字列を削除します。
例題は、次に書きます。
856 :
ナナ :04/12/15 09:15:49
つづきです。 例えば、愛の属性の1を指定してすると、以下のように追加されます。 <愛 id=1> <b></b> <c> <愛 id=2> <b></b> <c>null</c> </愛> <愛 id=5> <b></b> <c>null</c> </愛> </c> </愛> <愛 id=3> <b></b> <c>null</c> </愛> この場合は、挿入される場所の<c>にはnull文字列が無かったのですが idが3を指定していれば、<c>の下にnull文字列があるので、この場合は、削除して追加します。 こうすることによって、生成されたXMLをもう一度利用し<愛>の5の下にも追加できるようになります。 こんなものを創りたいのです。どうぞ宜しくお願いします。
857 :
古代帝國富士皇朝総帥・伯壬旭 :04/12/15 10:55:38
public static void main(String[] args) { try { Element elm = makeInsertedElement(); //ここで挿入タグを作って insertElement(elm, "1"); //ここでcを保持する愛のidを指定して、それを挿入する。 } catch (Exception e) { } } static Element makeInsertedElement() throws Exception { DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance(); DocumentBuilder db = fac.newDocumentBuilder(); Document doc = db.newDocument(); Element el1 = doc.createElement("愛"); el1.setAttribute("id", "5"); Element el2 = doc.createElement("b"); Element el3 = doc.createElement("c"); Text text = doc.createTextNode("null"); el3.appendChild(text); el2.appendChild(el3); el1.appendChild(el2); return el1; }
static void insertElement(Element elm, String value) throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new FileInputStream("あ.xml")); NodeList list = doc.getElementsByTagName("c"); for (int i = 0; i < list.getLength(); i++) { Node node = list.item(i); Node parNode = node.getParentNode(); if (parNode.getNodeType() != Node.ELEMENT_NODE) continue; Element par = (Element) parNode; String val = par.getAttribute("id"); if (par.getNodeName().equals("愛") && val != null && val.equals(value)) { NodeList child = node.getChildNodes(); for (int k = 0; k < child.getLength(); k++) { if (child.item(k).getNodeType() == Node.TEXT_NODE) { node.removeChild(child.item(k)); } } DOMSource src = new DOMSource(elm); DOMResult res = new DOMResult(node); Transformer tfm = TransformerFactory.newInstance().newTransformer(); tfm.transform(src, res); } } FileOutputStream out = new FileOutputStream("あ2.xml"); DOMSource src = new DOMSource(doc.getDocumentElement()); StreamResult dst = new StreamResult(out); Transformer tfm = TransformerFactory.newInstance().newTransformer(); tfm.transform(src, dst); out.close(); }
859 :
質問 :04/12/15 12:32:21
import java.awt.Graphics; import java.applet.*; import java.awt.Image; public class Test extends Applet { Image im[] = new Image[4]; public void init() { im[0] = getImage(getDocumentBase(), "a.gif"); im[1] = getImage(getDocumentBase(), "b.gif"); im[2] = getImage(getDocumentBase(), "c.gif"); im[3] = getImage(getDocumentBase(), "d.gif"); } public void paint(Graphics g) { double x = Math.PI * 0; double y = 200 - Math.sin(x); for (int i=0; i<4; i++){ g.drawImage(im[i], 100 * x, y, this); x += Math.PI * 1/4 ; } } } という画像をsinカーブ上に並べる プログラムを作成したのですが、コンパイルすると、
860 :
質問 :04/12/15 12:32:57
シンボルを解決できません。 シンボル:メソッド drawImage (java.awt.Image,double,double,Test) 場所 : java.awt.Graphics の クラス g.drawImage(im[i],100 * x,y,this); ^ エラー1個 というエラーがでてしまいます。どこがおかしいのでしょうか?
861 :
デフォルトの名無しさん :04/12/15 14:21:31
g.drawImage(im[i], 100 * x, y, this); を g.drawImage(im[i], (int) 100 * x, (int) y, this); としてください。 あと、ここは宿題スレなので質問は隣の質問スレでお願いします。
862 :
ナナ :04/12/15 16:43:32
古代帝國富士皇朝総帥・伯壬旭さんありがとうございます。 できました!!うれしいです。
863 :
007 :04/12/15 22:06:14
こんばんわ じゃんけんゲームを作れという支持がありました。 まずユーザーフォームは以下のとおりです。 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | じゃんけんゲーム | | | | あなた | ̄ ̄ ̄ ̄ ̄ ̄| | | ○ぐう ○ちょき ○ぱー |じゃんけん | | | | | | |  ̄ ̄ ̄ ̄ ̄ ̄ | | | | | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | | コンピュータ | Label9 | | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | | | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | | 結 果 | Label10 | | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | | | ̄ ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄ ̄| | | あなたは | Label11 | 勝 | Label12 | 敗 |Label13 |引き分け | |  ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ | | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
864 :
007 :04/12/15 22:07:44
続き… コードの流れとしましては… ◎ユーザーフォームで自分の手を(ぐう、ちょき、ぱー)を選んでクリックする。 自分の手を選ぶときはオプションボタンを押します。 ◎「じゃんけん」と書いたのがコマンドボタンです。これを押してコンピュータとじゃんけんします。 ◎コンピュータが手(ぐう、ちょき、ぱー)を選ぶ。これは乱数を使えと指示が ありました。これはLabel9に表示させます。 ◎勝ち負けの判定をする。 「勝ち」「負け」「引き分け」の表示をLabel10に 「何勝」「何敗」「何引き分け」の表示をLabel11と12と13に表示させます。 オプションボタンのぐう・ちょき・ぱー のどれかを選んでコマンドボタンで作ったじゃんけんのボタンを押しても コンピュータの手と勝ち・負け・引き分けの結果が出ません。 あと何度EndSelectを打ってもSelectCaseに対するEnd Selectが無いみたいなことが出て、 最後にいっぱいEndSelectがありますが、あれだけ打ってやっとエラーが出なくなりました。 それもおかしいですか? 一応自分でできるところまでは頑張りました。 何かまちがっていたらよろしくお願いします。 また説明不足でしたらまた言いますので何かヒントください。 よろしくお願いいたします。
865 :
007 :04/12/15 22:09:06
続き… Option Explicit Private Sub CommandButton1_Click() 'じゃんけんボタンをクリック Dim intJibun As Integer '自分の手 Dim intComputer As Integer 'コンピュータの手 '3つのオプションボタンの値(Valueプロパティ)を調べる CommandButton1.Value = OptionButton1.Value CommandButton1.Value = OptionButton2.Value CommandButton1.Value = OptionButton3.Value 'コンピュータの手を乱数で選ぶ Dim strJanken(1 To 3) As String Dim intNo As Integer strJanken(1) = "ぐう" strJanken(2) = "ちょき" strJanken(3) = "ぱー" Randomize intNo = Int(3 * Rnd() + 1)
866 :
007 :04/12/15 22:10:31
続き… '勝ち負けの判定をする Select Case intJibun '自分の手 Case "1" '自分はぐう Select Case intComputer 'コンピュータの手 Case "1" 'コンピュータはぐう Label9.Caption = "ぐう" '自分がぐうコンピュータがぐう Label10.Caption = "引き分け" '=引き分け Case "2" 'コンピュータがちょき Label9.Caption = "ちょき" '自分がぐうコンピュータがちょき Label10.Caption = "勝ち" '=勝ち Case "3" 'コンピュータがぱー Label9.Caption = "ぱー" '自分がぐうコンピュータがパー Label10.Caption = "負け" '=負け End Select Select Case intJibun Case "1" '自分はちょき" Select Case intComputer 'コンピュータの手 Case "1" 'コンピュータはぐう Label9.Caption = "ぐう" '自分がちょきコンピュータがぐう 'コンピュータの手を表示 Label10.Caption = "負け" '=負け '勝ち負けの表示 Case "2" 'コンピュータはちょき Label9.Caption = "ちょき" '自分がちょきコンピュータがちょき Label10.Caption = "引き分け" '=引き分け Case "3" 'コンピュータはぱー Label9.Caption = "ぱー" '自分がちょきコンピュータがぱー Label10.Caption = "勝ち" '=勝ち End Select
867 :
007 :04/12/15 22:11:34
続き… Select Case intJibun Case "1" '自分はぱー Select Case intComputer 'コンピュータの手 Case "1" 'コンピュータはぐう Label9.Caption = "ぐう" '自分がぱーコンピュータがぐう Label10.Caption = "勝ち" '=勝ち Case "2" 'コンピュータはちょき Label9.Caption = "ちょき" '自分がぱーコンピュータがちょき Label10.Caption = "負け" '=負け Case "3" 'コンピュータはぱー Label9.Caption = "ぱー" '自分がぱーコンピュータがぱー Label10.Caption = "引き分け" '=引き分け End Select End Select End Select End Select End Sub 長くなってすいません
これはVBなのか?
869 :
デフォルトの名無しさん :04/12/15 22:45:48
VBかどうかは不明だがBASICであることに間違いないな javaのコードはそこまでわかりやすくない
>>863 こんなぐちゃぐちゃなフォームが作れるヤシがいたらお目にかかりたい
871 :
デフォルトの名無しさん :04/12/16 01:34:42
じゃんけんならGoFのデザインパターンにあったような。
>>871 つーか、
>>832 はプログラミングの問題というより数学の問題だからね。
数式が理解できればコーディングは簡単なのだが。
こういう数学問題は、出題者にとっては一番ラクだが、
プログラミングの力はつかないよ。
875 :
デフォルトの名無しさん :04/12/16 11:48:09
┌──────────┐ │ ■ │ │ │ │ ■ ■ │ │ │ │ │ │ ■ │ └──────────┘ 縦にY軸(、横に
876 :
875 :04/12/16 11:57:05
上ミスりましたすいません。 ┌──────────┐ │ ■ │ │ │ │ ■ ■ │ │ │ │ │ │ ■ │ └──────────┘ 上はWIDTH*HEIGHTの大きさをもつ画像で 左上を原点として縦にY軸(下方向に正)、横にX軸(右方向に正)をとって それぞれの■(これはドットの連結領域で形は様様)の中心座標をとり、 Y軸方向の差が+-5ピクセル以内のものを対になっているものとみなし 対になっていないものを消去する これはどんな記述すればいいでしょうか?
char x = Character.MIN_VALUE; とでもしておけ。もしくはデフォルト値突っ込んでおけ。
} else if (b != 123){ //上3桁が123じゃなかったら の間違いです!(>_<)
>>878 ありがとうございます!
どこにデフォルトを入れたらいいのでしょうか?
if 〜 else if 〜 のifが成り立たないときに初期化されないから。
この場合 else if じゃ無くてelseで十分。
さっぱりわかりません・・・ すいません。迷惑かけるので出直してきます。(⊃_;)
いや待ちな、ぼうや。 else if の if は無駄(上のifの逆だからelseで十分) (ifが入っていることでコンパイラがえらいこっちゃしてる) if(b == 123){ うんぬん }else if(b != 123){ かんぬん } というのを if(b == 123){ うんぬん }else{ かんぬん } と書けばいい うんぬんのところも同じ。多分これで警告は出ない。 というか、ソース消しちゃったら、丸ごとかけないわ…。
} else if (c > 41){ //下3桁が41以降なら のif分が余計なんだってば
>>885 char x=' ';
宣言時に空白を入れればいい
>>886 すいません!勘違いしてました!
今直してみたのですが、それでも初期化されてない可能性があるとでます。
javaのコンパイラってそんなにアホだっけ?
とりあえず
>>887 でもやっておけばでないだろうと思うから気になるならそれで。
うちでは出なかった例 int a,b,c; a = 124010;//ID(6桁) b = a/1000;//上3桁を表示する計算 c = a%1000;//下3桁を表示する計算 char x; //IDを確認してxにAかBを代入する。 if (b == 123){ //上3桁が123かどうか if (c <= 40){ //下3桁が40以下 x = 'A'; } else { //下3桁が41以降なら x = 'B'; } } else { //上3桁が123じゃなかったら x = 'B'; } //クラス分けの表示 System.out.println("あなたはクラス" + x + "です。"); //xを確認して教室を表示する。 if (x == 'A') { System.out.println("教室はROOM1です。"); } else if (x == 'B'){ System.out.println("教室はROOM2です。"); }
本当にありがとうございます!!!!!!!!! ずっとひっかかってた部分が解けました。 これで実家に帰れる〜(⊃_;) みなさん協力してくれてありがとう!これからはしかっり自分でします!
892 :
spaz :04/12/16 15:31:21
8クイーンの問題を解いてください(>_<)
894 :
デフォルトの名無しさん :04/12/16 15:46:51
Regexp::compile("[\xb0\xa1-\xf4\xa6]+", nil, 'e') これをもっと直接的にかけないでしょうか? エスケープしないで直接目的とする漢字(亜、瑤)を使って 表現したいんですが。
895 :
デフォルトの名無しさん :04/12/16 15:55:23
1桁以上の数字、*、/、+、-、= の各文字で構成された式を読み、 計算値を出力する電卓のプログラムを作成せよ。 ただし、 低機能な電卓と同様に 演算子 *, / と +, - の優先順位は対等とする。 また、/ は整数除算の演算子とし、 余分な空白などの不正な入力に対して配慮する必要はない。 なお、 読み込んだ値を計算式内で直接利用するために、 手続き read で読み込んだ整数値を関数値として返す関数 getnumber を作成し、 これを利用したプログラムとすること。 た す け て た す け て
896 :
デフォルトの名無しさん :04/12/16 16:11:03
しまったsageわすれた
898 :
デフォルトの名無しさん :04/12/16 16:14:24
ここは、JAVAの宿題スレッドです。 JAVA以外と思われる質問はスルーしますので、そのつもりでいてください。
899 :
デフォルトの名無しさん :04/12/16 18:55:51
スルーする なんつって!プププ
900 :
デフォルトの名無しさん :04/12/16 19:30:14
>>832 の学生です。逆コンパイルでもいいので、やってもらえませんか?勝手な要望ですがどなたかおねがいします。
こんな所で聞くより友人にでも聞いたほうが色々な意味でいいと思うが。 でなきゃ、教授に聞くとか。ためにならんぞ。でなきゃ、こんな単位落としちゃえ。
902 :
デフォルトの名無しさん :04/12/16 20:02:00
友人もできてないんです、多分学生100人中2,3人しかできないとおもいます。ここで模範解答みたいなのをだしてもらってそのまま提出しても意味ないのはわかっているので、自分なりに理解したうえでもう一度書き直すつもりなんです。
903 :
デフォルトの名無しさん :04/12/16 20:19:41
904 :
デフォルトの名無しさん :04/12/16 20:40:50
>>903 あの数式なんですけど、学科の人もまったくわかってないんです。授業をサボってるわけでもありません。とりあえずルンゲクッタ法をつかってやれって感じなんです。
>>902 いんちきして解答を作るより友人を作る方が有意義ではないか?
906 :
デフォルトの名無しさん :04/12/16 21:01:04
>>901 これで頑張ってください。
--------------------------------------------------------------------
原子がM個あって、
原子N(N=2,...,M-1)に関して初期条件で位置と速度、加速度が与えられている
とすると
# 原子1・原子Mは、速度=0 加速度=0 に固定
WHILE(TRUE){
□□
□□FOR 原子2 TO 原子M-1{
□□□□原子Nの加速度(t) = 定数 * ( 原子N-1の位置(t) - 2 * 原子Nの位置(t) + 原子N+1の位置(t) );
□□}
□□FOR 原子2 TO 原子M-1{
□□□□原子Nの速度(t+Δt) = 原子Nの速度(t) + 原子Nの加速度(t);
□□□□原子Nの位置(t+Δt) = 原子Nの位置(t) + 原子Nの速度(t+Δt);
□□□□
□□□□点を描画(原子Nの位置(t+Δt));
□□}
□□
□□t = t+Δt;
}
これをAppletにすればよし。
Appletができなければ、CSVに吐いて、Excelでグラフにしても
おもしろいのでは?(むしろそっちの方がおもしろかも)
>>900 いんちきを人に頼むなよ。そういうことなら自分でやれば?
ちなみにjadしてみたが、俺には何のことかわからん。。
>>904 >あの数式なんですけど、学科の人もまったくわかってないんです。
>授業をサボってるわけでもありません。
それは問題ですな
課題の段階でプログラム一歩手前の漸化式になっているのに・・・
909 :
デフォルトの名無しさん :04/12/16 21:46:46
>>902 いやいや友人はいますので。
>>907 いんちきもなにも、そのまま提出したら他人がやったのバレバレですし、意味もないです。
模範解答を見ながら理解して、自分で作りなおすと書き込みました。
ここの基本ルールには反してないとおもいますが。
>>909 だ・か・ら・ぁ。
そういうのでいいんだったら、自分で逆コンパイルして書き直せばってこと。
911 :
カオル :04/12/16 23:49:21
宿題分からないので、お願いします。 TestQueue,例外クラスは分かるのですが、Queueのクラスが分かりません。 1. キューのリングバッファによる実装と例外処理を定義しなさい。 キューの基本操作は、enqueue、dequeueの2つである。 enqueue はObject 型のデータをキューに追加する操作であり、 dequeueは一番先にenqueue されたObject 型のデータを取り出す操作である。 リングバッファとは、つぎのようなデータ構造である。大きさがN の配列と、 先頭を示すインデックスhead と最後尾を示すインデックスtail を用意する。 リングバッファに含まれているデータには順序があり、head で示される位置から tail で示される位置までデータが入っている。 head == tail の状態はキューが空であることを表す。 インデックスhead を1つ先に進めるには、mod 演算(Java では%演算子)を使ってつぎのように表す。 head = (head +1) % N; また、インデックスtail を1つ先に進めるにはつぎのように表す。 tail = (tail +1) % N;
912 :
カオル :04/12/16 23:49:48
なお、プログラムは以下の条件を満たすこと。 ・キューのクラス名はQueue、テストプログラムのクラス名はTestQueue とする。 ・コンストラクタはキューをデフォルトサイズ(=10)で生成するものと、 サイズを与えて生成するものの2 種類を定義する。 ・キューのクラスはキューの先頭の要素を取り出すメソッドtop()と キューが空であるかを判定する(真偽値を返す)メソッドisEmpty()をもつ。 ・Stack の例外処理にならい、例外クラス(OverflowException,UnderflowException)を定義し、 実装に依存しない例外処理を定義する。 OverflowException はキューがいっぱいになっている場合に、 UnderflowException はキューが空になっている場合に禁止される操作を行うことによって 発生する例外である。これらの例外はそれぞれenqueue, dequeue メソッドが投げるものとする。 これらの例外クラスはまとめてException パッケージに入れる。 テストプログラムにおいて例外が生じた場合は例外の状態を表示し、さらにキューの状態を表示する。 ・パッケージ名はNov25 とし、この中に上述のException パッケージ、 Queueクラス、TestQueue クラスを置くものとする。 ・TestQueue の内容はつぎのとおりである。 @ サイズ4 のキューを生成する。 A キューの初期状態を表示する。 B 以下の操作を行う。 enqueue("a"), enqueue("b"), enqueue("c"), dequeue(), enqueue("d"), dequeue(), enqueue("e") C キューの状態を表示する。
913 :
sage :04/12/17 04:35:49
この宿題は一応自分でもやっています。 決して他人まかせで終わらせるつもりではありません。 もし自分の力で出来たらまた報告します。
.docかよ!
次スレはどうしましょう。 A. 【初心者】Java の宿題はここで答えます part2【歓迎】 B. Javacoの中の人がJavaの宿題に答えます part2 C. 【実は】長老がJavaの宿題に答えます part50【雑談】
>>913 htmlかtxtにして和訳しておくれよ。
読む気がしないよ。
【宿題専用】Java の宿題はここで答えます part50【Javaの質問は別スレで】
919 :
デフォルトの名無しさん :04/12/17 11:59:59
【宿題】 電卓を作れ。 小数点の計算は必要ない。 GUIプログラミングを大活用しろ。 ボタンは1,2,3,4,5,6,7,8,9,0,+,-,×,÷,C,= ググりまくったけどいまいちぴったりなのがないし、過去スレ見れないしお助けくdふぁさい。
【上級者】The Thredo of Java Proglamingu Homewark【が回答】
【宿題】Javaの宿題を答えます【待ってます】
923 :
カオル :04/12/17 12:39:38
>>911 できました。
お騒がせしました(深々礼)
突然なんですが、この式をstatementにするにはどうやって記述すればいいでしょうか? rate*(1+rate)N payment = ━━━━━━━━━ ((1+Rate)N-1) ちなみにNの部分は自乗です。 どうもわからないのでよろしくお願いします。
925 :
デフォルトの名無しさん :04/12/17 13:14:52
rate * Math.pow(1 + rate, N); Math.pow(1 + rate, N) - 1;
926 :
デフォルトの名無しさん :04/12/17 13:28:42
をねがいしまふ。 <宿題> file1とfile2をそれぞれ行で読んで、file1にfile2と異なる行があるときは file1に書き込め。(file2にはfile1にない行があってもいい) というものです。ひとつのクラスのメイン文の中で解決できるようにお願いします。 わかりにくいですかね。文章が。
927 :
デフォルトの名無しさん :04/12/17 13:45:08
>>926 import java.io.*;
import java.util.*;
public class HW48 {
public static void main(String[] args) {
try {
BufferedReader r1 = new BufferedReader(new FileReader("file1.txt"));
BufferedReader r2 = new BufferedReader(new FileReader("file2.txt"));
Set set = new TreeSet();
String line;
while ((line = r1.readLine()) != null)
set.add(line);
while ((line = r2.readLine()) != null)
set.add(line);
r1.close();
r2.close();
BufferedWriter w = new BufferedWriter(new FileWriter("file1.txt"));
Iterator it = set.iterator();
while (it.hasNext())
w.write((String) it.next() + "\r\n");
w.close();
} catch (Exception e) {
System.out.println("エラー発生");
}
}
}
928 :
デフォルトの名無しさん :04/12/17 13:58:39
>>925 早速助けてくださってありがとうございます。
ですが、うまく作動しませんでした。
file2は、どんどん更新されていくので、file1のほうにfile2にはあって
file1にないものだけを書き込んでいきたいのです。
上のプログラムだと、コピーはできるのですが、file2が更新されて新しい行が追加されるときに
反応しないみたいです。
どうかお願いします。
929 :
デフォルトの名無しさん :04/12/17 14:09:07
>>928 file1.txtが
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
で
file2.txtが
aaaaaaaaaa
xxxxxxxxxx
bbbbbbbbbb
だと
file1.txtが
aaaaaaaaaaa
bbbbbbbbbbb
ccccccccccc
xxxxxxxxxxx
となるようにしたのですが・・・
その後file2に、zzzzzzzzzzzzzzzの行が入っても
file1にzzzzzzzzzzzzzzzが追加されるはずなのですが・・・
930 :
デフォルトの名無しさん :04/12/17 14:30:19
>>928 私が間違えていました。すみません!
ありがとうございました!本当に助かります。
こんなにシンプルなプログラムでいいなんて感動です。
私がやったときはwhile文を二回繰り返すようなのでぐちゃぐちゃだっただけに
とてもありがたいです!
本当にありがとうございました!!!
931 :
デフォルトの名無しさん :04/12/17 15:17:33
>>928 自分でやってみたのができなかったのでやはりお願いします。
今のプログラムなんすが、ソートせずにそのまま新しい行をfile1の上でも下でもいいので追加していくには
どうすればよいのでしょうか?
重ね重ねすみません。
932 :
デフォルトの名無しさん :04/12/17 15:23:19
>>931 Set set = new TreeSet();
を
Set set = new LinkedHashSet();
としてください。
933 :
デフォルトの名無しさん :04/12/17 15:33:43
>>932 ありがとうございます!すごいはやいですね!
932さんがいるうちに宿題やってしまおうと思います(汗)。
ありがとうございます!
934 :
>>919 その1 :04/12/17 17:55:27
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class HW47 extends JFrame { static long value; static final int MAXP = 12; static boolean numFlag = true; static char opeFlag; static JLabel label = new JLabel("0"); static JPanel pal = new JPanel(new GridLayout(4, 4, 8, 8)); static ActionListener ne = new Number(), oe = new Operator(), ee = new Equal(), ce = new Clear(); public static void main(String[] args) { JFrame frame = new JFrame(); ((BorderLayout)frame.getContentPane().getLayout()).setVgap(8); JButton[] btn = new JButton[16]; ActionListener[] als = new ActionListener[] { ne, ne, ne, oe, ne, ne, ne, oe, ne, ne, ne, oe, ne, ce, ee, oe, ce }; String[] btnLabel = { "7", "8", "9", "/", "6", "5", "4", "*", "3", "2", "1", "−", "0", "C", "=", "+" }; for (int i = 0; i < btnLabel.length; ++i) { btn[i] = new JButton(btnLabel[i]); btn[i].addActionListener(als[i]); btn[i].setFont(new Font("Dialog", 1, 20)); pal.add(btn[i]); } frame.getContentPane().add(pal); Box box = Box.createHorizontalBox(); label.setFont(new Font("Dialog", 1, 20)); label.setMaximumSize(new Dimension(1000, label.getPreferredSize().height)); label.setPreferredSize(new Dimension(200, label.getPreferredSize().height)); box.add(label); JButton acb = new JButton("AC"); acb.addActionListener(ce); acb.setFont(new Font("Dialog", 1, 15)); box.add(acb); frame.getContentPane().add(box, BorderLayout.NORTH); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); }
935 :
>>919 その2 :04/12/17 17:56:10
static void error(String text) { opeFlag = 0; value = 0; numFlag = true; label.setText(text); Component[] cs = pal.getComponents(); for (int i = 0; i < cs.length; ++i) cs[i].setEnabled(false); } static class Number implements ActionListener { public void actionPerformed(ActionEvent e) { if (opeFlag == 0) value = 0; StringBuffer sb = new StringBuffer(label.getText()); if (numFlag) sb.delete(0, sb.length()); numFlag = false; String text = sb.insert(sb.length(), ((JButton) e.getSource()).getText()).toString(); if (text.length() > MAXP) { error("エラー(桁あふれ)"); return; } label.setText(text); } } static class Operator implements ActionListener { public void actionPerformed(ActionEvent e) { if (opeFlag != 0) ee.actionPerformed(e); if (label.getText().startsWith("エラー")) return; opeFlag = ((JButton) e.getSource()).getText().charAt(0); value = Long.parseLong(label.getText()); numFlag = true; } }
936 :
>>919 その3 :04/12/17 17:56:52
static class Clear implements ActionListener { public void actionPerformed(ActionEvent e) { if (((JButton) e.getSource()).getText().equals("C")) { if (numFlag) return; } else { opeFlag = 0; value = 0; Component[] cs = pal.getComponents(); for (int i = 0; i < cs.length; ++i) cs[i].setEnabled(true); } numFlag = true; label.setText("0"); } } static class Equal implements ActionListener { public void actionPerformed(ActionEvent e) { if (numFlag || opeFlag == 0) return; long num = Long.parseLong(label.getText()); switch (opeFlag) { case '+': value += num; break; case '−': value -= num; break; case '*': value *= num; break; case '/': value /= num; break; } if (String.valueOf(value).length() > MAXP) { error("エラー(桁あふれ)"); return; } label.setText(String.valueOf(value)); numFlag = true; opeFlag = 0; } } }
熱伝導方程式の解析解による図式化を陰的解法にてプログラムできたらお願いします。
938 :
デフォルトの名無しさん :04/12/17 18:19:46
解を導く数式を具体的に詳しく書いてくれれば、回答率がアップする。
939 :
M.B. :04/12/17 21:28:55
>>920 【神は】Java の宿題で困っている奴に
思いつきで蜘蛛の糸とか垂らしてみるスレ【見ている】
【上司は】Javaの宿題に困ってる奴に思いつきでものをいってみるスレ【言うだけ】
941 :
M.B. :04/12/17 22:46:46
【講師も】アフォなJavaの課題に苦しむアフォをいたぶるスレ【学生も】
942 :
M.B. :04/12/17 22:57:30
【Javaで】復活!! ナノピコ教室【挑戦】
問題1:各行に数値が一つ書いてあるファイルNumbers.txtがあるとします。 そのファイルの名前を指令行の引数に指定すると、 ファイル中の数値の合計、最大値、最小値を求めて 出力するプログラムを作ってください。 Numbers.txtの中身 21 23 50 3 23 50 2 90 231 42 どなたかお願いします!
成績ファイルには,各行にテストを受けた人の名前とその点数が書いてあります。 名簿ファイルには、テストを受けたか否かに関係なく、 授業を選択している人の名前すべてが各行に1人分ずつ書いてあります。 これら二つのファイルが与えられた時に、 授業を選択している人 全員のテスト状況を示したファイルを書き出すプログラムを作ってください。 テストを受けた人については名前の後ろにその点数を書き, テストを受けてない人については名前の後ろに(点数の代わりに)"ABSENT"と書いてください。 成績ファイルの名前は指令行の第1引数に、 名簿ファイルの名前は指令行の第2引数に、 書き出すファイルにつける名前は指令行の第3引数に, それぞれ指定するようにしてください。 import java.io.*; import java.util.*; public class Seiseki { public static void main(String[] args ) {
つづき try { FileReader fr = new FileReader(args[0]); BufferedReader br=new BufferedReader(fr); Hashtable students=new Hashtable(); // 名前をキー、得点を値として格納 while (true) { String line=br.readLine(); if (line==null) break; StringTokenizer st=new StringTokenizer(line); ??? // 名前と得点を切り出し、studentsに格納 } br.close(); FileReader fr2 = new FileReader(args[1]); BufferedReader br2=new BufferedReader(fr2); FileWriter fw=new FileWriter(args[2]); PrintWriter pw=new PrintWriter(fw);
while (true) { String line=br2.readLine(); if (line==null) break; String score=(String)???; // 名前をキーとして、得点を取り出す if (score==null) score="ABSENT"; pw.println(line+" "+score); } pw.close(); br2.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } ???部分の穴埋めおねがいします
>>944 一つ目の???は
students.put(st.nextToken(), st.nextToken());
次は
students.get(line);
ウィルス怖いから、誰もワード文書なんて開きません。
949 :
デフォルトの名無しさん :04/12/18 17:08:16
すいませんこの宿題わかりません解いてくださいお願いします。 課題5におけるHumanクラスのメンバ変数を、Swingで作成したウィンドウに表示するDisplayHumanクラスを作成せよ。 但し、最低限、次の条件を満たすこと。この条件を満たしていれば、 アプリケーションの見た目や動作は各自が趣向を凝らしても良い。 ・表示するインスタンスは1つのみでよい。表示方法は自由だが、なるべく個々のデータが分かり易くなるよう工夫すること。 ・Humanクラスのインスタンスの作成については、クラスのメンバ変数をテキストファイルで用意し、 それを読み込んで作成すること。 テキストファイルの名前およびファイル内部の記述形式は自由に設定してよいが、 各自が作成しているHumanクラスのメンバ変数のすべてをデータとして記述しておくこと。 ・Humanクラスとは別に作成するクラスは一つにまとめても良いし、複数に分かれても構わない。 ・プログラム内の重要な箇所には処理内容のコメントをなるべく詳しく記述すること。 【ヒント】 テキストファイルを読み込んで、その中身を取り出す処理には StringTokenizer クラスが利用できる。
950 :
デフォルトの名無しさん :04/12/18 17:10:51
続き 課題5 Human.java public class Human{ // protected String m_name; // protected byte m_age; // protected byte m_weight; protected int m_height; public Human(String name) { m_name =name; m_age = 0; m_weight = 0; m_height = 0; } public Human(String name, byte age){ m_name = name; m_age = age; m_weight = 0; m_height = 0; }
951 :
デフォルトの名無しさん :04/12/18 17:11:28
public void setAge(byte age) { m_age = age; } public void setWeight(byte weight) { m_weight = weight; } public void setHeight(int height) { m_height= height; } public String getName(){ // return m_name; } public byte getAge(){ // return m_age; } public byte getWeight(){ // return m_weight; } public int getHeight(){ return m_height; } public void printProfile(){ System.out.println(m_name); System.out.println(m_age); System.out.println(m_weight); System.out.println(m_height); } }
952 :
デフォルトの名無しさん :04/12/18 17:12:14
DisplayHuman.java public class DisplayHuman extends JFrame{ public static void main(String arg[]){ DisplayHuman win = new DisplayHuman(); win.setSize(400.200); win.setVisible(true); win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } DisplayHuman() super("Swingによるwindow表示のサンプル"); } public void paint (Graphics g){ super.paint(g); g.drawString("Hello, World!!", 150, 100); } }
953 :
デフォルトの名無しさん :
04/12/18 23:57:40 どなたかよろしくお願いします。 1.まずダイアログボックス内にあるユーザーネームとパスワードを テキストエリア内に入力し、ログインボタンをおしてログインします。 2.新しいダイアログボックスが現れ、 そこには新しいダイアログボックスを作るためのテキストエリアがあります。 そのテキストエリアは ----------------------------------------------------------------------------- ・Title [ ] //新しいダイアログボックスのタイトル(タイトルバー内に表示) ・Width [ ] //ダイアログボックスの横幅を指定 ・Height[ ] //ダイアログボックスの縦幅を指定 ・X [ ] //X座標、ダイアログボックス表示位置を指定 ・Y [ ] //Y座標、ダイアログボックス表示位置を指定 ・Resize[ ] //Trueかfalseか ・Clear [ ] //CLEARボタン、何に使うのかよくわからないのですが、なくてもいいです。 ・Exit [ ] //EXITボタン、何に使うのかよくわからないのですが、なくてもいいです。 ----------------------------------------------------------------------------- JLabelを使ってTitleやweight, Heightなどを表示させてください。 テキストエリア内に入力した後にOKボタンを押すと 指定したとおりのダイアログボックスが新しく現れます。 というプログラムです。 どうかよろしくお願いします。