<form>
<input type="number" name="latitude" >
<input type="number" name="longitude" >
<input type="button" onclick="ShowMap(latitude.value,longitude.value)" value="ShowMap"/>
</form>
我面临的问题是我不明白为什么这不起作用而给我一个错误。
public class Rational {
int num, denom; /*I'm building an object named "Rational, which takes in two int values, num and denom, and represent them as a rational number(num/denom)*/
public Rational(int a, int b){//this is the constructor
this.num = a;
this.denom = b;
}
public Rational(){//this is just another form of constructor
this.num = 0;
this.denum = 0;
}
public static void printRational(Rational x){/*this is the method that prints the rational number in a fractional format*/
System.out.println(x.num+"/"+x.denom);
}
public static int gcd(int a, int b){/*this is the method which finds the greatest common denominator of numerator of denominator. This will be used to simplify the fraction*/
if(b == 0){
return a;
}
else{
return gcd(b, a%b);
}
}
public static Rational add(Rational x, Rational y){/*this is a method which adds the two rational numbers(or objects) together, then simplify it utilizing the gcd method*/
Rational z = new Rational();
z.denom = (x.denom * y.denom);
z.num = y.num*x.denom + x.num*y.denom;
z.denom = z.denom/gcd(z.num, z.denom);
z.num = z.num/gcd(z.num, z.denom);
return z;
}
public static void main(String[] args) {
Rational y = new Rational(1, 2); //1st Rational Object: y
Rational z = new Rational(2, 6); //2nd Rational Object: z
printRational(add(y, z)); //implementing the method
//result? so far so good. I get the correct result
}
}
为什么这会给我一个错误消息:“线程中的异常”main“java.lang.ArithmeticException:/ by 0
在Rational.add(Rational.java:47)
在Rational.main(Rational.java:58)“当对象的实例是public static Rational add(Rational x, Rational y){
Rational z = new Rational();
int a = (x.denom * y.denom);
int b = y.num*x.denom + x.num*y.denom;
z.denom = a/gcd(z.num, z.denom);
z.num = b/gcd(z.num, z.denom);
return z;
}
类型时,我将临时性存储到int
请帮助我,如果你看到我不知道的话看!!谢谢。
答案 0 :(得分:2)
当你说“它不工作”时,我不知道究竟是什么问题。如果你能分辨它给出的错误会有所帮助。但是,根据您的说法,可能是因为您尚未初始化 z.num 和 z.denom 并将它们发送到 gcd() ??它们都是零,因为它们是 原始数据类型“int” 所以你的 gcd方法将返回0 并导致例外。
public static Rational add(Rational x, Rational y){
Rational z = new Rational();
int a = (x.denom * y.denom);
int b = y.num*x.denom + x.num*y.denom;
z.denom = a/gcd(z.num, z.denom); <--------------
z.num = b/gcd(z.num, z.denom); <--------------
return z;
}
答案 1 :(得分:0)
在这种情况下,您使用错误的实现来分割gcd,因为数字会发生变化。
z.denom = z.denom/gcd(z.num, z.denom);
z.num = z.num/gcd(z.num, z.denom);//z.denom is changed here.
z.denom
可以0
,因为它已更改,因此gcd为0
,因此也是例外。
所以你能做的就是。
int gcd = gcd(z.num, z.denom);
z.denom /= gcd;
z.num /= gcd;
当num或denom为0
时,这也会失败。