■掲示板に戻る■ 全部 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));
みたいな感じでいいのかな。多分他のケースも加えないといかんのかな。

}
自分でも書いてて理解できん・・・。かざっさん、この意味わかる・・・?


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();
ってやればいいのかな


273 :アヌス : 2009/03/10 15:14
少しだけどやってみたんですが、insertElementAtメソッドは、

public void insertElementAt(int index, E el) throws IllegalArgumentException{

if(size<0 || size>=data.length){
throw new IllegalArgumentException();
}
if(size==data.length){
growArray();
}
if(sizedata[index]=el;
size++;
}
}

1:現在のインデックスを表すsizeがインデックスの大きさを超えたら、IllegalArgumentExceptionをthrowする
2:sizeがdata.lengthと一緒になったらgrowArray()へ
3:data[index]に要素を代入


274 :アヌス : 2009/03/10 15:17
配列にインデックス1つ追加するメソッド

private void growArray(){

Object[] temp = new Object[size + 1];

for (int i = 0; i < size; i++) {
temp[i] = data[i];
}
data = temp;
}


275 :アヌス : 2009/03/10 15:18
与えられたインデックスの中の要素の参照を返すメソッド

public E getElementAt(int index) throws IllegalArgumentException{

if(size<0 || size>=data.length){
throw new IllegalArgumentException();
}
return (E)data[index];
}

これで、あってる・・・かな?


276 :アヌス : 2009/03/10 15:48
与えられたインデックスの中の要素を消すメソッドですが

public void removeElementAt(int index) throws IllegalArgumentException{

if(size<0 || size>=data.length){
throw new IllegalArgumentException();
}
for(int i=index;idata[i] = data[i+1];
}
}

for文で、インデックスの右側の要素を全て左にシフトする。結果目的のインデックスの中身がindex+1の中身になって消される


277 :アヌス : 2009/03/10 17:22
lowerPriorityOfメソッドですが、

public void lowerPriorityOf(int index) throws IllegalArgumentException{
Object temp;

if(size<0 || size>=data.length){
throw new IllegalArgumentException();
}
temp = data[index];
data[index] = data[index+1];
data[index+1] = temp;
}

1:sizeがインデックスを超えたら IllegalArgumentExceptionをthrow
2:与えられたindexの要素とindex+1の要素をスワップする


278 :アヌス : 2009/03/10 17:24
raisePriorityOfメソッドですが、

public void raisePriorityOf(int index) throws IllegalArgumentException{
Object temp2;

if(size<0 || size>=data.length){
throw new IllegalArgumentException();
}
temp2 = data[index];
data[index] = data[index-1];
data[index-1] = temp2;
}

上と同様に、与えられたindexとindex-1の要素をスワップ


279 :アヌス : 2009/03/10 17:29
moveToLastメソッドは

public void moveToLast(int index) throws IllegalArgumentException{

if(size<0 || size>=data.length){
throw new IllegalArgumentException();
}
data[data.length-1] = data[index];
}

上記のように与えられたインデックスの要素を配列の最後に移動
問題には、リストの最後にって書いてあるけど、リストって配列のこと・・・?


280 :アヌス : 2009/03/10 17:31
moveToTopメソッドは

public void moveToTop(int index) throws IllegalArgumentException{

if(size<0 || size>=data.length){
throw new IllegalArgumentException();
}
data[0] = data[index];
}

与えられたインデックスの要素をリストの最初のに持っていく。これもリストって配列???最初ならインデックス0にってこと・・・?


281 :アヌス : 2009/03/10 17:37
・・・とやったんだけど、これでいいの・・・?これはスゲー大変ってかざっさん言ってたけど、なら俺のやったのじゃできてないってこと・・・?

あ、あと配列の中の全部の要素のコピーを順番を変えずに返すObject[] toArray()をかかなければいけないんだけど・・・


282 :アヌス : 2009/03/10 20:11
Object[] toArray()ですけど、

public Object[] toArray(){
Object[] copy = new Object[data.length];

if(size==0){
   ここがよくわからんのです。
}else{
for(int i=0;icopy[i] = data[i]; 配列を新しい配列copyにコピーする
}
return copy;
}
}

配列のコピーは上のやり方でいいのかな。で、もし配列に何もなければnew Object[0]を返すって書いてあるんだけど、
new Object[0]って、新しい配列のインデックス0の要素を返すってこと?
つまりif文の中はreturn (Object[]) copy[0]; になるの・・・?
それとも元々の配列data[0]?

これをテストする場合は、どうかけば・・・もしreturn new Object[0];とそのまんまで書くと、
配列にはなにも入ってないんだから、assertEquals("null",list.toArray());ってやろうとしたんだけど、結果はnullじゃなく、[Ljava.lang.Object;@194df86 だと、わけのわからない値が・・・

return (Object[]) copy[0];にしたら、NullPointerExceptionとエラーが・・・


283 :アヌス : 2009/03/10 20:31
>>275での、与えられたインデックスの中の要素の参照を返すってのもスゲー心配でして・・・
return (E)data[index]; これでいいのかな・・・

そうするとこれのテストメソッドは、
assertEquals("中身", list.getElementAt(index));
でいいの・・・?でもこれって参照を返すっていうのかな・・・普通に中身を返してるだけのような・・・


284 :大和 : 2009/03/10 22:11
ただいまあ。
おおおすごい。いつのまにかもうそんな進めたんですね。


285 :大和 : 2009/03/10 22:16
>>281
いやー量が多くて大変かと思ったけど,
一つ一つのメソッドはそんなに大したことなかったね。
私が尻込みしちゃっただけですね。


286 :大和 : 2009/03/10 22:34
あ。まずいあんな大見得切っておいて今更ですが,
クラスのジェネリクスはまだやったことないから,

クラスのジェネリクスが混じってるとわけわかんないや。
調べてからじゃないとちょっと意見できそうにないです。
ごめんよー。


287 :アヌス : 2009/03/10 22:22
ジェネリスクとは・・・?


288 :アヌス : 2009/03/10 22:23
てかマジで時間ない・・・
このJAVA、まだ終わりじゃないんだよね・・・
これ 終わっても もう一つJAVAの課題でてるんだ・・・


289 :大和 : 2009/03/10 22:35
とか <> で囲んである記述のことだよー。


290 :アヌス : 2009/03/10 22:42
この課題で、なんかもう一つクラスを作れって でてるんだ。これも意味がわからないんだけど、

PriorityListの中のエレメントとしてオブジェクトMovieを追加し、クラスMovieを実行せよ。ただしこのクラスは2つの引数と2つのメソッドtoStringとgetTitleを持っている。

これは、例えば各家庭に配送される映画のキューの優先順位の変更を表すクラス・・・だとか。

質問なんだけど、
PriorityListは>>268の通りのインターフェース。これに2つの引数を持ったMovieを追加。以下の通り↓

public interface PriorityList {

public int size();
public boolean isEmpty();
public void insertElementAt(int index, E el) throws IllegalArgumentException;
public E getElementAt(int index) throws IllegalArgumentException;
public void removeElementAt(int index) throws IllegalArgumentException;
public void lowerPriorityOf(int index) throws IllegalArgumentException;
public void raisePriorityOf(int index) throws IllegalArgumentException;
public Object[] toArray();
public void moveToLast(int index) throws IllegalArgumentException;
public void moveToTop(int index) throws IllegalArgumentException;
public void movie(E el, int a);
}

そして次にMovieクラスを作ってその中にtoStringとgetTitleメソッドを作ると思うんだけど、本体のArrayPriorityListの中のオブジェクトもインターフェースにあんのに、Movieだけを他のクラスとして作るとエラー起こすんだ・・・
インターフェースの中にあるオブジェトは、全部同じクラス(この場合ArrayPriorityList)の中に作らないといけないの?

でもMovieクラスは2つのメソッドを持ってるから・・・ArrayPriorityListクラスの中に新しいMovieクラスは作れないよね・・・?
意味が・・・わからないのですが、なんかわかりますか?


291 :アヌス : 2009/03/10 22:51
ちなみに、Movieクラスのテストメソッドは以下のようです

@Test
public void testGetters(){ // 引数1、映画のタイトル. 引数2、星率1〜5 →星とは*のことです
Movie m1 = new Movie("The Matrix Revolutions", 4);
Movie m1 = new Movie("The Load of the Rings, Return of the King", 5);
Movie m1 = new Movie("Click", 2);


assertEquals("The Matrix revolutions", m1.getTitle());
assertEquals("The Load of the Rings, Return of the King", m2.getTitle());
assertequals("Click", m3.getTitle());

assertEquals("The Matrix revolutions *****", m1.getTitle());
assertEquals("The Load of the Rings, Return of the King ****", m2.getTitle());
assertequals("Click **", m3.getTitle());
}


292 :アヌス : 2009/03/10 22:53
あ、*ならインターフェースの中でpublic void movie(E el, int a);ってやっちゃいけないのかな。
この場合E elが映画のタイトルだろうし、もう一つの引数は*にあったタイプにしないといかんのか・・・ならint aはダメかな
*ってキャラクターだっけ?


293 :アヌス : 2009/03/10 23:16
MovieクラスをArrayPriorityListクラスの中にprivateで作ってって・・・意味ないよな・・・privateにしても・・・

いみわかんねええええええええええええええええええええ


294 :大和 : 2009/03/11 10:56
>>290
Movieクラスを他のクラスとして作成するとエラー出ちゃうのかあ。
ぱっと思いついたのは,HAS-A関係かなあと。
自信ないですが・・。

HAS-A関係とは「・・・は・・・を持っている」っていうクラス同士の関係を表すことですね。
オブジェクト指向のいくつかある概念の,一概念です。HAS-A関係とは。

「野球選手クラスは,バットクラスを持っている」とか,
「優先順位リストクラスは,映画クラスを持っている」とかです。

例えば・・・。

class BaseballPlayer {
  private Bat myBat;

  BaseballPlayer() {
    myBat = new Bat();
  }

  void useBat();
}

class Bat {
  void useBat() {
    System.out.println("バットを振りました");
  }
}


BaseballPlayer クラスのフィールドに Bat 型の変数を宣言します。
コードの記述は↑みたいな感じ(だったはず)です。

あ!でも適当に思いついたこと書いてるだけなので,
間違ってる可能性のほうが高いです。
うまくいかなかったら即行見切りつけて別の方法模索しちゃってください++。


295 :大和 : 2009/03/11 04:57
この問題はありがたいなあ。
私が知らなかったことたくさん含んでいるから勉強になります。
もう眠いから寝よう・・。おやすみなさいー。


296 :大和 : 2009/03/11 10:56
>>294
ああ,全然関係ないですねこれ。
スルーしちゃってください。


297 :大和 : 2009/03/11 12:57
うーん。ちょっとでかいプログラムになるとお役に立てそうにないですね。
やること多いプログラムになると,ちゃんと時間かけて考えないと正しいこと言えないのに,
今はその余裕がないから適当なことしか言えないという状態です。
できる範囲で書き込みますが,私は役に立たないと思って動いちゃってください。


298 :アヌス : 2009/03/11 21:51
どうやらMovieはとやって新しいクラスで作るらしい・・・
今日明日試験あって、JAVAやる時間が明日の試験終わってからの1日しかなく、それで2つもプログラムが・・・終わるか・・・
まぁやってみます・・・
なんかもうめんどくなってきた・・・


299 :大和 : 2009/03/12 00:17
忙しすぎだwww
アメリカの大学は入るの簡単出るの大変ってのは本当だったかー。


300 :アヌス : 2009/03/12 06:19
Nodeとかthisってわかる?


267 KB
続きを読む

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.php ver2.4 2005/04/13