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

丸三角四角

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

【Java】直角三角形判定_Ver1

入力された三辺で三角形を作成した場合、直角三角形ができるかどうかを判定する問題です。

コード更新しています。解説等はこのままこの記事で解説していますので、解説等読んだ後はVer2のコードを参照してください。

dadainu.hateblo.jp

この問題を解くには、「三平方の定理」を使います。以下の公式を使用することで、直角三角形かどうか判定することができます。(「^2」は2乗を表現しています。)

a^2 + b^2 = c^2

上記の公式を踏まえた上で、以下コードです。

import static java.lang.Integer.parseInt;
import static java.lang.Math.pow;
import static java.lang.System.out;
import java.io.File;
import java.util.Scanner;

public class RightTriangle {

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

    public void right() {
        try (Scanner scan = new Scanner(System.in)) {
            scanInData(scan);
        } catch (Exception e) {
            System.exit(0);
        }
    }

    public void right(String inDataPath) {
        try (Scanner scan = new Scanner(new File(inDataPath))) {
            scanInData(scan);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void scanInData(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]));
        }
    }

    public 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");
        }
    }

    public boolean judgeTriangle(int x, int y, int z) {
        return pow(x, 2) + pow(y, 2) == pow(z, 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() {
        try {
            rt.right("./data/volume0_0003/in.txt");
            outList = outContent.toString().split("\n");
            assertOut(outList, "./data/volume0_0003/out.txt");
        } catch (Exception e) {
            printErr(e);
        }
    }
}

テストドライバの「in.txt」と「out.txt」は以下になります。

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

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

正三角形 | Aizu Online Judge

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

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

dadainu.hateblo.jp