コンピュータが扱う2進数では、ほとんどの10進数の小数を正確に表現できません。分母が2の累乗になるような既約分数(1/2,3/4など)以外は誤差が生じます。この辺の詳細は→double,float型とBigDecimalクラスは何がどう違うのですか?
0.03,0.04,0.05をdoubleに変換した時点で誤差が生じており、それぞれの2乗計算ではその誤差が累積するため、直角になる条件である「引き算の結果がちょうど0」は満たせません。整数と一致するdoubleであれば誤差が生じないので成立しますが。
10進数の計算を正確に行いたいなら、BigDecimalを使うなどの方法になります。
java
1import java.util.Scanner;
2import java.math.BigDecimal;
3
4public class ClassifyingToys{
5 public static void main(String[] args){
6 Scanner scan = new Scanner(System.in);
7
8 BigDecimal[] array = new BigDecimal[3];
9 for (int i = 0 ; i < 3 ; i++) {
10 array[i] = new BigDecimal(scan.next());
11 }
12 int result = array[2].pow(2).compareTo(array[0].pow(2).add(array[1].pow(2)));
13 if(result < 0){
14 System.out.println(" : acute-angled");
15 }else if(result == 0){
16 System.out.println(" : right-angled");
17 }else{
18 System.out.println(" : obtuse-angled");
19 }
20 }
21}
追記:改めて調べてみたら、Scannerで直接BigDecimalを取得できたので変更
java
1import java.util.Scanner;
2import java.math.BigDecimal;
3
4public class ClassifyingToys{
5 public static void main(String[] args){
6 Scanner scan = new Scanner(System.in);
7
8 BigDecimal[] array = new BigDecimal[3];
9 for (int i = 0 ; i < 3 ; i++) {
10 array[i] = scan.nextBigDecimal();
11 }
12 int result = array[2].pow(2).compareTo(array[0].pow(2).add(array[1].pow(2)));
13 if(result < 0){
14 System.out.println(" : acute-angled");
15 }else if(result == 0){
16 System.out.println(" : right-angled");
17 }else{
18 System.out.println(" : obtuse-angled");
19 }
20 }
21}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。