-1

0A三角形の面積を取得する次のJavaコードを作成しました。この誤った出力の理由は何ですか?

package methodoverrideoverload;

import java.io.*;
import java.util.*;

class Figure_Area {
    int dima;
    int dimb;

    Figure_Area()
    {
    }

    Figure_Area(int i, int j)
    {
        dima=i;
        dimb=j;
    }

    void cal_area()
    {
        System.out.println("Area is undefined!!");
    }
}

class Figure_Area_Tri extends Figure_Area {

    Figure_Area_Tri(int i, int j)
    {
        super(i,j);
    }

    void cal_area()
    {
        System.out.println("The area of the Triangle is "+((1/2)*dima*dimb));
    }
}

class Figure_Area_Rec extends Figure_Area {

    Figure_Area_Rec(int i, int j)
    {
        super(i,j);
    }

    void cal_area()
    {
        System.out.println("The area of the Rectangle is "+ dima*dimb);
    }
}

class Figure_Area_Cir extends Figure_Area {
    double pi=3.14;

    Figure_Area_Cir(int i)
    {
        super.dima=i;
    }

    void cal_area()
    {
        System.out.println("The area of the Circle is "+ (pi*dima*dima));
    }
}

class findArea {

    public static void main(String args[]) throws IOException
    {
        System.out.println("<<-MENU-->>");
        System.out.println("Enter the figure you want to know the area of->");
        System.out.println("Press 1 for Triangle");
        System.out.println("Press 2 for Rectangle");
        System.out.println("Press 3 for Circle");
        System.out.println("Press 4 to Exit");
        System.out.println("Enter your choice->");

        Scanner sc=new Scanner(System.in);
        int ch=sc.nextInt();
        switch(ch)
        {
            case 1:
                System.out.println("Enter Height->");
                int h=sc.nextInt();
                System.out.println("Enter Base->");
                int b=sc.nextInt();
                Figure_Area_Tri tri=new Figure_Area_Tri(h,b);
                tri.cal_area();
                break;

            case 2:
                System.out.println("Enter Length->");
                int len=sc.nextInt();
                System.out.println("Enter Breadth->");
                int bre=sc.nextInt();           
                Figure_Area_Rec rec=new Figure_Area_Rec(len,bre);
                rec.cal_area();
                break;

            case 3:
                System.out.println("Enter Radius->");
                int rad=sc.nextInt();
                Figure_Area_Cir cir=new Figure_Area_Cir(rad);
                cir.cal_area();
                break;

            case 4:
                break;

            default:
                System.out.println("Sorry! Invalid Choice");
        }
    }
} 

デバッグモードでコードを調べたところ、 と の値がdima入力dimb値として設定されていることがわかりましたが、どういうわけか、area の関数は正しい結果を出すことができない可能性が高いです。

4

3 に答える 3

4

整数変数では、Java は整数演算を使用します。たとえば、

1/2==0

これを解決するには、二重数学を使用します

1.0/2==0.5

1.0 の代わりに 1d も機能します

だからあなたの場合

(1.0/2)*dima*dimb

変数の 1 つが double である限り、double 数学が適用されます (方程式に複数の「部分」が含まれている場合は注意してください。各部分には double が含まれている必要があります)。


役に立たないこととその理由

double ( (double)(1/2)*dima*dimb) にキャストするだけでは問題は解決しないことに注意してください。

(double)(1/2)*dima*dimb
(double)(0)*(dima*dimb)
(double)(0)
0.0
于 2013-11-08T13:46:39.653 に答える
0

1/2 には double または float を使用してみてください。

整数を使用する場合、整数には 0.5 などがないため、0 になります。

1/2fたとえば、書く1/2dか、他の答えを見ることができます:)

于 2013-11-08T13:47:18.097 に答える