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

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


2 :大和 : 2009/01/27 18:55
1000までいかないなんてひさしぶりだなあ
スレたてどうもです!


3 :大和 : 2009/01/27 19:02
真ん中の2文字を切り取るプログラムは,
length() メソッドを使いそうだなあ。

奇数ならfalse偶数ならtrueを返すプログラムは,
単純に計算処理をすれば良さそうかな!

ちょっと夕ご飯食べてくるね。
19時40分まで待ってねごめんね。



4 :アヌス : 2009/01/27 19:16
そうなんだよね。length()で文字数はかって2で割ったところの2文字を返せばいいだけだよね。
理解できないところは、テストメソッドとか、テストメソッドはTwoMethodsTest.javaへ行ってisEvenメソッドはTwoMethods.javaへ行くってのがサッパリです
テストされるメソッドのクラスに、length()を使った処理をするんだろうけど、ならテストメソッドって一体・・・?
普通に全部一緒にかけばいいと思うのになんでいちいちテストメソッドとかなんとか・・・と頭がこんがらがってしまっています・・・
上のソースが理解できない・・・


5 :大和 : 2009/01/27 19:59
テストメソッドはね!
本当にただ単に結果がちゃんと正しい結果が出るか,
テストしてるだけなんだ。

つまり,
テストメソッドがなくても,
プログラム2つとも動作します!

テストメソッドはプログラムのコードが完成したら,
あとでつけ足して,で動作確認するためのコードなんです。
テストメソッドがあろうとなかろうと,プログラムは動作するんですね。
だから今は,



// 現段階では不要なコードのため,コメントアウト。
// import static org.junit.Assert.*;
// import org.junit.Test;
//
// public class TwoMethodsTest {
//
//     // isTwo() のコード書き終わるまで,こいつはお預け。
//     @Test
//     public class testMiddleTwo {}
//     // isEven() のコード書き終わるまで,こいつはお預け。
//     @Test
//     public void testIsEven() {}

public class TwoMethods {
    public String middleTwo(String arg) {
        return "TBA"; // ここのメソッドを変えなければならないようです。→大和:了解。
    }

    public boolean isEven(int number) {
        return; // true か false を返せばいいね。
    }
}


まず土台はこんな感じかな!


6 :大和 : 2009/01/27 20:48
あ なんか土台だけ作っちゃえばもうみさきっさんできそうな予感が(’’
一応もうちょっと書いてみるね。



真ん中の2文字を切り取るプログラム

1. 引数で取得した String 型変数「arg(仮に「abcdef」とする)」の,真ん中2文字(「cd」)を取得する。
 1.1. 「1.」で取得した値を length() で文字数(「6」)を調べる。
 1.2. 文字数を 2 で割り,商を求める(結果は 3)。
 1.3. 「1.」で取得した値に,substring(「2.2. で求めた値 - 1」, 「2.2. で求めた値」) する。
  →この場合,「"abcdef".substring((3 - 1), 3)」と同義。

2. 「1.3.」で取得した値を return する。



奇数ならfalse偶数ならtrueを返すプログラム

1. 引数で取得した int 型変数「number」,奇数か偶数か判断する。
 1.1. 「1.」で取得した値を 2 で割り,余りを求める。
 1.2. 余りが 0 なら true に,1 なら false とする。

2. 「1.2.」で取得した値を return する。


7 :アヌス : 2009/01/27 20:33
いえ、すみません・・・ちょと頭の整理ができてなくて・・・
全体のプログラムではどのようになるんでしょうか・・・

コード書き終わったらテストメソッドを作るのか・・・。多分今回の課題ではやはりテストも作らないといけないのかな。
かざっさん、この場合のテストメソッドの作り方も聞いていいですか?


8 :アヌス : 2009/01/27 20:35
普通に真ん中の文字を返すとか異数偶数のプログラムを組むってんならすごいシンプルですぐできるんだけど、テストとか新しいのがまざった瞬間 いみわからんくなってしまう・・・
応用きくようにしないとダメだな・・・ショボン


9 :大和 : 2009/01/27 21:00
>>7,8
了解!
テストメソッドとプログラムのメソッドは,完っ璧に切り離して考えていいよ!
つまり,今はテストメソッドの事は,100%忘れちゃってください。

真ん中メソッドと偶奇メソッドの,
2つのメソッドを作る事だけ,考えてくれればいいよ!

真ん中メソッドと偶奇メソッドを完成させるまで,
テストメソッドは ま っ た く 関与してきません。
作ったあとにはじめて関与します。
これは作ったあとに,その意味がわかるはず^ω^。

なので今は,
「@Test ってなに・・・?」
「TwoMethods myFuns = new TwoMethods() ってなに・・・?」
「assertEquals("bc", myFuns.middleTwo("abcd")) ってなに・・・?」
とか,一切考えなくて大丈夫!

テストメソッドに関係する全ての事柄を,今は一切考えずに作ってくれて大丈夫だよ!


10 :大和 : 2009/01/27 21:02
テストメソッドも作るのが,今回の課題みたいだねー。
コードが出来上がったらテストメソッドを作ってみましょう!

なあに,テストメソッド作りはじめたら,ああこういう事だったのねってすぐわかるはずさ。
まずは,今は2つのプログラム作ってくれて大丈夫だよー。


11 :大和 : 2009/01/27 21:07
よし風呂だ。
みさきっさんコーディング頑張ってみてー(´∀`)。
テストメソッドは100%考えなくてオッケー!


12 :ねこみみ : 2009/01/27 22:08
かざっさんがんばって勉強したなぁ。

早くコンテンツ作ろうぜ!




13 :大和 : 2009/01/28 01:18
ありがとうー。
でもみんなにはまだまだ足元にも及ばんからね!
みんなに感謝しつつもっと精進します!
ゆくゆくは,いや近いうちに他の言語にも手を伸ばしてみないとね!


14 :アヌス : 2009/01/28 05:01
簡単に作ったけど、これでいいですよね?

public class TwoMethods {
public String middleTwo(String arg) {

int a = arg.length();
int b = a % 2;
String st = str.substring(b-1, a);

return st;
}



public boolean isEven(int number) {

int a = number % 2;
if(a==0)
return True;
else
return False;
}
}

間違ってたら教えてください。
そしてここでテストはどのように作るのでしょうか・・・


15 :大和 : 2009/01/28 08:27

public class TwoMethods {
    public String middleTwo(String arg) {
        int a = arg.length();
        int b = a % 2;
        String st = arg.substring((b - 1), b);

        return st;
    }

    public boolean isEven(int number) {
        int a = number % 2;
        if (a == 0)
            return true;
        else
            return false;
    }
}


細かいとこの指摘ですが,こんな感じかな!
あとは完璧ですね!


16 :大和 : 2009/01/28 09:19

import static org.junit.Assert.*;
import org.junit.Test;

public class testTwoMethods {

    @Test
    public void testMiddleTwo() {
        TwoMethods myFuns = new TwoMethods();

        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"));
        assertEquals("ゃん", myFuns.middleTwo("カトちゃんペッ!"));


    @Test
    public void testIsEven() {
        TwoMethods myFuns = new TwoMethods();

        assertTrue(myFuns.isEven(24));
        assertTrue(myFuns.isEven(-128));
        assertFalse(myFuns.isEven(25));
    }
}



これがテストクラスだよー。

実はこれ,「テストクラス」とか「テストメソッド」なんてかっこいい名称がついているけど,
普通のクラスやメソッドと大差ない,ただの「クラス」と「メソッド」なんだ。

「JUnitというテスト動作確認ツール」で動作させるために,
普通の「クラス」をちょっと 改 変 し た だ け のただのクラスなのです。

テストクラスで不明な箇所があったら何なりと聞いてね!


17 :大和 : 2009/01/28 09:18
>>1
> しかいしくつか抜けてるところがあってそれをコンプリートしなきゃいけないみたいです。

>>14のコードで完璧です。
実装メソッドの抜けてるところは,これでコンプリートしましたね!
テストクラスも,みさきっさんが提示してくれたやつ(>>16)で,もうこれでコンプリートです。
もうこれで十分ですが,
まだテストケースを追加したいなら追加してもおk!


> このクラスは、Stringsといくつかの基本となるタイプを処理するメソッドをテストするための2つのメソッドのテストが記されている(日本語がおかしい・・・汗)

大丈夫です。ちゃんと理解できる文章ですよ。


> public class TwoMethods {
> public String middleTwo(String arg) {
> return "TBA"; //ここのメソッドを変えなければならないようです。
> }

もう変え終わりましたね。おつかれさま。


> おそらくエラーが出るそうです。JUnit 4はbuild pathにないからだとか。だからJUnit 4をbuild pathに加えないといかんとかなんとか・・・
> JUnit testとして実行する。でもassertionはパスしない(赤いバーになる)。
> だからTwoMethods.middleTwo(String)を修正する必要があると・・・

>>16ので,再度テストをかけてみてください。
今度は赤いバーが出ないで全部緑のバーになるはずです!


> public boolean isEven(int number)
> @Test
> public void testIsEven() {
>     TwoMethods myFuns = new TwoMethods();
>     assertTrue(myFuns.isEven(24));
>
> // ここにあといくつかassertionを加えたいのです。
> assertFalse(myFuns.isEven(25));
> みたいな感じでいいのかな。多分他のケースも加えないといかんのかな。

みたいな感じで完璧です!
testIsEven() の目的は,isEven() から return されてくる値が「偶数」か「奇数」かを,調べる事です。
なので,この 24 と 25 だけで完璧だよー。



テストメソッドに関する書き込みは以上です。
みさきっさんさすが。
ここどうなってるの?って箇所があったらどんどんまた聞いてくださいね。


18 :アヌス : 2009/01/28 17:53
実行の手順ですけど、テストメソッドと本体は一緒に実行するん?それともテストだはテストだけで?

import static org.junit.Assert.*;
import org.junit.Test;

public class testTwoMethods {

@Test
public void testMiddleTwo() {
TwoMethods myFuns = new TwoMethods();

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"));
assertEquals("ゃん", myFuns.middleTwo("カトちゃんペッ!"));


@Test
public void testIsEven() {
TwoMethods myFuns = new TwoMethods();

assertTrue(myFuns.isEven(24));
assertTrue(myFuns.isEven(-128));
assertFalse(myFuns.isEven(25));
}
}

これだけで実行するのか・・・それとも

import org.junit.Test;

public class testTwoMethods {

@Test
public void testMiddleTwo() {
TwoMethods myFuns = new TwoMethods();

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"));
assertEquals("ゃん", myFuns.middleTwo("カトちゃんペッ!"));


@Test
public void testIsEven() {
TwoMethods myFuns = new TwoMethods();

assertTrue(myFuns.isEven(24));
assertTrue(myFuns.isEven(-128));
assertFalse(myFuns.isEven(25));
}
}

public class TwoMethods {
public String middleTwo(String arg) {
int a = arg.length();
int b = a % 2;
String st = arg.substring((b - 1), b);

return st;
}

public boolean isEven(int number) {
int a = number % 2;
if (a == 0)
return true;
else
return false;
}
}

こうやって実行するのか・・・それとも本体をテストメソッドに挿入しなきゃいけないとか・・・

本体の
public class TwoMethods {
public String middleTwo(String arg) {
int a = arg.length();
int b = a % 2;
String st = arg.substring((b - 1), b);

return st;
}

public boolean isEven(int number) {
int a = number % 2;
if (a == 0)
return true;
else
return false;
}
}

にはimportとかがないけど・・・


19 :アヌス : 2009/01/28 18:37
ていうか、

public class TwoMethods {
public String middleTwo(String arg) {
int a = arg.length();
int b = a % 2;
String st = arg.substring((b - 1), b);

return st;
}

public boolean isEven(int number) {
int a = number % 2;
if (a == 0)
return true;
else
return false;
}
}

このプログラムではどうやってStringのargの値を取得するん?キーボード入力でもないし、初期化してるわけでもないし・・・

テストメソッドと本体とではnew TwoMethodsってのが共通してるけど、これでargのやりとりしてるん・・・?
テストと本体どうやって組み合わせて実行するかが・・・


267 KB
続きを読む

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

read.php ver2.4 2005/04/13