[英]Unexpected output in a java program
我编写了以下java代码,其中A三角形的面积为0
。 此错误输出的原因可能是什么?
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函数很可能无法给出正确的结果。
例如,对于整数变量,java使用整数数学
1/2==0
为了解决这个问题,请使用双重数学
1.0/2==0.5
1d也可以代替1.0
所以你的情况
(1.0/2)*dima*dimb
只要其中一个变量是双精度变量,然后应用双精度数学运算(请注意,当方程式包含多个“部分”时,每个部分都必须有一个双精度变量)。
请注意,仅强制转换为double( (double)(1/2)*dima*dimb
)并不能解决问题,因为细节已经在强制转换为double的点上丢失了,因为
(double)(1/2)*dima*dimb
(double)(0)*(dima*dimb)
(double)(0)
0.0
您正在使用1/2等于0
您需要使用双精度,所以1.0 / 2.0 = 0.5
尝试将double或float用作1/2。
如果您使用整数,则它将为0,因为没有整数等值为0.5。
您可以写例如1/2f
或1/2d
或查看其他答案:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.