建议改进有关素数的代码?

时间:2019-04-28 17:39:18

标签: java

我编写了有关素数的代码,并且会听到您的意见或任何有关如何改进代码的建议。我是Java的初学者。

public static void main(String[] args) {

    Scanner s = new Scanner(System.in);

    boolean a;

    System.out.println("Please enter a number: ");
    int zahl = s.nextInt();

    if(zahl <= 0) {
       System.out.println("Please enter a positive number without zero.");
       return;

    }

    a = true;
    for (int i = 2; i < zahl; i++) {

        if (zahl % i == 0) {
            a = false;
        }
    }

    if (a == true) {
        System.out.println("Is Prim");
    }

    if (a==false){
        System.out.println("Not a prim");
    }
}

3 个答案:

答案 0 :(得分:0)

一些提示:

你做

   System.out.println("Please enter a positive number without zero.");
   return;

println 建议用户可以输入一个新值,但是不能,在这种情况下,最好说这个数字无效,所以您退出

当您执行a = false;时,继续下去是没有用的, a 不可能恢复为真

尝试将数字除以sqrt以上是没有用的

有必要尝试用2除而不是其他偶数,因此将2加到 i 而不是1

如果if (a == true)为假,则检查if (a==false)无用

答案 1 :(得分:0)

最容易做到的是以下

代替

 for (int i = 2; i < zahl; i++) {

        if (zahl % i == 0) {
            a = false;
        }
    }

将for循环更改为

  for (int i = 2; i < Math.sqrt(zahl); i++)

如果没有平方根除以zahl的数字,则除平方根以外的任何数字都将除以zahl(这是先前除法的结果)。

此外,要输出答案,您可以执行以下操作:

System.out.println(zahl + " is " + ((a) ? "prime"
            : "not prime"));

使用三元运算符?:

答案 2 :(得分:0)

您的代码是好的。我做了三个小改进:

  • 输入立即(不仅在输入错误后)要求输入 正整数。
  • 重复输入,直到正确为止。
  • for循环最多运行到sqrt(zahl)就足够了。
public static void main(String[] args) {

    Scanner s = new Scanner(System.in);

    boolean a;

    int zahl = 0;
    while (zahl <= 0) {
        System.out.println("Please enter a positive int without zero.");
        zahl = s.nextInt();
    }

    a = true;
    for (int i = 2; i <= Math.sqrt(zahl); i++) {

        if (zahl % i == 0) {
        a = false;
        break;
        }
    }

    if (a == true) {
        System.out.println("Is Prim");
    } else {
        System.out.println("Not a prim");
    }
}