显示前100个素数的程序未显示

时间:2012-04-25 15:51:23

标签: java primes

我是Java的新手,我一直在互联网上搜索一个小时的答案但找不到任何东西。

我正在尝试创建一个以这种格式显示前100个素数的程序:

First One Hundred Primes:
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173
179 181 191 193 197 199 211 223 227 229
233 239 241 251 257 263 269 271 277 281
283 293 307 311 313 317 331 337 347 349
353 359 367 373 379 383 389 397 401 409
419 421 431 433 439 443 449 457 461 463
467 479 487 491 499 503 509 521 523 541

编辑:^这种格式也应该是右对齐的。

当我尝试在控制台中运行它时,我不确定为什么它没有显示任何内容。 不,我的代码还没有完全完成。 请帮我解释为什么它没有显示和其他任何我做错了,谢谢! :)

这是我现在的代码:

public class PrimeNumbers {

    public static void main(String[] args) {
        final int DIVISOR = 1;
        boolean isPrime;
        int test1 = 0;
        int test2 = 0;
        int num = 1;
        int count = 0;

        while(count < 101) {
            test1 = num/DIVISOR; //divides number by 1
            test2 = num%num; //gets remainder of number

            if (test1 == num && test2 == 0 && num > 1) //checks if test 1 is the same as num, test2 equals to 0 and if num is greater than 1
                isPrime = true;
            else
                isPrime = false;

                if (isPrime == true) {
                    System.out.format("%3.3f");
                    System.out.println("First One Hundred Primes:");
                    System.out.print(num);
                }
        }

    }
}

9 个答案:

答案 0 :(得分:5)

所以基本上你要做的就是有一个函数来检查数字是否为素数。之后,您必须从2开始计数并将每个数字传递给该函数。如果它返回true,则打印它并记录您找到素数的事实。当你这样做100次时,你可以停下来。以下代码实现了这一点:

public class OneHundredPrimes
{
    public static boolean isPrime(int x)
    {
        for (int i = 2; i <= Math.sqrt(x); i++) {
            if (x % i == 0) {
                return false;
            }
        }

        return true;
    }

    public static void main(String[] args)
    {
        int currentNumber = 2;
        int primesFound = 0;

        while (primesFound < 100) {
            if (isPrime(currentNumber)) {
                primesFound++;

                System.out.print (currentNumber + " ");
                if (primesFound % 10 == 0) {
                    System.out.println();
                }
            }

            currentNumber++;
        }
    }
}

如果不清楚,请询问。

答案 1 :(得分:2)

我认为您应该重新考虑代码的设计:

  • 创建一个方法boolean isPrime(int i),如果我是素数,则返回true,否则返回false。
  • 测试该方法返回一些数字的预期值(true / false)以说服自己您的算法正常工作
  • 将整数从1循环到Integer.MAX_VALUE并使用上面的方法检查每个整数:如果是素数,则打印它并递增计数。
  • 当计数达到100时停止。

答案 2 :(得分:0)

你应该在每个周期增加num,并且每当你找到一个素数时你也应该增加count

哦,你的DIVISOR不能是1并且不能是最终的:)对于你的每个数字,你应该尝试除以2和数字1之间的除数值 - 以找出它是否是素数。

答案 3 :(得分:0)

如果这是作业,请相应标记。

考虑你的while循环。循环如何退出?考虑你的计数器,它们什么时候递增?

答案 4 :(得分:0)

素数:

A Prime Number can be divided evenly only by 1 or itself. 
And it must be greater than 1.

基于此,您需要修改您的程序: -
1.取2个循环
2.一个是计数的外循环&lt; = 100
3.一个是内循环,它检查数字是否为素数并显示它

答案 5 :(得分:0)

class StackOfInteger {
    private int[] elements;
    private int size;
    public static final int DEFAULT_CAPACITY = 2;

    public StackOfInteger() {
        size = 0;
        elements = new int[DEFAULT_CAPACITY];
    }

    public StackOfInteger(int capacity) {
        elements = new int[capacity];
    }

    public int push(int value) {
        if (size >= elements.length) {
            int[] temp = new int[elements.length * 2];
            System.arraycopy(elements, 0, temp, 0, elements.length);
            elements = temp;
        }
        return elements[size++] = value;
    }

    public int pop() {
        return elements[--size];
    }

    public int peek() {
        return elements[size - 1];
    }

    public boolean empty() {
        return size == 0;
    }

    public int getSize() {
        return size;
    }
}

public class JavaApplication82 {
    public static void main(String[] args) {
        // TODO code application logic here
        String getInput = JOptionPane.showInputDialog("Get your shit !");
        int input = Integer.parseInt(getInput);
        getPrime(input);
    }

    public static void getPrime(int getInput) {
        StackOfInteger stack = new StackOfInteger();
        int dem = 4;
        stack.push(2);
        stack.push(3);
        do {
            if (isPrime(dem) == true) {
                stack.push(dem);
                dem++;
            } else
                dem++;
        } while (dem <= getInput);
        while (!stack.empty())
            System.out.println(stack.pop() + " ");
    }

    public static boolean isPrime(int getNumber) {
        int dem1 = 0;
        int[] arrayTest = new int[getNumber];
        for (int i = 2; i <= getNumber; i++) {
            arrayTest[i] = i;
        }
        for (int i = 2; i < getNumber; i++) {
            if (getNumber % arrayTest[i] == 0)
                dem1++;
            else
                continue;
        }
        if (dem1 != 0)
            return false;
        else
            return true;
    }
}

答案 6 :(得分:-1)

另一种方法是将prime方法与main(基于第一个解决方案)分开注意:这是没有文本格式:

public class Primes
{
    public static boolean isPrime (int x)
    {
        for (int i = 2; i <= Math.sqrt (x); i++)
        {
            if (x % i == 0)
            {
                return false;
            }
        }
        return true;
    }

    public static void main (String[] args)
    {
    new Primes().findprimes(100);  // <<--here you can choose whatever k prime
    }

    public void findprimes (int k){
    for (int i = 2, primesfound = 0; primesfound < k+1 ; i++)
    {
        if (isPrime (i))
        {
            primesfound++;
            System.out.print (i + " ");
        }
    }   
  }
}

答案 7 :(得分:-1)

public class prime {
    public static int Prime(int n,int counter)
    {
        if(n<=3 && n>0)
        {
            return n;
        }
        if((n-counter)==n || n%(n-counter)>0){
            counter++;
            return Prime(n,counter);
        }
        else if((n-counter)>1 && n%(n-counter)==0){
            return 0;
        }
        else
            return n;
    }
    public static void main(String[] args) {
        int k=0,found=0;
        for(int i=1;found<100;i++){
            k=Prime(i, 0);
            if(k>0){
               found++;
               System.out.println(k);
            }
        }
    }
}

答案 8 :(得分:-1)

package com.mehmood.nisar;

public class Myclass {

    public static void main(String [] args)
    {
        int status = 0;

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

            status =0;
            for (int j = 2; j < i; j++) {

                if(i %2 == 0)
                {
                    status = 1;
                    break;
                }

                try {
                    if(i % j == 0)
                    {
                        status = 1;
                        break;
                    }
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                }

            }//break;

            if(status == 0)
            {
                System.out.println(i);
            }
        }
    }
}