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

丸三角四角

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

【Java】直角三角形判定_Ver2

AOJ IT JUnit Java アルゴリズム プログラミングコンテスト

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

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

import static java.lang.Integer.parseInt;
import static java.lang.Math.pow;
import static java.lang.System.out;
import java.util.Scanner;
import volume0.BaseExe;

public class RightTriangle extends BaseExe {

    public static void main(String args[]) {
        new RightTriangle().exeSysIn();
    }

    @Override
    protected void execute(Scanner scan) {
        int dataCount = parseInt(scan.nextLine());
        for (int i = 0; i < dataCount; i++) {
            String[] data = scan.nextLine().split(" ");
            printJudgeTriangle(parseInt(data[0]), parseInt(data[1]), parseInt(data[2]));
        }
    }

    private void printJudgeTriangle(int a, int b, int c) {
        if (judgeTriangle(a, b, c) || judgeTriangle(b, c, a) || judgeTriangle(c, a, b)) {
            out.println("YES");
        } else {
            out.println("NO");
        }
    }

    private boolean judgeTriangle(int x, int y, int z) {
        return pow2(x) + pow2(y) == pow2(z);
    }

    private double pow2(double num) {
        return pow(num, 2);
    }
}

入力に対する処理を固有処理基底クラスを継承したことで無くなったので、だいぶコードがスッキリしました。テストドライバは以下になっています。

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import volume0.BaseTest;

public class RightTriangleTest extends BaseTest {

    private RightTriangle rt;

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

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

    @Test
    public void testRight0001() {
        rt.exeFileIn("./data/volume0_0003/in.txt");
        assertOutList("./data/volume0_0003/out.txt");
    }
}

Ver1のテストドライバでは、「trycatch」文がありましたが、Ver2でそれが無くなったことでテストドライバもスッキリしました。テストドライバ内で使用してる「in.txt」・「out.txt」は、以下の内容となっています。

in.txt
3
4 3 5
4 3 6
8 8 8
out.txt
YES
NO
NO

今回の問題の解説等はVer1の記事に詳しく記載しているのでそちらを参照してください。

dadainu.hateblo.jp

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

正三角形 | Aizu Online Judge

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

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

dadainu.hateblo.jp

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

dadainu.hateblo.jp