読者です 読者をやめる 読者になる 読者になる

丸三角四角

IT業界にしがみつく新人SEが立派なプログラマになろうともがく奮闘記

【Java】九九の出力_Ver2

コードを更新致しました。

固有処理基底クラスを継承するようにし、テストドライバ用基底クラスを更新したので、更新したコードを紹介いたします。

import static java.lang.System.out;
import java.util.Scanner;
import volume0.BaseExe;

public class QQ extends BaseExe {

    public static void main(String[] args) {
        new QQ().recursionQQ();
    }

    @Override
    protected void execute(Scanner scan) {
        for (int i = 1; i < 10; i++) {
            for (int j = 1; j < 10; j++) {
                out.println(i + "x" + j + "=" + i * j);
            }
        }
    }

    public void recursionQQ() {
        recursionQQ(1);
    }

    public void recursionQQ(int i) {
        if (i > 9)
            return;
        recursionQ(i, 1);
        recursionQQ(++i);
    }

    public void recursionQ(int i, int j) {
        if (j > 9)
            return;
        out.println(i + "x" + j + "=" + i * j);
        recursionQ(i, ++j);
    }
}

九九を出力するだけなので、あまり親クラスの恩恵は得られてないですね。

以下テストドライバです。

import static org.junit.Assert.assertEquals;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import volume0.BaseTest;

public class QQTest extends BaseTest {

    private QQ qq;

    @Before
    public void setUp() throws Exception {
        super.setUp();
        qq = new QQ();
    }

    @After
    public void tearDown() throws Exception {
        super.tearDown();
    }

    @Test
    public void testLoopQQ0001() {
        qq.exeSysIn();
        assertOutList("./data/volume0_0001/out.txt");
    }

    @Test
    public void testRecursionQQ0001() {
        qq.recursionQQ();
        assertOutList("./data/volume0_0001/out.txt");
    }

    @Test
    public void testRecursionQQ0002() {
        qq.recursionQQ(1);
        assertOutList("./data/volume0_0001/out.txt");
    }

    @Test
    public void testRecursionQ0001() {
        qq.recursionQ(1, 8);
        String[] outList = outContent.toString().split("\n");
        assertEquals("1x8=8", "1x8=8", outList[0]);
        assertEquals("1x9=9", "1x9=9", outList[1]);
    }
}

Ver1ではtrycatch文がありましたが、そのコードがなくなった分スッキリしました。テストドライバ内の「out.txt」の内容は以下です。

out.txt
1x1=1
1x2=2
1x3=3
1x4=4
1x5=5
1x6=6
1x7=7
1x8=8
1x9=9
2x1=2
2x2=4
2x3=6
2x4=8
2x5=10
2x6=12
2x7=14
2x8=16
2x9=18
3x1=3
3x2=6
3x3=9
3x4=12
3x5=15
3x6=18
3x7=21
3x8=24
3x9=27
4x1=4
4x2=8
4x3=12
4x4=16
4x5=20
4x6=24
4x7=28
4x8=32
4x9=36
5x1=5
5x2=10
5x3=15
5x4=20
5x5=25
5x6=30
5x7=35
5x8=40
5x9=45
6x1=6
6x2=12
6x3=18
6x4=24
6x5=30
6x6=36
6x7=42
6x8=48
6x9=54
7x1=7
7x2=14
7x3=21
7x4=28
7x5=35
7x6=42
7x7=49
7x8=56
7x9=63
8x1=8
8x2=16
8x3=24
8x4=32
8x5=40
8x6=48
8x7=56
8x8=64
8x9=72
9x1=9
9x2=18
9x3=27
9x4=36
9x5=45
9x6=54
9x7=63
9x8=72
9x9=81

 

今回の問題は、以下にあります。

九九 | Aizu Online Judge

アルゴリスムで困った時は、以下の本を参考にしてます。Javaに置き換えるのが少々難解ですが、、、

固有処理の基底クラスは以下の記事に記載していますので、参考にしてください。

dadainu.hateblo.jp

テストドライバで継承しているクラスは以下の記事に記載していますので、参考にしてみてください。

dadainu.hateblo.jp

Ver1のコードは以下にあります。

dadainu.hateblo.jp