学校の宿題は俺にやらせて下さいver.1.1βfor Java >>919 漏れの想像では、すでにRMIのサーバとインターフェースは存在して、
それを使ってアプレットでクライアントを作ってみなさい、みたいのかと。
そうだったら、先生のくれたリモートインタフェースを見せてくれたら、
画像のドラッグなんかとどう絡むんだって疑問も解消するかもしれないしと。
まずは、課題の内容をできるだけさらしてくれ。
>>886 漏れも変なことして追加ソース送ったりして、気づいてくれるか心配だったのよ。
でも、よかった。がんばってね。
先生がくれたのは、前述のURLのRMI編そのままのコピーでした。 RMIを使ってappletを表示できるようにするのが課題です。 そこのホームページのRMI(アプレット)編をそのままコピーするのはまずいと思うので 画像を表示させればいいのかなと安易に考えていたのです。
RMI が何だか分かっているのかね。
例えば x を変数とする関数 f があったとする。
クライアントで x を決める。f がどんなものかはサーバしか知らない。
x だけサーバにおくり、サーバはクライアントにもらった x を元に、
f(x) の値のみを、クライアントにおくり返す。
このやりとりが、int y = server.f(x);
みたいにほとんどメソッド呼び出しだけでできる、というのが RMI の利点だ。
RMI を使うことだけが課題なら、画像表示なんて意味は無い。かえってめんどくさいだけ。
>>783 以降でも拾っていきなさい。
>>918 の返答が無いので手すさびに作ってみた。
import java.util.*;
public class Q918 {
public static void main(String[] args) {
String equation = "3 + 4*10/9 - 12*3";
Q918 q918 = new Q918();
Node node = q918.createTree(equation, 0);
double value = node.getValue();
System.out.println(equation + " = " + value);
}
public Node createTree(String str, int level) {
String separators = (level == 0 ? "+- " : "*/ ");
StringTokenizer st = new StringTokenizer(str, separators, true);
if (st.countTokens() == 1) {
return new NumericNode(new Double(str).doubleValue());
}
//続く
Node left = null; OperatorNode ope = null; while (st.hasMoreTokens()) { String token = st.nextToken(); if (token.equals(" ")) { //nop } else if (separators.indexOf(token) != -1) { OperatorNode node = new OperatorNode(token.charAt(0)); node.setLeft(left); left = null; ope = node; } else { Node node = createTree(token, level + 1); if (ope == null) { left = node; } else { ope.setRight(node); left = ope; ope = null; } } } return left; } }
abstract interface Node { public abstract double getValue(); } class NumericNode implements Node { private double value; public NumericNode(double value) { this.value = value; } public double getValue() { return value; } } class OperatorNode implements Node { private char type; private Node left, right; public OperatorNode(char type) { this.type = type; } public void setLeft(Node node) { this.left = node; } public void setRight(Node node) { this.right = node; }
public double getValue() { double lv = left.getValue(), rv = right.getValue(); switch (type) { case '+' : return lv + rv; case '-' : return lv - rv; case '*' : return lv * rv; case '/' : return lv / rv; default : // no reach throw new IllegalStateException(); } } }
・Node は2分木の各ノードを表す。値を返す。 ・2種あって、一つは数値そのもの。もう一つは演算子を表し、2つの Node をその演算子で繋ぐ。 ・数値を表す Node はもちろんその値をそのまま返す。 演算子の方は、Node 二つを演算子で計算して返す。 それぞれの子Node もやはり演算子であったなら、再帰的に計算される。 ・createTree で解析する。最初は +, - だけでわける。 すると 4*10/9 なんていう +, - を含まない塊ができるから、 これをまた createTree につっこむ。その時引数 level に 1 をいれておくと、*, / で分ける。 工夫次第で % だの ^ だのも使える。() は考えてない。 ・最後に現れた + もしくは - がルートになる。これを main で使う。 getValue すればそれでいい。 ・文法エラーチェックしてない。
おお。頑張ろうか思ったら
>>935 で解決ね。
>>921 実はその質問、マルチポストで、初心者スレの976あたりで、
本人が逆ポーランド記法を使いますと自己解決してたり。
そんならここにもそう書いてほしかった。。。
>>921 どんまいどんまい。ソースは漏れがシカと見せていただきました。
ちょっとカッコいいね。
>>919 っていうか、アプレットだけで済むと思ってるのかもしれないけど、
そのURLで言えばRMI編に出てくるサーバとリモートインターフェースの実装も書かないといけないよ?
あせってるのは分かるがせっかく
>>935 が分かりやすく説明してくれたんだから、
ちゃんと読んでたら
>>783 が高度すぎるなんてことは思わないと思うが。
いかにもそのURL見て、ちょいと変えて作ったなっぽいの作るからちょっと待って。
>>929 様
ありがとうございました。本当に助かりました。
929様からいただいたソースを自分の理解できる範囲で改造して
提出しました。なんとかいけそうです。
こんなバカモノのために貴重なお時間をさいていただいてありがとうございました。
こんなことを二度と起こさないよう精進してがんばっていきたいと思います。
本当にありがとうございましたm(__)m
javaの宿題を出されてかなり困っています。 borland Jビルダー7を使っています。 これでゲームを作れと言われて、簡単なじゃんけんゲームを作ろうと思ったのですが、 もはや手詰まりになってしまって・・・。 みなさんのお力を貸して頂けたらと・・。 グー、チョキ、パー、リスタートのボタンがあり、 リスタートを押すとグーなどの画像(自作)がシャッフルされ、 グーなどのボタンを押すと、結果画面(あいこ、まけ、など)が表示される。 そしてまたリスタート押すと・・・ループ。 こんなゲームを作りたいのですが、お願いできるでしょうか。
950 :
デフォルトの名無しさん :04/01/28 11:35
問題1 数値積分の台形則を利用して、分割数nを引数(int型)と∫x^2dx(0≦x≦1)を戻り値(double型)とするクラスメソッド(quadrature)を作成ことにより、分割数nを10^0〜10^3と細かくしたときの厳密解に対する相互誤差を出力するjavaプログラムを作成せよ。 問題2 ニュートン・ラフソン法を利用して、f(x)=x^5−100と定義して、double型で計算することをにより、100^1/5(有効数字7桁)を数値的に求めるjavaプログラムを作成せよ。なお、初期値をx=3とする。 以上の2問です。本当によろしく御願い致します。
誰か助けてください! 大学でレポートが出されまして、これが明日までに出来ないと留年してしまいます! どなたか宜しくお願いします・・・・(T_T) 行列AのN乗を求めるプログラムを記述せよ。 ただしAの入力は void getdata(int *n,double **a)を呼び出せば サイズnとデータaの入力が出来るものとする。 っていうものです。このままでは本当に留年が確定してしまうのでどなたか助けてください・・・・・
残念。第4水曜はこのスレの定休日です。 てゆうかJavaの課題なの?
マルチポストかよ!
public static double quadrature(int n) {
double h1 = (double)n*(double)n*(double)n;
double s = 0.0;
for (double m=1.0; m<=(double)n; m += 1.0) {
//台形公式からつきつめていくとこうなる
s += (m*m + 0.5 - m)/h1;
}
return s;
}
>>950 これ参考にして。あとは「相対誤差」が具体的にどういう表し方のものか分からないからできない。
あ、これもそのまま使えるか。 int n = 1; for (int i=0; i<=3; i++) { double s = quadrature(n); System.out.println("n = 10^" + i + " : " + s); n *= 10; }
958 :
助けて!! :04/01/28 19:44
1から8までの数字が書いてある8つの正方形のこまが3×3の空間に下図左の ように置いてあります。0の所に駒を滑らせて入れる操作を繰り返して下図 右の終了状態を作りたい。これを解くプログラムをC言語で作成してください。 内容説明していただけるとありがたいです。 初期状態 終了状態 283 123 164 804 705 765 これが、できなくて困ってます。 助けてください。お願いします。
またかよ。しかもここは Java スレだボケ死ね。 そもそもユーザによる操作なのか、それとも解法を考えてプログラムにさせるのか。 後者の場合、GUI は必要なのかそれとも解法を解説できればいいのか。 前者あるいは後者で GUI が必要な場合、プラットフォームは何なのか。 それぐらい書け。書けなきゃ留年しろ。
960 :
助けて!! :04/01/28 20:15
961 :
デフォルトの名無しさん :04/01/29 14:46
import java.io.*; public class P1 { public static void main(String[] args) { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); System.out.println("文字列を入力して、エンターを押してください。"); try { String s = br.readLine(); int i = s.length(); String msg = "入力した文字列の長さは " + i + "です。"; System.out.println(msg); } catch (IOException e) { System.out.println("エラーが発生しました。"); } } }
上のプログラムを変更して、 文字列を入力してエンターを押すと、この文字列の中に"a"のみからなる 文字列の最初の文字列を求めて表示し、ない場合は「ありません」と表示 したいのですが、分からないので助けて下さい。 例えば、 sdaaddfadtだと…最初の文字列はaaです。 btgertだと…ありません saseaaassaだと…最初の文字列はaです。 というふうにしたいんです。
int index = s.indexOf("a"); if (index == -1) { //ありません } else { String found = ""; while ((index < s.length()) && (s.charAt(index) == 'a')) { found += "a"; index++; } //最初の文字列は found }
>>963 レスありがとうございます!
でもごめんなさい、どうしたらいいのかわからないのですが…
int i= 〜 (msg); と差しかえ。 メッセージ表示くらいは自分で類推してみよう
>>965 たびたびすみません!最後の
//最初の文字列は found
この部分を教えていただけませんか?
あ、自己解決できました。本当にありがとうございました!!!
>>949 さん
自分で頼んでおいて、返信遅れて申し訳ない。
わざわざありがとうございます。
作って頂いたzipファイルを落とそうとしたのですが、
そのファイルは見当たりませんと出て、落とせませんでした。
なんだか図々しいですが、もう一度アップをお願い出来ませんでしょうか。
お手数おかけします、宜しくお願いします。
落とさせて頂きました。 助かります、わざわざありがとうございました。
初心者スレが荒れているのでこちらに質問を転載させていただきます 現在、中位記法から逆ポーランド記法へ変換するプログラムを書いているところなのですが.... if(arraList.get(size) == 1から10までの数字){ //リストのトップが演算子だったらそのままリストに追加 if(arrayList.get(size-1) == "演算子" { tmp = s.charAt(i); //式中の i 番目の要素を tmp へ arrayList.add("" + tmp); } //(size -1)番目が整数なら { (size -1)番目の要素*10 + (size)番目の要素 } else{ ******************************** ******************************** ******************************** } } となるようにプログラムを書きたいのですが、***で書いた部分がどうしてもできないのです。 charAt() を利用して式の要素を一文字ずつ読み取っているため一つ前の要素が数字だったら 数字を合成してあげないと計算ができないんですよ。。。。 [1, 2, +, 3] と格納されているものは [12, +, 3] と形を変えたいといえばわかりやすいでしょうか? こちらもできたらソースを書いていただけると助かります
>>971 > //(size -1)番目が整数なら { (size -1)番目の要素*10 + (size)番目の要素 }
>>971 ちょうどそこの作業ができずにかれこれ3日ほど悩んでいます。。。
なにとぞご教授を
>>973 とりあえず s, size, i の意味を教えてもらおうか
975 :
デフォルトの名無しさん :04/02/01 15:25
>>975 arrayList.set(size-1, (String)arrayList.get(size-1) + Data);
とかどうよ?
あと,
・文字列の比較はString.equalsを使うべき
・sign変数を使わずにStack.emptyを使うべき
・data変数とData変数があるのは紛らわしいのでやめるべき
・ArrayListとStackを混在しているのはなぜ?
>>977 >・文字列の比較はString.equalsを使うべき
最初に charAt で一文字ずつString型のデータを読み取れるのを知ったので String.equals("")
みたいな使い方をしなかったんですよ。。。
>・sign変数を使わずにStack.emptyを使うべき
ごもっともです。。ご指摘ありがとうございます
>・data変数とData変数があるのは紛らわしいのでやめるべき
Data変数をなにか別の変数に変えてみます
>・ArrayListとStackを混在しているのはなぜ?
ArrayList は push した順番に pop する必要がないので逆ポーランド記法に式を並べ替えたあと
に
for(int i =0;i<data.length;i++){
A = arrayList.get(i);
*
*
*
}
のようにして0番地からでも値を取り出せるので使っていました。
また、stack は一つ前のスタック領域にある演算子のみを取り扱うために作りました
>>978 > >・data変数とData変数があるのは紛らわしいのでやめるべき
> Data変数をなにか別の変数に変えてみます
Java では慣習的に
・変数名,メソッド名は小文字から
・クラス名,インターフェース名は大文字から
となっています
980 :
デフォルトの名無しさん :04/02/02 07:19
>>979 知らなかったです!!
ありがとうございました
981 :
java3D超初級者 :
04/02/02 09:52 3Dキャンパス上で初めからある3Dポリゴンや3Dな線などをAとします。 新たに3DポリゴンがButton追加ボタンにより追加されました。これをBとします。 Button再描画ボタンを押すと、AはそのままでBだけを削除するプログラムを作成せよ だれかこの課題の答えを教えてください;