用构造函数查找双素数

时间:2018-10-02 11:28:39

标签: java constructor

只是为了好玩,我想看看我是否可以使用代码来显示双素数作为学习构造函数的练习。我虽然使用了很好的逻辑,但是由于某种原因我无法使其正常工作。

此程序将打印所有双素数(它们之间有1个间隙的素数),直到用户输入给定的数字为止。

package X;

import java.io.*;
import java.util.*;

class TwinPrimeWithConstructor {
    int limit;

    public void Twin() {
        limit = 0;
    }

    public static void input() {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter Limit");
        int limit = input.nextInt();
    }

    public void display() {
        for (int k = 1; k <= (limit - 2); k++) {
            int a = prime(k);
            int b = prime(k + 2);
            if (a == 1 && b == 1) {
                System.out.println(k + "," + k + 2);
            }
        }
    }

    public int prime(int n) {
        int c = 0;
        int d = 0;
        for (int i = 1; i <= n; i++) {
            if (n % i == 0) {
                c = c + 1;
            }
        }
        if (c == 2) {
            d = 1;
            return d;
        } else {
            return d;
        }
    }

    void main() {
        TwinPrimeWithConstructor ob = new TwinPrimeWithConstructor();
        ob.input();
        ob.display();
    }
}

此程序设法正确检测素数并要求输入,但不提供任何输出。有人可以向我说清楚吗?我仍在学习Java,因此将不胜感激。 另外,由于是新手,如果您在我的代码中发现任何不良习惯,请随时告诉我,以便我可以成为一名更好的程序员。

1 个答案:

答案 0 :(得分:2)

您没有得到任何输出,因为this.limit始终是0

int limit = Input.nextInt();

您应该将输入分配给实例字段,而不是新的局部变量。为此,input方法不能为static

public void input() {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter Limit");
    limit = input.nextInt();
}