请解释此Java代码中的错误

时间:2019-02-05 06:03:28

标签: java exception

`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)处为零

您能帮我找到错误吗?

4 个答案:

答案 0 :(得分:2)

模数符号与除法相似,因为其第二个操作数不能为零。如果您提供零,就像/一样,Java将抛出ArithmeticException

我不了解您程序的目的,但是从您发布的代码来看,发生的事情非常简单。该错误消息指出该错误发生在您的Main类的第17行上。

  1. 您将i初始化为0。

  2. 当您的循环开始运行时,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;