首页 > 解决方案 > 用构造函数寻找孪生素数

问题描述

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

该程序将打印所有孪生素数(它们之间有 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,所以任何帮助将不胜感激。另外由于我是新手,如果您在我的代码中发现任何不良习惯,请随时告诉我,以便我成为更好的程序员。

标签: javaconstructorprimes

解决方案


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

推荐阅读