使用构造函数查找孪生素数

Finding Twin Primes with 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,因此我们将不胜感激。 另外由于我是新手,如果您在我的代码中发现任何不良习惯,请随时告诉我,以便我成为一个更好的程序员。

您没有得到任何输出,因为 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();
}