■掲示板に戻る■
全部
1-
101-
201-
301-
401-
501-
601-
最新50
JAVA神様 かざっさま
- 1 :アヌス : 2009/01/27 18:37
- 投稿できなくなってしまったので、新しいスレッドにもう一度貼りますです。
何文字かのstringを受け取ってその文字列の真ん中2文字だけをreturnで返したいのです。文字が奇数の場合は右よりの2文字です。
例)
middleTwo("abcd") → "bc"
middleTwo("abcde") → "bc"
文字列は必ず2文字以上あると前提しますです。
それともう一つ。取得した数字が奇数ならfalse偶数ならtrueを返すプログラムです。
例)
isEven (24) → true
isEven (25) → false
どうやらこれは、2つのメソッド(真ん中の文字プログラムと、奇数偶数プログラム)をクラスTwoMethodsに書いて、
それぞれのメソッドに、テストメソッドをクラスTwoMethodsTestに書く、というものらしいのですが、プログラムを貼ります。
しかいしくつか抜けてるところがあってそれをコンプリートしなきゃいけないみたいです。
このクラスは、Stringsといくつかの基本となるタイプを処理するメソッドをテストするための2つのメソッドのテストが記されている(日本語がおかしい・・・汗)
import static org.junit.Assert.*;
import org.junit.Test;
public class TwoMethodsTest {
@Test
public void testMiddleTwo() {
//ここにTwoMethodsオブジェクトが要ります//
TwoMethods myFuns = new TwoMethods();
//middleTwoメソッドをテストするための4つのケース//
assertEquals("bc", myFuns.middleTwo("abcd"));
assertEquals("bc", myFuns.middleTwo("abcde"));
assertEquals("23", myFuns.middleTwo("12345"));
assertEquals("pu", myFuns.middleTwo("Computers"));
assertEquals("to", myFuns.middleTwo("to"));
assertEquals("is", myFuns.middleTwo("antidisestablishmentarianism"));
}
//もう一つのテストメソッドを以下に
}
ここからテストされるメソッドのクラス
public class TwoMethods {
public String middleTwo(String arg) {
return "TBA"; //ここのメソッドを変えなければならないようです。
}
//もうちょっといくつかのメソッドを以下に
}
おそらくエラーが出るそうです。JUnit 4はbuild pathにないからだとか。だからJUnit 4をbuild pathに加えないといかんとかなんとか・・・
JUnit testとして実行する。でもassertionはパスしない(赤いバーになる)。
だからTwoMethods.middleTwo(String)を修正する必要があると・・・
次は奇数か偶数かのメソッド。テストメソッドはTwoMethodsTest.javaへ、isEvenメソッドはTwoMethods.javaへ。そして新しいTwoMethodsを作る必要があります。
public boolean isEven(int number)
@Test
public void testIsEven() {
TwoMethods myFuns = new TwoMethods();
assertTrue(myFuns.isEven(24));
//ここにあといくつかassertionを加えたいのです。
assertFalse(myFuns.isEven(25));
みたいな感じでいいのかな。多分他のケースも加えないといかんのかな。
}
自分でも書いてて理解できん・・・。かざっさん、この意味わかる・・・?
- 173 :アヌス : 2009/02/15 13:10
- すいません・・・。ごちゃ混ぜになっちゃった。
少しずつ確認させて下さい
かざっさんの例だと、クラスAからBにアクセスするんだよね?
B instanceB = new B();
これは、まずアクセスしたいクラス名(B)を書いて 変数(instanceB)を書いてnew B()とアクセスしたいクラスを書く・・・?
instanceB.testMethod();
これは、アクセスしたいクラスのメソッド(testMethod())を、クラスAで定義した変数(instanceB)とくっつけて書いたってこと・・・?
構造がわかりずらひ・・・
- 174 :大和 : 2009/02/15 13:17
- >>173
そうそう!これは「他クラスにアクセスする」際のお作法です。
[アクセスしたいクラス名] [変数名] = new [アクセスしたいクラス名]();
[↑の変数名].[アクセスしたいクラスのメソッド名];
です!これがJavaでのお作法ですー。
いえいえ,わからないとこはじゃんじゃん文章化すると良いですから,
どんどんわからないとこは書いてください。
- 175 :アヌス : 2009/02/15 13:24
- なるほど。
[アクセスしたいクラス名] [変数名] = new [アクセスしたいクラス名]();
[↑の変数名].[アクセスしたいクラスのメソッド名];
これは公式として 覚えるしかないのですね・・・
>>163のサイズを返すところで、返すにはreturnを使うのかな・・・。化すんだから当然だと思うんだけど、
ネットで調べてもなんか・・そういう例がなくて・・・
- 176 :アヌス : 2009/02/15 13:34
- 今回の課題では、全部で10個のpublicをpublic DescriptiveStatstics()に書かないといかんのですが、
>>163のように、size、 addInOrder、 getのほかに、 average、 max、 min、 range、 median、 standardDeviatioon(数式を使って計算)とあります。
でもこれって、全部一つのクラスに書くんだよね・・・
public class DescriptiveStatstics(){
public DescriptiveStatistic(){
public int size(){
public void addInOrder(double nNumber)
public double get(int index){
public double max(){
public double min(){
public double range(){
public double median(){
public double standardDeviation(){
という感じですね。だから他のクラスにアクセスする必要は・・・あ、もしかしてこれをテストするためのテストメソッドのクラスにアクセスするっていみなのか・・・
- 177 :大和 : 2009/02/15 13:34
- >>175
そうそう合ってるよ!
「void」がついてないメソッドはすべて,「必ず」return させます。
int size() {} とか
boolean isNotNull() {} とかは必ず return します!
- 178 :アヌス : 2009/02/15 13:35
- >>174
ありがとうございますです!
最初のいくつかのメソッドだけちょっと書いてみます。
- 179 :大和 : 2009/02/15 13:38
- ああそうかーなるほどね!
他のメソッド名見てなんとなく全体像わかりました。
となると,やっぱりさっき私が書いた雛形はちょっと部分部分で間違ってるなあ。
がんばって!わからない事が生じたらまた書き込んでねー。
- 180 :大和 : 2009/02/15 13:41
- >>176
そうそうすべてひとつのクラスに書くねー。
だから他のクラスにアクセスする必要はないね。
でもテストクラス作ったら,テストクラスからこのクラス呼び出す時に必要になるね。
がんばってねー(´ω`)。
- 181 : : [ここ壊れてます]
- [ここ壊れてます]
- 182 : : [ここ壊れてます]
- [ここ壊れてます]
- 183 : : [ここ壊れてます]
- [ここ壊れてます]
- 184 : : [ここ壊れてます]
- [ここ壊れてます]
- 185 : : [ここ壊れてます]
- [ここ壊れてます]
- 186 : : [ここ壊れてます]
- [ここ壊れてます]
- 187 :アヌス : 2009/02/16 17:34
- できたけどエラーが一個でる・・・
- 188 :大和 : 2009/02/17 05:10
- まじか・・
あれもう出来あげちゃったのか
- 189 :アヌス : 2009/02/17 05:34
- 最後のメソッドがなんかおかしい。テストメソッドは全部ちゃんと動いてるのに、
ネットで提出したら配列[1.0, 2.0, 3.0]でエラーとかなんとか・・・
[1.0, 2.0, 3.0]はテストメソッドで既にためして ちゃんと動いてるんだが・・・
教授にメールしてみよう
- 190 :大和 : 2009/02/17 06:08
- 謎だねえ・・。
わからない時はもう人に聞いちゃったほうがいいね!
- 191 :アヌス : 2009/02/17 18:57
- 別のメソッドで求めた配列の平均値を最後のメソッドでも使うためにprivateで定義して、引っ張ったんだけど、これがいかんかったみたいで。
最後のメソッドでもう一度平均値を求めたら100%になった。
しかしprivateで定義して、平均メソッドから最後のメソッドに平均値を直接引っ張って使ってもテストメソッドでは問題なかったんだが・・・
なんなんだ・・・一体・・・
- 192 :アヌス : 2009/02/18 15:49
- かざっさん。もしstringに"U of A"と文字列があったら、charAt(1)にヒットするのは、Uとoの間のスペースになるん?
- 193 :アヌス : 2009/02/18 19:03
- かざっさん。
String型の配列の文字列を、インデックス0から順に、char型の配列のインデックス0からの文字と比較したいんだけど
String str = "abcd"
char chars = {'a', 'b', 'c', 'd'};
これはインデックス0から順に比べたらまったく同じ文字が同じインデックスにあることになるけどこういうことってできる?
int j =0;
for(int i=0;i<5;i++){
String c = str.substring(i, i+1);
if(c.equals(chars[i])) ←つまりstringとcharを比較する場合、これでできる?
j++;
}
if(j==5)
return true;
else
return false;
- 194 :大和 : 2009/02/18 23:46
- >>192
そうそう半角スペースがヒットするよ!
>>193
equals() は String 型の値が同じかどうか見るんだー。
char[i] を1回ずつ String型にキャスト(型変換)して,
それからなら出来るはずだよ!
if(c.equals(String.valueOf(chars[i]))←こんな感じだろうか!
- 195 :アヌス : 2009/02/19 18:51
- かざっさん。これだけで→String.valueOf(chars[i]) charをStringに変換してることになるの?
- 196 :アヌス : 2009/02/19 18:54
- それとindexOfなんだけど、
String s = "U of Arizona";と定義した場合、
assertEquals(5, s.indexOf("Arizona")); って通る? sには、インデックスの5番目からArizonaって文字が始まってるからOKなん?
indexOfも、最初の文字はインデックス0から数えるん?
- 197 :アヌス : 2009/02/19 18:56
- それと、assertEquals(0, s.indexOf("U of A")); だったら通らない?
sの中の文字列では、U of Aって文字はインデックス0から始まってるけど・・・
- 198 :アヌス : 2009/02/19 19:05
- もう一つ質問が。hasNext()なんだけど
targetの整数が、scannerの中にいくつあるか調べるために、
Scanner scanner= "1 2 3 4 1 2 3 1 6";
int target;
int count=0;
while(scanner.hasNext()){
if(scanner.nextInt==target)
count++;
}
return count;
このhasNext()の働きがよく理解できないんだ・・・
もしtargetが1なら、scannerの中には1が3つあるから、countが3になるはずなんだけど、
scanner.hasNext()こうすると、scanner.nextIntの中にはインデックス0の数字が代入されてtargetと比較されるってこと?
それともインデックスではなく、自動的に数字が検索されてscanner.nextIntの中に数字が代入されるん?
hasNext()がよくわからないのです・・・
- 199 :アヌス : 2009/02/19 19:11
- またごめん。
もしint型の配列を用意したら、
int a[];
a[i]="";
こういうふうに、int型の配列にスペースはいれられる?スペースって文字扱いになるんだっけ?ならいれられない?
ていうか、"" ←これだとStriingじゃないと無理なのかな。''←これだとchar型のスペース?
int型の配列にスペースをいれる場合、配列をスキップすればいいのかな?
for(int i=0;i<=11;i+=2)
a[i]=1;
こうすれば配列aには、{1 1 1 1 1 1} こういうふうに、数字の間の配列にスペース入れられる?
- 200 :大和 : 2009/02/20 00:01
- >>195
そうそう!
char c = String.valueOf(chars[i]);
↑これだとおそらく型の不一致でエラーでるはず!
つまりもう String 型にちゃんとなってるのだね。
>>196
indexOf() はインデックス 0 から数え始めるから,
U of Arizona
012345
だもんで 5 が返ってくるね!たぶん!
>>197
assertEquals(0, s.indexOf("U of A"));
0 と 0 でイコールなはず!これで緑バーになるはず!
- 201 :大和 : 2009/02/19 22:49
- ちと風呂さ!
- 202 :大和 : 2009/02/20 10:27
- >>198
hasNext() はどうだったかなー(’’。
たしか true を返すんだ。要素の中身がまだある場合に。
格納されてる要素を一つひとつ見てってあれば true,
もうなければ false を返す boolean 型メソッドだなんだ。
ちょっと説明しづらいなこれは!
「java hasNext」でググってみて!これは解説サイトのほうがわかりやすいと思うー。
>>199
そうそうー。スペースは文字扱いだから入れられないね!
""だと String 型になるね〜。
配列 a には {1, 0 ,1, 0 ,1, 0 ,1, 0 ,1, 0 ,1} こう格納されるかな!
int 型の場合の初期値は 0 なんだー。String 型は null だねー初期値。
- 203 :アヌス : 2009/02/20 13:40
- うお
配列スキップしたら0が入るのか・・・何もいれてないから空白かと思った
int 型の配列にスペースなんてきにしたことなかったな・・・
- 204 :アヌス : 2009/02/20 13:44
- ありがとう!かざっさん!!!!
- 205 :大和 : 2009/02/20 22:51
- いえいえ!
- 206 :アヌス : 2009/02/21 08:04
- JAVAの試験だったんですけどね、最後の問題でバカな配列のシフトをしてしまいました・・・
最後の問題点数デカいのに・・・あぁ、・・・オワタ・・
- 207 :アヌス : 2009/02/21 08:04
- _ρ_
/ ⊥ \
|____|
‖∧ ∧¶ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ゚∀゚)/ < ○○○
/ / \_____________
〈 (
∫ヽ__)
U U
| ̄ ̄ ̄ ̄|
\__人__/
- 208 :大和 : 2009/02/21 10:46
- よくがんばった!
あとは結果を待つのみよ〜。
- 209 :アヌス : 2009/02/24 12:29
- ドラゴンボールwwww実写映画ホントにやるのかwww知らなかったwww
http://aromablack5310.blog77.fc2.com/blog-entry-3102.html
ワロタwwwカメハメ波wwww
- 210 :アヌス : 2009/02/25 20:27
- http://panlifeblog.up.seesaa.net/pan/sittori_pinepan.jpg
しっとりパイパンだよ!!!
- 211 :アヌス : 2009/02/28 17:07
- かざっさん。ジョンコンウェイって人が作ったJAVAのgame of lifeって 知ってる?
- 212 :アヌス : 2009/02/28 17:19
- かざっさん。finalって修飾子の使い方ってわかる?なんか・・・よく理解できなくて・・・
- 213 :大和 : 2009/03/01 07:20
- >>211
は,はじめてきいた!
>>212
final はね!変数を,定数にしたい時使うよー。
マジックナンバーとかべた書きって聞いたことあるかなあ。
それを防ぐときに使うんだ定数はー。
円の面積を求めるコード
「3.14」という数は何があっても絶対不変(定数)の数字だから,
べた書きせず,定数を用いたほうが良い。
× 半径 * 2 * 3.14;
○
final int PI = 3.14;
半径 * 2 * PI;
- 214 :アヌス : 2009/03/01 11:37
- つまり、3.14の意味がわかりずらいからPIってやったほうが、いいってこと?
その値を変えたいとき、複数の値を変えないといけないかもしれないから、マクロ定数のようにやれば、
一度の変更ですむとか。
しかし、それだと単に int PI = 3.14;ってやればいいような気も・・・
final int PI = 3.14とint PI = 3.14の違いってなんでしょう・・・?
- 215 :アヌス : 2009/03/01 13:33
- あれ・・・finalって#defineと一緒・・・?
- 216 :アヌス : 2009/03/01 14:51
- interfaceとimplementsってわかる?これらはfinalとはまったく違う・・・?
- 217 :大和 : 2009/03/01 15:10
- >>214
そうそう!
あと final は勝手に値を変えられなくなるんだー。
勝手に値を書き換えられなくなるよー。
double pi = 3.14;
pi = 3; // エラーになりません。
final double PI = 3.14;
PI = 3; // コンパイルエラーが発生します!
>>215
#define って C での定数なんだねー。一緒っぽいっす!
>>216
interface と implements は final とまったく別物だよ!
interface は一言で class のでっかバージョンみたいなもの。
implements はそのでっかい class を宣伝するときに使う言葉なんだー。
こんな使い方をします↓。
class [クラス名] implements [インターフェース名]
- 218 :アヌス : 2009/03/01 15:16
- public interface アナル{
public class アヌス implements アナル{
こんな感じですか。クラスよりデカいということは、クラスを定義する前にinterfaceを定義するってことかな
てことは、interfaceの中にはいくつかのクラスをいれられるってこと?
- 219 :大和 : 2009/03/01 15:29
- >>218
イメージ合ってますあってます!
クラスを定義する前に interface を定義しなければなりません。
あ,interface の中で定義するのは「クラス」ではなく「メソッド」が定義できます。
ごめんね。クラスのでっかいバージョンじゃなくて,親戚みたいな感じって言えば良かったです。
詳しくは↓を参考にしてみてくださいー。
Java講座 [インタフェース、interface]
http://www.site-cooler.com/java/j2se/10_01.htm
- 220 :アヌス : 2009/03/01 15:29
- かざっさん。javaにwraparoundってある?
- 221 :大和 : 2009/03/01 15:41
- >>220
!?
wraparound か。はじめて聞く単語だ。調べてみたけど概念なのだねこれ。
処理可能な範囲の最後まで達したら最初に戻ること,か〜。
このものずばりを体現できるメソッドってあるのか,私にはわからないけど,
for とか if とかメソッド組み合わせれば実現できなくなさそだねー。
- 222 :アヌス : 2009/03/01 15:46
- なるほど。ラップアラウンドするためのなにかがあると思ったんだけど、自分で工夫しないといけないのか。
ありがたう!かざったん!!!
- 223 :大和 : 2009/03/01 16:07
- いえいえ!^ω^
- 224 :アヌス : 2009/03/01 18:47
- かざっさん。String型の配列って、なにも入れなかったら""が入ってるんだっけ?
- 225 :大和 : 2009/03/01 19:18
- あ String 型だと null だねー。
ちなみに int 型は 0 だよ!
- 226 :アヌス : 2009/03/01 19:22
- とすると、配列spaceになにも入ってないって確認するには、
space[row][col].equals(null)
これでいけますよね?
- 227 :アヌス : 2009/03/01 19:23
- で、なにか入ってる配列に、ブランクを入れたい場合、
space[row][col]=null;
これで、その配列にはブランクだけ入ってることになるよね?
- 228 :大和 : 2009/03/01 19:31
- お,いいねーその「ブランク」って言葉。
知らなかった単語だ。もらいました。
>>226
あ!String 型変数ならそれで大丈夫だけど,
配列だとどうだったかなー。
ちょっと調べてみます。
>>227
ああそうそうー null を代入すればいいよ。
配列 space はこれで空っぽです。
- 229 :大和 : 2009/03/01 19:37
- >>228
こんなんあったー。
Arrays クラスの equals() を使うとできるっぽい?ですー。
こんな感じかな
// 配列 space が null なら if 文内の処理を実行します
if (Arrays.equals(space, null)) {}
配列の比較
http://www.ne.jp/asahi/hishidama/home/tech/java/array.html#h2_array_equals
- 230 :大和 : 2009/03/01 19:38
- 風呂!
- 231 :アヌス : 2009/03/01 20:05
- if(Arrays.equals(space[row][col], null)
こうすると、nullとはできないって赤線エラーがでる・・・
- 232 :大和 : 2009/03/01 20:48
- じゃだめかー。
他に配列比較できる方法あるかねー。
- 233 :アヌス : 2009/03/01 20:51
- space[row][col].equals(null)
これじゃ できないってこと・・・ですか・・・?
- 234 :アヌス : 2009/03/01 22:18
- 2次元配列で、space[10][10]と定義したわけです。インデックスは0〜9になるわけですけど。
今、space[3][0]とspace[3][9]に"O"をいれたわけです。printでちゃんと格納されてると確認しました
ここで、space[3][9]の配列の隣どおしになっている配列全てを見て、"O"が入ってる配列がいくつあるかを調べたいのです
ちなみに、もし方形で簡単に書いたらこんな感じの図になりますのです。
[0][0]..................
[1][0]..................
[2][0]..................[2][8],[2][9],[2][0]
[3][0]..................[3][8],[3][9],[3][0]
[4][0]..................[4][8],[4][9],[4][0]
上でみてわかると思うけど、インデックス0と9はつながっているものとします。だから隣通しになるのです。
space[3][0]にも"O"を入れたから、space[3][9]の周りで"O"が入ってる配列はspace[3][0]だけになります。space[3][9]自身にも"O"は入ってるけど、自身はカウントしません。
なので、space[3][9]の周りの配列をfor文でまわして、
for(int j=nCols-2;j<=nCols-1;j++){
for(int i=row-1;i<=row+1;i++){
if(space[i][j].equals("O"))
count++;
これで調べようとおもったんだけど、実行すると、NullPointerExceptionってエラーがそのif文のところにでるんだ・・・
もしif(space[row][col].equals("O"))っていうふうにiとjをやめるとパスするんだけど、なんでか意味がわからなくて・・・
これっていったいなんでしょう・・・
ちなみに、nColsは縦の配列の大きさで、nRowsは横の配列の大きさで、rowとcolはテストメソッドから引っ張ってくる配列のインデックスです。
上の例では、nColsとrowしかでてないけど・・・
配列の大きさは縦も横は10なので、nCols=10、space[3][9]の周りの配列をしらべたいから、row=3、col=9になります
なので実際のfor文は
for(int j=8;j<=9;j++){ //[2][0],[3][0],[4][0]以外の6つの配列の検索
for(int i=2;i<=4;i++){
if(space[i][j].equals("O"))
count++;
}
}
for(int i=2;i<=4;i++){ //縦のインデックスが0の配列の検索→[2][0],[3][0],[4][0]
if(space[i][0].equals("O"))
count++;
}
count=count-1; //自身もカウントしてるから1引く
}
こんな感じになるのです
- 235 :アヌス : 2009/03/01 22:23
- あ、空っぽでまだ 配列の中身定義してないからか・・・汗
あああああああああああ
だからif(space[row][col].equals("O"))
だと平気なのか。すでに"O"をいれてるから・・・
ええええ。じゃぁどうやって・・・検索すれば・・・
- 236 :アヌス : 2009/03/01 22:34
- かざっさん。例えば、space[2][8]になにも定義してない状態でif(space[2][8].equals("O"))って比較できないの・・・?
なにも定義しなかったらnullになるんじゃ・・・
- 237 :アヌス : 2009/03/01 22:52
- はじめに、すべての配列の要素に””を入れて解決しますた・・・
- 238 :大和 : 2009/03/02 18:50
- おおおうまくいったみたいでよかった
- 239 :アヌス : 2009/03/02 21:24
- なんか間違いとかでる・・・
プログラム自体はうごくのに・・・WebCatに送信したらエラーがたんまり・・・
かざっさん。これおかしい・・・?
public boolean cellAt(int row, int col){
if(space[row][col].equals("O"))
return true;
else
return false;
}
テストメソッドからrowとcolを受け取って実行するんだけど、与えられた2時限配列の中に"O"があればtrue、なければfalseをかえすんだけど・・・
これで動くよね・・・?実際動いてるのに。。。WebCatがエラー返してきやがる・・・
比較がわるいの・・・?これ・・・
- 240 : : [ここ壊れてます]
- [ここ壊れてます]
- 241 :大和 : 2009/03/03 04:56
- ローカルでは動いてるのにWebcatってので動かすとエラーになるのかあ。
なんでだろうねえ・・。
- 242 :アヌス : 2009/03/03 17:17
- 100%ゲットしたああああああああああああ!!!
やったああああああああ
マジつかれた もうしぬ
- 243 :アヌス : 2009/03/03 17:19
- 俺のテストメソッドでは、ある2つのメソッドを必ず実行しないと期待通りの結果にならなくて、
Webcatでは、1つのメソッドだけで期待通りの結果になることを要求していたらしいのです
今日TAに聞いた・・・
てことで、内1つのメソッドをまたやりなおし(スゲー長くなったけど)、結果できました!!!
- 244 :アヌス : 2009/03/04 22:57
- かざっさん。interface インターフェース名 このってどういう意味ですか?
- 245 :アヌス : 2009/03/04 23:45
- それと、throwsってなんですか・・・?
- 246 :大和 : 2009/03/05 12:30
- >>244
ジェネリクスだよー。
型を限定できます。
>>245
例外を宣伝する際に使う言葉だよー。
クラスやメソッドのあとにつけます。
class A throws Exception {}
public methodA throws Exception() {}
- 247 :アヌス : 2009/03/05 14:41
- 型を限定とは・・・?もし(E anal)ってできるの・・・?
- 248 :大和 : 2009/03/06 17:59
- List nameList = new ArrayList();
って感じだね〜。
この場合 String 型しか格納できなくなります。
Integer 型格納しようとするとコンパイルエラーになるよー。
- 249 :アヌス : 2009/03/07 12:29
- http://parasitestage.dip.jp/Page/MediaView.aspx?ID=28713
- 250 :アヌス : 2009/03/07 12:30
- かざっさん!ちょっとまって!整理するっす!
- 251 :大和 : 2009/03/08 09:17
- がんばって!
- 252 :アヌス : 2009/03/09 14:53
- JAVAやる時間が マジでない・・・しかし期限が・・・マジで今回やばいっス!!!
なにやっていいのか理解できん・・・
- 253 :アヌス : 2009/03/09 15:51
- かざっさん。今回の課題の一部のメソッド(throwとObject[])についてききたいっす!
今回はなんか、Abstract Data Typesなんてのやるみたいなんだけど、意味わかんないのですよ。知ってます?
配列の中の優先順位がどうのこうのって・・・
今回インターフェース使うんだけど、こんな感じ↓
public interface PriorityList {
配列の要素のサイズを返す
public int size();
もし配列になにも入ってなければ(size=0なら)trueを返す
public boolean isEmpty();
もし可能なら、与えられた配列のインデックスにelの値を入れる。もし配列のサイズを超えたら、IligalArgumentExceptionをthrowsする。
例)もしサイズが3なら、可能なインデックスの値は、0、1、2、3である
public void insertElementAt(int index, E el) throws IligalArgumentException;
↑これがよくわからんのですけど、サイズが3ならインデックスは2までだけど、もしインデックスが3になったらどうやってIligalArgumentExceptionをthrowsするんでしょうか・・・
もし可能なら、与えられたインデックスの要素への参照を返す(?)。配列の外ならIlligalArgumentExceptionをthrows
例)この場合、サイズが3なら可能なインデックスは0、1、2である
public E getElementAt(int index) throws IlligalArgumentException;
もし可能なら与えられたインデックスの要素を消す。もしインデックスが配列の外ならIlligalArgumentExceptionをthrowsする
public void removeElementAt(int index) throws IlligalArgumentException;
もし可能なら、与えられたインデックスの要素の中身とその隣(index+1)の要素をスワップする。配列の外ならIlligalArgumentExceptionをthrowsする
インデックスsize()-1の要素のpriorityが一番低ければスワップせんでよし
public void lowerPriorityOf(int index) throws IlligalArgumentException;
もし可能なら与えられたインデックスの要素と隣(index-1)の要素をスワップする。インデックス0の要素のpriorityが一番高ければスワップでせんでよし
インデックスが配列の外ならIlligalArgumentExceptionをthrows
public void raisePriorityOf(int index) throws IlligalArgumentException;
Objectの配列の中にある要素のコピーを全て同じ順番で返す。もしなにもなければ、new Object[0]を返す
public Object[] toArray();
もし可能なら与えられたインデックスの要素をリストの最後に移動する。与えられた要素が最後のインデックスならやらんでよし。
インデックスが配列の外ならIlligalArgumentExceptionをthrows
public void moveToLast(int index) throws IlligalArgumentException;
もし可能なら与えられたインデックスの要素をリストの最初に移動する
インデックスが配列の外ならIlligalArgumentExceptionをthrowsする
public void moveToTop(int index) throws IlligalArgumentException;
}
ほとんどにthrows IligalArgumentException;がついてるのです。
- 254 :アヌス : 2009/03/09 17:00
- IlligalArgumentExceptionのテストメソッドはこんな感じらしい・・・です・・・
もしインデックスが配列のサイズを1超えたら↓
@Test(expected = IlligalArgumentException.class)
public void testInsertThrowsAnException(){
ArrayPriorityList list = new ArrayPriorityList();
list.insertElementAt(0, "1st");
list.insertElementAt(1, "2nd");
list.insertElementAt(2, "3rd");
}
- 255 :アヌス : 2009/03/09 16:18
- で、本体ですが、
public class ArrayPriorityList implements PriorityList {
private Object[] data;
private int size;
public ArrayPriorityList() {
data = new Object[20];
size = 0;
}
public int size(){
return size;
}
public boolean isEmpty(){
boolean bltemp;
if(size==0){
bltemp=true;
}else{
bltemp=false;
}
return bltemp;
}
このinsertElementAtメソッドでは配列にelを入れるわけだけど、インデックスが配列のサイズを超えたら IlligalArgumentExceptionをどのようにthrowsすればいいんでしょうか・・・
public void insertElementAt(int index, E el){
if(sizedata[index]=el;
size++;
}
}
public void insertElementAt(int index, E el) throws IligalArgumentException{
っていうふうに書かないといけない・・・の?
- 256 :アヌス : 2009/03/09 16:01
- それと Object[] data; って、タイプはなにになるんですか?
これで配列の中身を確認するには、どうすんでしょう・・・
文字列ならnullとかequalとか、整数なら単に0と比べるだけでいいし・・・
- 257 :アヌス : 2009/03/09 21:40
- このIlligalArgumentExceptionは新しいクラスで定義しなきゃいけないの?
これをどこでどのように定義すればいいのかがわからないのです・・・
- 258 :アヌス : 2009/03/09 16:35
- ちなみに、配列のには優先順位があって、インデックス0はインデックス1より優先され、インデックス1はインデックス2より優先順位があるということです
このPriorityListでは、どんなタイプでもあり得る要素のたった一つのタイプのコレクションをストアする・・・らしいんだけど・・・
- 259 : : [ここ壊れてます]
- [ここ壊れてます]
- 260 :大和 : 2009/03/09 21:54
- 待ってね。
こりゃ少し読まないと。
- 261 :大和 : 2009/03/09 21:55
- その前に風呂入ってきまーす。
- 262 :大和 : 2009/03/09 22:00
- おいおいなんだこれ。
ジェネリクスとかやらせるなんてオーバーペースすぎやせんかこれ。
他の科目と並行してこんなんやらされてるのか。これは大変だよ。
と,その前に風呂です。
- 263 :アヌス : 2009/03/09 22:35
- ジェネクリトリス!?
- 264 :アヌス : 2009/03/09 22:40
- ぇーー・・・大変て・・・マジですか・・・
マジでJAVAやる時間ないのに・・・どうしよう・・・実はもう一つあるんだよね・・・JAVAの課題
マジ頭おかしいよあのヤロウ
- 265 :アヌス : 2009/03/09 22:43
- だいたい何したいプログラムなのかよくわからんからテストメソッドもどう組めばいいのか・・・
ADTってなんやねん。
マジでIlligalArgumentExceptionとかthrowとかどう書いたらのいいのか わからない・・・
- 266 :大和 : 2009/03/09 23:26
- 戻りました。
うんw。
ドラクエ3に例えると,
アリアハンの周りでスライムちみちみ狩ってたら突然キメラ出てきたぐらいの難易度ですよ。
はい。わかりづらい例えですね。
わかった!
何するプログラムなのか,とどんなコード書けばいいのか,
という観点からレスしていきます。
ちょっと考えさせてね。
この間は他の課題やるなりしちゃっててください。
今日寝るまでに100%なり中途半端なりどちらになろうと必ずレスします。
1時までにはレスします。
- 267 :アヌス : 2009/03/09 23:28
- おおお
かざったああああん!!
ありがたああう!!!
- 268 :大和 : 2009/03/10 08:05
- abstract data typeとは
抽象データ型
http://ja.wikipedia.org/wiki/抽象データ型
データを操作するメソッドを集合させた記述,を指すみたいです。
なるほど。これはまさに,インターフェースそのものですね。
public interface PriorityList について
インターフェース PriorityList を実装するクラスは,以下のメソッドを具象化しましょう。
必ず作れ?の課題
public int size(); // 配列の要素数を返します
public boolean isEmpty(); // 配列が空なら true を返します
出来たら作れ?の課題
public void insertElementAt(int index, E el) throws IligalArgumentException; // 配列のインデックス index に el を代入します
public E getElementAt(int index) throws IlligalArgumentException; // 配列インデックス index の値を取得します
public void removeElementAt(int index) throws IlligalArgumentException; // 配列インデックス index の値を消去します
public void lowerPriorityOf(int index) throws IlligalArgumentException; // 配列インデックス index の値と ++index の値を入れ替えます
public void raisePriorityOf(int index) throws IlligalArgumentException; // 配列インデックス index の値と --index の値を入れ替えます
public Object[] toArray(); // 配列 Object をコピーします
public void moveToLast(int index) throws IlligalArgumentException; // 配列インデックス index の値をインデックス最後尾に移し変えます
public void moveToTop(int index) throws IlligalArgumentException; // 配列インデックス index の値をインデックス最前に移し変えます
以上,合計10メソッドを製造しましょう。
例外処理とは
以下のように,例外が発生するコードを try で囲むことを指します。
例外が発生した時のみに動作するコードを catch で囲みます。
class MathException{
public static void main (String[] args) {
try {
int x = 10 / 0; // 0で除算は例外が発生する
} catch (ArithmeticException e) {
System.out.println("0で除算はできません。");
}
}
}
※まだこの記事は編集します。これにどんどん付け足していきます。
- 269 :アヌス : 2009/03/10 12:07
- かざっさん!すみません。少々訂正が
IlligalArgumentExceptionはIllegalArgumentExceptionの間違いです・・・
tryやcatchのクラスはいらないみたい
- 270 :アヌス : 2009/03/10 12:12
- あとremoveElementAt(int index)メソッドは、削除する配列より右の配列の要素すべてを、左にシフトして削除するみたい
インデックス3の要素を消したかったら、インデックス4を3に、5を4に、6を5に・・・って感じ
- 271 :アヌス : 2009/03/10 12:10
- public E getElementAt(int index)はインデックスの中の要素の参照を返すらしいので、
return (E)data[index]
これでいけますか?
- 272 :アヌス : 2009/03/10 12:13
- public void insertElementAt(int index, E el)のメソッドでは、インデックスが配列の大きさを超えたら、配列の最後にもう一つインデックスを加えるらしいです。だから
growArray();
ってやればいいのかな
267 KB
続きを読む
掲示板に戻る 全部
前100
次100 最新50
read.php ver2.4 2005/04/13