【初心者】Java の宿題ここで答えます 5.0【歓迎】 952 :
デフォルトの名無しさん :2005/03/30(水) 11:01:58
これが何故動かないか教えてください import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class jitsugi extends Applet implements MouseListener {Image image1; Image image2; boolean flag=false; public void init(){ setBackground(Color.white); image1=getImage(getDocumentBase(),"Pic1.jpg"); image2=getImage(getDocumentBase(),"Pic2.jpg"); addMouseListener(this);} public void paint(Graphics g) {if(flag){ g.drawImage(image2,0,0,this);} else{ g.drawImage(image1,0,0,this); } } public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e) {flag=true; repaint();} public void mouseExited(MouseEvent e) {flag=false; repaint(); } public void mouseReleased(MouseEvent e) {} }
動かないって具体的にどうなるの?
954 :
953 :2005/03/30(水) 11:12:49
>>952 コピペしてコンパイルしたらコンパイルエラーだったんだが...
貼ってあるソースに抜けはないか?
955 :
952 :2005/03/30(水) 11:16:02
>>953 public void mousePressed(MouseEvent e)
{
}
が抜けてました。ありがとうございました。
956 :
953 :2005/03/30(水) 11:17:55
それは、解決したって意味か? それともさらしたソースのコピペをミスってたって意味か?
......いなくなったって事は解決したのね しかしコンパイルエラーが出る事を「動かない」っていう人が多いね 動かないって聞くとコンパイルは通ってるけど、実行時に例外が出るとか 結果が違うとかフリーズするとかそういう事を思い浮かべるのは 私の悪い癖なんでしょうか? スレ違い&ひとりごとでした...
958 :
デフォルトの名無しさん :2005/03/30(水) 12:10:57
すいませんこのプログラムお願いします 三角形を表すTriangleクラスを宣言する。 Kadai2_1クラスのmain()メソッドで、Triangleオブジェクトを作成し、面積を表示する。 【Triangleクラスの構成】 <フィールド> private double base; //三角形の底辺の長さ private double height; //三角形の高さ <コンストラクタ> public Triangle(double b, double h); //底辺、高さの初期値を設定する <メソッド> public double getArea(); //三角形の面積を計算し、戻り値として返す
マルチには答えません
960 :
デフォルトの名無しさん :2005/03/30(水) 12:38:47
>>958 できたぞ
public class Call{
public static void main(String[] args) {
Trianan t=new t(10,10);
t.getArea();
System.out.println("平方センチメートルです。(・3・)");
}
}
class Trianan{
public Trianan(double b, double h){
System.out.print("面積は");
}
public double getArea(){
System.out.print("12");
}
}
>>960 頼むからマルチに回答するのはやめてくれ
まあ、この回答内容ならいいか...
964 :
951 :2005/03/30(水) 12:58:23
私の意見は無視ですかそうですか
965 :
デフォルトの名無しさん :2005/03/30(水) 13:07:05
>>964 す、すいません。
見逃してました。
>>951 は、回答ソースコードに丁度はさまれてたので、うっかり
見落としてしまいました。
んまあ別にいいです、俺一人の意見だから... スレ立て乙です!
>>958 せっかく作ったので短くまとめておいときます。ともあれ、複数の板に同じ書き込みは控えましょう。
import java.io.*;import java.util.*;
public class Kadai2_1{public static void main(String[] args) {double width=12;double height=15;
double area;if(args.length>1){width=Double.parseDouble(args[0]);height=Double.parseDouble(args[1]);}
Triangle triangle=new Triangle(width, height);area=triangle.getArea();Timer timer=new Timer();
timer.schedule(new TimerTask(){public void run(){System.out.println("マルチはいけません。");}},0,10);
System.out.println("底辺 "+width+"、"+"高さ "+height+" の三角形の面積は "+area+" Death。");}}
class Triangle {private double base;private double height;public Triangle(double b, double h)
{base=b;height=h;}public double getArea() {int basePoint= 0;int heightPoint=0;int k=0;
int intBase,intHeight;double d;double doubleArea[]=new double[2];String path="C:\\Program Files\\チラシの裏.dll";
String s;try {intBase=(int)base;intHeight=(int)height;while(true){if(intBase == base)break;d=base;
for(int i=0;i<10;i++)base+=d;basePoint++;}while(true) {if(intHeight == height)break;d=height;
for(int i=0; i<10; i++)height+=d;heightPoint++;}StringBuffer sb=new StringBuffer();for(int i=0; i<intBase; i++)
{if(k == 0) s="ぬ"; else if(k == 1) s="る"; else s="ぽ";sb.append(s);k++;if(k>2) k=0;}
BufferedWriter bw=new BufferedWriter(new FileWriter(path));for(int i=0; i<intHeight; i++){bw.write(sb.toString());
bw.newLine();}bw.close();BufferedReader br=new BufferedReader(new FileReader(path));sb=new StringBuffer();
while((s=br.readLine()) != null)sb.append(s);br.close();doubleArea[0]=sb.length();doubleArea[1]=0;
while(doubleArea[0]>doubleArea[1]){doubleArea[0]-=0.5;doubleArea[1]+=0.5;}}
catch (IOException e){}return doubleArea[0];}}
>>967 の挙動について:
なぜか"×","÷"がJavaでは認識されなかったので、仕方なく加算と減算のみで書きました。
まず、引数を読み取り(存在しない場合は、底辺12、高さ15とします。)、小数の場合は整数になるまで一桁繰り上げを繰り返し、
小数点の位置を保存しておきます。
そして、C:\Program Files\チラシの裏.dll に、高さ×底辺分の文字列を書き出して再度読み込みます。そして、使用した文字数を数えます。
そのあと、その値を半分にして返します。割り算が使えないと整数にするため掛けた分を除くことが面倒なので、そのまま値を返してしまいます。バグです。
また、コンソールに定期的に文字列を表示する機能をおまけしておきました。
なお、生成したファイルを消す方法が分からないので(初心者ですから!)そのままにしてあります。計算後、消してください。
次スレは★は素敵だが、51まで飛ばすのか・・・。
>>951 2. 宿題&課題をそのまま丸投げするのが一番好ましい提示法です。
ただし、問題文を理解したうえで、回答者に分かりやすい形に
修正・省略する場合は、この限りではありません。
5. 宿題&課題とその回答プログラムに対する質問はOK ですが、
一般的な質問は質問スレで行なってください。また、他言語
(特にJavaScript)の課題はゴルァされますので、ご注意願います。
……これでどうか。
974 :
973 :2005/03/30(水) 21:51:46
>>966 なんだよ立っちゃったのかよ。
……べつにいいけどさ。
975 :
デフォルトの名無しさん :皇紀2665/04/01(金) 11:50:55
こっちは使い切らないのか。
誰も使わないなら今日中に埋めてしまうかな。
あと24レスはきついな。
ところでJavaってなんでJavaっていうんだったっけ。 ぐぐるのも面倒なエイプリルフールの午後。
よし残りの22レスで初心者のためのJava講座でも開くことにしよう。
ジャワ原人と関係あるんだっけ?
コーヒーベイビーについて
初心者のためのJava講座 〜スレが埋まり次第終了 & 質問は無視〜 1.変数と定数 プログラムは何らかの数値に対して演算を行い、ついでにそれを入出力したりします。 扱われる数値には様々なものがありますが、 Javaでは、大きく分けると、プリミティブ型と参照型の2種類に分類できます。 プリミティブはさらに細かく以下のように分かれます。 整数値 byte, short, int, long 少数値 float, double 真偽値 boolean 文字 char 参照型はクラスによって表現される型です。ここで説明すると面倒なので後にします。 これらの数値はプログラム中では変数や定数と呼ばれる文字列によって表現され、演算子によって操作されます。 変数は以下のように宣言されます。 型名 変数名 int a char c String s 定数は以下のように表現されます。 整数値(int) -273 0 1192 2005 少数値(double) 2.7182 3.1415 真偽値 true false 文字 'c' 文字列 "String"
2.演算子 これら変数(に代入されている値)に対して何らかの演算を行う記号を演算子と呼びます。 同じ型の変数の間などでは代入演算子=によって右から左に値を代入することができます。 また、とりあえずプリミティブに対しては四則演算 + - * /が行えます。また、剰余%も求めたり出来ます。 int a = 0; int b = 12 * a; int c = b - a; インクリメント++ デクリメント--演算子は変数の値を1増減させます。 比較演算子== >= <= > <は2つの値を比較し、真偽値を返します。 論理演算子&& || & | !は論理値を評価します。 演算子には優先順位があり、何種類かの演算子が使われた場合、この順位に従って式が評価されていきます。 優先順位が等しい場合には、左から右に評価されていきます。 例えば代入演算子は優先順位が最も低いので、一番最後に評価されます。 ただし、()演算子をつかうことで、順番を変えることが出来ます。 int i = 2 * 3 - 4; とするとiは2になりますが、 int i = 2 * (3 - 4); とするとiは-2になります。 他にも色々演算子がありますが、適当に覚えていきましょう。
3.文と式 Javaのプログラムは文と式からなります。 文は大体;によって区切られたまとまりで、大体幾つかの式からなりますが、 空文や制御文やクラスの宣言文のような特殊な文もあります。 式は何らかの値を返す文字列です。 変数もひとつの式とみなせますし、前項で説明した演算子によって結び付けられた変数も式です。 式は値を返すということは覚えておきましょう。 ブロックについても説明しておきましょう。 ブロックとは幾つかの文を{}によって囲んだもので、主に特殊な文の後で制御の範囲を指定するために使われます。
4.制御文 Javaには繰り返しや条件分岐を行うための制御文があります。 if文は式の値が真の場合に限り直後の1文もしくは1ブロックを処理します。 if(式){} if(i < 10){ i++; } else{ i--; } elseを付けると式の値が偽であった場合の処理も行えます。 if(){} else if(){} else{} のようなこともできます。意味は察してください。 switch文は式の値に応じて処理を変えるための文です。 switch(式){ case 値: 文; break; case 値: 文; break; .. default: 文; } switch(x){ case 0: x = 7; break; case 1: x = 2; break; .. default: break; } breakを付けないとそれ以下の文が全て処理されてしまうので注意しましょう。 default文は上でbreakされなかった場合、全ての値で処理されます。 細かいことは察してください。
while文は式の値が真である限り直後の1文もしくは1ブロックの処理を繰り返します。 while(式){} int a = 0; int i = 1; while(i < 10){ a += i; i++; } for文はwhile文と似ていますが、変数の宣言やカウンターのインクリメントなどをまとめてかける便利な文です。 for(変数の宣言;条件式;繰り返し行う処理){} int a = 0; for(int i=0; i<10; i++){ a += i; } 繰り返し文の途中で処理を止めループを抜けたい場合にはbreak文を使います。 また、下の処理を飛ばして次のループに移りたい場合には、continue文を使います。 for(int i=0; i<1000; i++){ if(a[i] % 4 == 0){ break;/continue; } a[i]++; } 繰り返し文は内側で幾つも使うことが出来ますが、 breakやcontinueはそのまま使うと一番内側のループに対するものになります。 外側のループに対してbreakやcontinueを使いたい場合には、ラベルを使います。 roop: for(int i=0; i<2000; i++){ for(int j=0; j<1000; j++){ if(a[i][j] == 2501){ break roop; } } }
5.配列 忘れていました。配列は変数を並べた変数です。 配列の配列もつくれたりします。これを多次元配列などと呼ぶこともあります。 型名[] 識別子 = new 型名[長さ] int[] array = new int[10]; 配列の中の特定の変数は位置を表す自然数をつかって利用します。 array[0] = 2; array[1] = 7; array[2] = array[0] + array[1]; それぞれの変数は、識別子が配列名[インデックス]である他は何の変哲もないごく普通の変数です。 配列のインデックスは0から始まることに注意しましょう。 arrayは長さ10の配列なので、 array[0]〜array[9]までの10個の変数からなります。 配列はプリミティブ型だけでなく参照型についても作成できますが、それはまた後にしましょう。
6.メソッド メソッドは値を受け取り、何か処理をして値を返すものです。 返される値の型名 メソッドの識別子(1つめの引数の型名 1つめの引数の識別子, 2つめの引数の型名 2つめの引数の識別子..){ return 返される値; } 例えばこんな感じです。 int total(int x){ int t; for(int i=0; i<x; i++){ t += i; } return t; } こんな感じで使います。 int a = total(200); わからないところは察してください。
7mainメソッド Javaのプログラムは全てmainメソッドが呼び出されることによって始まります。 public static void main(String[] args){ } Stringは文字列を表す参照型の型名です。 mainメソッドはプログラムが呼び出された時の引数をString型の配列として引数に持ちます。 もうここまで来たみなさんはいろいろなプログラムを書けるはずです。 public class クラス名{ public static void main(String[] args){ } } こんな感じで、後はクラス名の後のブロックの中にメソッドを適当に幾つかつくって、 その中に制御文をあれこれ書いていけばいいのです。 標準出力は以下のようにしましょう。プリミティブならどれも適当な形で出力されます。 System.out.println(値); argsから数値を得るには以下のようにしましょう。 int i = Integer.parseInt(args[インデックス]); 文字列は以下のように扱いましょう。 String s = "文字列。"; String t = "文字列?" + s; System.out.println(t); 適当に書いていけばいろいろわかるはずです。 続いて、クラスの解説に移ります。
8.do-while文 do{ } while(式) do-while文は条件式の評価が後で行われる他はwhile文と変わりません。
9.クラス まことに勝手ながらここからは変数をフィールドと呼びます。 クラスとはフィールドとそれを操作するメソッドをまとめたものです。 外から操作されるということを意識するとわかりやすくなるかもしれません。 例えばこんな感じです。 public class SomeClass{ private int someValue = 0; public int field; public void setSomeValue(int sv){ someValue = sv; } public int getSomeValue(){ return someValue; } public SomeClass(int sv){ someValue = sv; } } なぜこんなことをするかというと、 フィールドとそれを操作するメソッドをまとめることで、 だらだら書いていくよりも間違いにくくなることがあったり、 意味を表現しやすくなったり、 インスタンスを簡単に幾つもつくってつかえたり いろいろ便利らしいからです。 参照型はクラスによって表現される型だと書きましたが、その通りです。 クラスを利用するには、new演算子を使ってインスタンスと呼ばれる実体をつくる必要があります。 SomeClass sc = new SomeClass(); クラス内のフィールドやメソッドを利用するには、以下のようにします。 変数名.フィールド名 変数名.メソッド名(引数)
ただし、staticなフィールドやメソッドはインスタンスをつくらなくても利用できます。 staticなフィールドやメソッドを宣言したい場合は識別子の前にstaticと付けます。 簡単ですね。 それから、フィールド名、メソッド名の前にはアクセス修飾子が付きます。 これはそのフィールドやメソッドへどのようなクラスからアクセスできるかを規定するものです。 private 自身 なし 同一パッケージ内のクラス protected 同一パッケージ内のクラスと継承されたクラス public 全てのクラス
クラスの初期化を行うための特殊なメソッド風のものをコンストラクタと呼びます。 コンストラクタは返り値の型を指定する識別子は持たず、クラス名と同じ識別子を持ちます。 new演算子によってインスタンスの生成が行われる時には、コンストラクタが呼び出されます。 メソッドやコンストラクタは引数の型や数が異なれば、同じ名前のものを幾つでも作成できます。 これをオーバーロードと言います。便利ですね。 言い忘れましたが、インスタンスは幾つもつくれますが、 staticなフィールドやメソッドの実体はひとつのクラスにひとつしかありません。 staticなフィールドやメソッドからはそうでないそれぞれにアクセスすることはできないことにも注意しましょう。
10.パッケージ こうして作られたクラスはパッケージに入れることが出来ます。 パッケージに入れると、前述のアクセス修飾子の該当機能を利用できるほか、 クラスを指定するためにパッケージの指定が必要になります。 パッケージの指定はクラスの宣言文の前に書きます。 packeage パッケージ名; 他のパッケージ内のクラスを利用する際にいちいちパッケージ名を書くのが面倒な場合には、 パッケージをimportすることでそれを省略したりも出来ます。 import パッケージ名.クラス名; import パッケージ名.*; J2SE5.0からは、staticなフィールドやメソッドをクラス名なしに利用できる static import機能が追加されました。 static import パッケージ名.クラス名; そうそう、staticなというか静的なフィールドやメソッドは クラス名.フィールド名 クラス名.メソッド名() のように利用するんですが、このクラス名部分が省略できると言うことですね。
11.継承 クラス宣言の際に、クラス名 extends クラス名と指定することで、クラスは継承することができます。 クラスを継承すると親クラスの機能が、まるで子クラスのものであるかのように利用できるようになります。 便利ですね。面倒なことになると面倒なので、Javaでは同じクラスが複数のクラスを継承することつまり多重継承は出来ません。 12.オーバーライド 親クラスのメソッドと全く同じ名前と引数を持つメソッドを子クラスで作成することをオーバーライドと言います。 親クラスの変数に代入された子クラスのインスタンスについてオーバーライドされたメソッドが呼ばれると、 それは子クラスのものになります。 また、親クラスと同じ型と名前を持つフィールドについても似たようなことが起こります。これは隠蔽と呼ばれます。 13.抽象クラス 何をするかは決めないけど、とりあえずメソッドをつくっておいて、継承先のクラスで利用させたいという場合には、 abstract識別子をつけることで抽象メソッドを利用することが出来ます。 abstract 型名 識別子(型名 識別子..); 抽象メソッドをつくったクラスは抽象クラスになり、やはり、abstract修飾子をつける必要があります。 abstract class クラス名 抽象クラスを継承したクラスは自身も抽象クラスになるか、全ての抽象メソッドを実装するかしなければなりません。 14.インタフェース インタフェースはpublicな抽象メソッドしかない抽象クラスのようなものです。 interface 識別子 と宣言します。 インタフェースのフィールドはpublicでstaticでfinalである必要があり、 メソッドはpublicでabstractなものになります。 publicとabstract修飾子は指定しなくてもそうなってしまいます。 インタフェースはインタフェースを幾つでも継承できます。 クラスはインタフェースを幾つでも実装できます。インタフェースを実装するには以下のように指定します。 クラス名 implements インタフェース名 インタフェースを実装したクラスは全ての抽象メソッドを実装しなければなりません。
親クラスの変数には子クラスのインスタンスが代入でき抽象メソッドなどが呼ばれると、 それぞれのインスタンスの実際のクラスのメソッドが呼ばれることになります。 このことによってとりあえず、抽象化というオブジェクト指向言語としてのJavaの利点が利用できますね。 11-14のような機能を利用した効率的なクラス間関係の設計をデザインパターンと言います。
前に定数とか言いましたがあれは定数値でした。 フィールドにはfinal修飾子を付けることで、書き換えできなくすることができます。 またメソッドにfinal修飾子が付けられると、オーバーライドが出来なくなり、 クラスにfinal修飾子が付けられると、継承できなくなります。 15.内部クラス クラスの内側には好きなところにクラスをつくることが出来ます。 これを内部クラスと呼びます。 細かいことは調べてください。 16.例外処理 主に入出力などの結果によって、通常の方法で防ぐことが難しいような間違いを例外と呼びます。 例外を処理し、制御が破綻してしまうことを防ぐために、例外処理があります。 try{ 例外の発生する可能性のある処理 } catch(例外を表すクラス名 識別子){ 修復作業 } こんな感じでやってください。
17.その他 this参照 自身のインスタンスを差すためにthisというキーワードがあります。 時々便利。 内部クラスから外部のクラスのインスタンスを差す場合には、 外部のクラス名.thisと使いましょう。 API JavaのAPIは素敵です。 JDKをダウンロードする際には、リファレンスもダウンロードすることを忘れないようにしましょう。 java.langパッケージ java.langパッケージは暗黙のうちにimportされます。 Javaの重要で基礎的なクラスが含まれているからです。 java.langパッケージのクラスについてはどんなものなのか知っておくといいと思います。 継承時の可視性や例外について 細かいことは察してください。 例外について メソッド内で例外が発生する場合、処理を行わず、外に投げることが出来ます。 void method(int x) throws IOException{ } 投げられた例外はメソッドの呼び出し元へと飛んで行きます。 キャストについて 変換可能な型はキャストによって変換することができます。 (変換後の型名)変数名 例えば、doubleをintに変換する場合、以下のようにします。 double d = 0.25; int i = (int)d;
リテラルについて 16進表記 整数の定数値は0xをつけることで16進数で表記することも出来ます。 int i = 0xe7; 整数の定数値はintとして解釈されます。longにしたい場合には、Lを付けます。 long l = 20L; 少数の定数値はdoubleとして解釈されます。floatにしたい場合にはfを付けます。 スレッドについて スレッドはThreadクラスを継承するかRunnableインタフェースを実装することで実現できます。 そのクラスのstart()メソッドが呼ばれることで、run()メソッドの内容が別スレッドで処理されます。 スレッドを終了させるには、待つか、フラグを使います。 一時停止や、他のスレッドとのやり取りについては適当に考えてください。 文字列について 文字列は参照型で表現されますが、賢いJavaコンパイラによって、プリミティブのように扱うことが出来ます。 String s = "J2SE"; s += " " + 5.0; 無名の内部クラスについて こんな感じで使えます。 new MyClass(){void test(){}}.test(); 値渡しについて Javaのメソッドには引数は値で渡されます。 呼び出し先で変数が変更されても、元の変数は変わりません。 参照先のインスタンスが変更されれば、変更されますが。 何か忘れている気がしますが、このあたりで終了とさせていただきます。 誰もいねぇ。
1000 :
デフォルトの名無しさん :int 2ch =05/04/01(金) 22:41:21
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。