java.lang.ArithmeticException:/由零,逻辑错误?

时间:2018-05-11 20:59:10

标签: java

嗨,所以也许我没有看到错误所在的地方,或者我不能很好地了解java以了解操作的执行顺序,但有人可以向我解释为什么会出错吗? / p>

如果您知道自己的成绩和其中一个成绩,我会尝试编写一个代码来简单计算您在课程中的模块上获得所需成绩所需的最低成绩

//计算最低成绩

public int calculateMinimumGradeWith2Ass1unknown (int Grade1, int Weight1, int WeightOnNext, int WantedOverAll){

    int val1 = Grade1*(Weight1/100);
    int estimate = WantedOverAll-val1;
    int Grade2 = estimate/(WeightOnNext/100);

    return Grade2;
}

我赞美任何形式的帮助:)

2 个答案:

答案 0 :(得分:3)

首先,在Java变量名中首先使用小写字符编写(camelCase)。

类名首先用大写字符编写(PascalCase)。

现在异常。 WeightOnNext / 100可能很小,使用整数除法,它将四舍五入为零。然后你取estimate并将其除以0,这会产生异常。

int Grade2 = estimate / (WeightOnNext / 100);

只需将所有intdouble进行交换即可。

答案 1 :(得分:2)

似乎问题出现在代码的以下部分:

int Grade2 = estimate/(WeightOnNext/100);

如果您包含导致该异常的示例值会很有帮助,但您需要注意int s不支持小数部分,他们只是削减它。

因此,当WeightOnNext小于100时,(WeightOnNext/100)将始终被剪切为0,并且会在执行estimate/0;时导致异常

例如:

WeightOnNext = 50;

50 : 100 = 0.5,但小部分(.5)正在被削减,因此分配给0变量时会有int

您应该考虑使用double来执行此类操作以支持小数部分。

顺便说一下,您应该遵循Java语言的命名方式 - 变量名称应该写在 camelCase 中,以使您的代码在未来对其他人甚至对您来说更具可读性。