2

我是 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);
                }
        }

    }
}
4

9 回答 9

5

所以基本上你要做的是有一个函数来检查一个数字是否是素数。之后,您必须从 2 开始计数并将每个数字传递给该函数。如果它返回真,打印它并记录你找到一个素数的事实。当你这样做了 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++;
        }
    }
}

如果有不清楚的地方,请询问。

于 2012-04-25T16:26:36.647 回答
2

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

  • 创建一个方法boolean isPrime(int i),如果 i 是素数则返回 true,否则返回 false。
  • 测试该方法是否返回一些数字的预期值(真/假),以说服自己您的算法有效
  • 循环从 1 到 Integer.MAX_VALUE 的整数,并使用上面的方法检查它们中的每一个:如果它是素数,则打印它并增加你的计数。
  • 当计数达到 100 时停止。
于 2012-04-25T15:58:33.090 回答
0

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

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

于 2012-04-25T15:58:22.970 回答
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;
    }
}
于 2013-04-21T19:03:07.037 回答
0

质数:

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

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

于 2012-04-25T16:06:30.973 回答
0

您应该num在每个周期中递增,并且count在找到素数时也应该递增。

哦,你DIVISOR不能是 1 也不能是最终的 :) 对于你的每个数字,你应该尝试将它除以 2 和 number-1 之间的除数 - 以确定它是否是质数。

于 2012-04-25T15:54:01.770 回答
-1

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

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 + " ");
        }
    }   
  }
}
于 2013-06-25T12:56:55.353 回答
-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);
            }
        }
    }
}
于 2016-04-18T18:04:10.297 回答
-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);
            }
        }
    }
}
于 2016-04-26T12:44:40.203 回答