`package com.kuberan;
导入java.util.Scanner;
公共类主要{
public static void main(String[] args) {
// perfect number is the number in which the sum of factors of the given number is equal to itself
Scanner scr = new Scanner(System.in);
System.out.println("enter the number");
int n = scr.nextInt();
int sum = 0;
for (int i = 1; i < n / 2; i++) {
if (n % i == 0) {
sum = sum + i;
}
}
if (sum == n) {
System.out.println("The given number is prfect number");
} else
System.out.println("The given number is not perfect number ");
}
}
`我已经编写了这段代码:
Scanner scr = new Scanner(System.in);
System.out.println("enter the number");
int n = scr.nextInt();
int sum = 0;
for (int i = 0; i < n / 2; i++) {
if (n % i == 0) {
sum = sum + i;
}
}
if (sum == n) {
System.out.println("The given number is perfect number");
} else {
System.out.println("The given number is not perfect number");
}
它会引发以下异常:
线程“ main”中的异常java.lang.ArithmeticException:/在com.kuberan.Main.main(Main.java:17)处为零
您能帮我找到错误吗?
答案 0 :(得分:2)
模数符号与除法相似,因为其第二个操作数不能为零。如果您提供零,就像/
一样,Java将抛出ArithmeticException
。
我不了解您程序的目的,但是从您发布的代码来看,发生的事情非常简单。该错误消息指出该错误发生在您的Main
类的第17行上。
您将i
初始化为0。
当您的循环开始运行时,Java会尝试运行n % i
,它会变成n % 0
。这会导致异常。
根据程序的不同,应避免除以i
为零的情况。
答案 1 :(得分:0)
您将i初始化为0,因此在您的for循环中,它会尝试在第一步中除以0,以避免您可以按i = 1进行初始化。
答案 2 :(得分:0)
让我们看看该错误消息,并将其分成几部分。
Exception in thread "main"...
:这可以告诉您异常在哪里。在这种情况下,它位于main
函数中。据我所知,您的整个应用程序都在main
函数中,因此这不会缩小范围,但是请注意将来的语法。
...java.lang.ArithmeticException:...
:这提供了指向您所遇到的异常类型的类的路径。这是一个与算术有关的非常普遍的例外。
... / by zero ...
:代表“被零除”。由于无法将值分成零组,因此无法定义除以零的数字。 Java会预料到这一数学难题,并会警告您。所以我们知道问题出在哪里:您已将数字除以零。
...at com.kuberan.Main.main(Main.java:17)
:关于错误发生位置的更多上下文。 17代表代码中的第17行,让我们看一下。
您的编辑器已帮助突出显示该错误。您正在检查n % i == 0
。 %
运算符执行除法运算并返回n/i
的余数。进行此检查时,最初是在检查n % 0
,该错误将返回此错误,因为您无法将其除以0。尝试将i
初始化为1而不是0:
for (int i = 1; ...
答案 3 :(得分:0)
if(n%i == 0)中的错误; %(模数)结果将为0或1,但我不应为0;